mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
net: core: move mac_pton() to lib/net_utils.c
Since we have at least one user of this function outside of CONFIG_NET scope, we have to provide this function independently. The proposed solution is to move it under lib/net_utils.c with corresponding configuration variable and select wherever it is needed. Signed-off-by: Andy Shevchenko <andy.shevchenko@gmail.com> Reported-by: Arnd Bergmann <arnd@arndb.de> Acked-by: David S. Miller <davem@davemloft.net> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
143e9c76c4
commit
4cd5773a2a
|
@ -480,6 +480,7 @@ config BMP085_SPI
|
|||
|
||||
config PCH_PHUB
|
||||
tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) PHUB"
|
||||
select GENERIC_NET_UTILS
|
||||
depends on PCI
|
||||
help
|
||||
This driver is for PCH(Platform controller Hub) PHUB(Packet Hub) of
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/netpoll.h>
|
||||
#include <linux/inet.h>
|
||||
|
|
|
@ -30,7 +30,6 @@ static inline struct ethhdr *eth_hdr(const struct sk_buff *skb)
|
|||
|
||||
int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr);
|
||||
|
||||
int mac_pton(const char *s, u8 *mac);
|
||||
extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len);
|
||||
|
||||
#endif /* _LINUX_IF_ETHER_H */
|
||||
|
|
|
@ -450,6 +450,8 @@ static inline char * __deprecated pack_hex_byte(char *buf, u8 byte)
|
|||
extern int hex_to_bin(char ch);
|
||||
extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
|
||||
|
||||
int mac_pton(const char *s, u8 *mac);
|
||||
|
||||
/*
|
||||
* General tracing related utility functions - trace_printk(),
|
||||
* tracing_on/tracing_off and tracing_start()/tracing_stop
|
||||
|
|
|
@ -22,6 +22,9 @@ config GENERIC_STRNCPY_FROM_USER
|
|||
config GENERIC_STRNLEN_USER
|
||||
bool
|
||||
|
||||
config GENERIC_NET_UTILS
|
||||
bool
|
||||
|
||||
config GENERIC_FIND_FIRST_BIT
|
||||
bool
|
||||
|
||||
|
|
|
@ -137,6 +137,8 @@ obj-$(CONFIG_DDR) += jedec_ddr_data.o
|
|||
obj-$(CONFIG_GENERIC_STRNCPY_FROM_USER) += strncpy_from_user.o
|
||||
obj-$(CONFIG_GENERIC_STRNLEN_USER) += strnlen_user.o
|
||||
|
||||
obj-$(CONFIG_GENERIC_NET_UTILS) += net_utils.o
|
||||
|
||||
obj-$(CONFIG_STMP_DEVICE) += stmp_device.o
|
||||
|
||||
libfdt_files = fdt.o fdt_ro.o fdt_wip.o fdt_rw.o fdt_sw.o fdt_strerror.o
|
||||
|
|
26
lib/net_utils.c
Normal file
26
lib/net_utils.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
#include <linux/string.h>
|
||||
#include <linux/if_ether.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
int mac_pton(const char *s, u8 *mac)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* XX:XX:XX:XX:XX:XX */
|
||||
if (strlen(s) < 3 * ETH_ALEN - 1)
|
||||
return 0;
|
||||
|
||||
/* Don't dirty result unless string is valid MAC. */
|
||||
for (i = 0; i < ETH_ALEN; i++) {
|
||||
if (!isxdigit(s[i * 3]) || !isxdigit(s[i * 3 + 1]))
|
||||
return 0;
|
||||
if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':')
|
||||
return 0;
|
||||
}
|
||||
for (i = 0; i < ETH_ALEN; i++) {
|
||||
mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(mac_pton);
|
|
@ -5,6 +5,7 @@
|
|||
menuconfig NET
|
||||
bool "Networking support"
|
||||
select NLATTR
|
||||
select GENERIC_NET_UTILS
|
||||
---help---
|
||||
Unless you really know what you are doing, you should say Y here.
|
||||
The reason is that some programs need kernel networking support even
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/string.h>
|
||||
|
|
|
@ -338,25 +338,3 @@ void inet_proto_csum_replace16(__sum16 *sum, struct sk_buff *skb,
|
|||
csum_unfold(*sum)));
|
||||
}
|
||||
EXPORT_SYMBOL(inet_proto_csum_replace16);
|
||||
|
||||
int mac_pton(const char *s, u8 *mac)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* XX:XX:XX:XX:XX:XX */
|
||||
if (strlen(s) < 3 * ETH_ALEN - 1)
|
||||
return 0;
|
||||
|
||||
/* Don't dirty result unless string is valid MAC. */
|
||||
for (i = 0; i < ETH_ALEN; i++) {
|
||||
if (!isxdigit(s[i * 3]) || !isxdigit(s[i * 3 + 1]))
|
||||
return 0;
|
||||
if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':')
|
||||
return 0;
|
||||
}
|
||||
for (i = 0; i < ETH_ALEN; i++) {
|
||||
mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(mac_pton);
|
||||
|
|
Loading…
Reference in a new issue