提交 4cd5773a 编写于 作者: A Andy Shevchenko 提交者: Greg Kroah-Hartman

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: NAndy Shevchenko <andy.shevchenko@gmail.com>
Reported-by: NArnd Bergmann <arnd@arndb.de>
Acked-by: NDavid S. Miller <davem@davemloft.net>
Acked-by: NArnd Bergmann <arnd@arndb.de>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 143e9c76
...@@ -480,6 +480,7 @@ config BMP085_SPI ...@@ -480,6 +480,7 @@ config BMP085_SPI
config PCH_PHUB config PCH_PHUB
tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) PHUB" tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) PHUB"
select GENERIC_NET_UTILS
depends on PCI depends on PCI
help help
This driver is for PCH(Platform controller Hub) PHUB(Packet Hub) of This driver is for PCH(Platform controller Hub) PHUB(Packet Hub) of
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/netpoll.h> #include <linux/netpoll.h>
#include <linux/inet.h> #include <linux/inet.h>
......
...@@ -30,7 +30,6 @@ static inline struct ethhdr *eth_hdr(const struct sk_buff *skb) ...@@ -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 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); extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len);
#endif /* _LINUX_IF_ETHER_H */ #endif /* _LINUX_IF_ETHER_H */
...@@ -450,6 +450,8 @@ static inline char * __deprecated pack_hex_byte(char *buf, u8 byte) ...@@ -450,6 +450,8 @@ static inline char * __deprecated pack_hex_byte(char *buf, u8 byte)
extern int hex_to_bin(char ch); extern int hex_to_bin(char ch);
extern int __must_check hex2bin(u8 *dst, const char *src, size_t count); 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(), * General tracing related utility functions - trace_printk(),
* tracing_on/tracing_off and tracing_start()/tracing_stop * tracing_on/tracing_off and tracing_start()/tracing_stop
......
...@@ -22,6 +22,9 @@ config GENERIC_STRNCPY_FROM_USER ...@@ -22,6 +22,9 @@ config GENERIC_STRNCPY_FROM_USER
config GENERIC_STRNLEN_USER config GENERIC_STRNLEN_USER
bool bool
config GENERIC_NET_UTILS
bool
config GENERIC_FIND_FIRST_BIT config GENERIC_FIND_FIRST_BIT
bool bool
......
...@@ -137,6 +137,8 @@ obj-$(CONFIG_DDR) += jedec_ddr_data.o ...@@ -137,6 +137,8 @@ obj-$(CONFIG_DDR) += jedec_ddr_data.o
obj-$(CONFIG_GENERIC_STRNCPY_FROM_USER) += strncpy_from_user.o obj-$(CONFIG_GENERIC_STRNCPY_FROM_USER) += strncpy_from_user.o
obj-$(CONFIG_GENERIC_STRNLEN_USER) += strnlen_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 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 libfdt_files = fdt.o fdt_ro.o fdt_wip.o fdt_rw.o fdt_sw.o fdt_strerror.o
......
#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 @@ ...@@ -5,6 +5,7 @@
menuconfig NET menuconfig NET
bool "Networking support" bool "Networking support"
select NLATTR select NLATTR
select GENERIC_NET_UTILS
---help--- ---help---
Unless you really know what you are doing, you should say Y here. Unless you really know what you are doing, you should say Y here.
The reason is that some programs need kernel networking support even The reason is that some programs need kernel networking support even
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/string.h> #include <linux/string.h>
......
...@@ -338,25 +338,3 @@ void inet_proto_csum_replace16(__sum16 *sum, struct sk_buff *skb, ...@@ -338,25 +338,3 @@ void inet_proto_csum_replace16(__sum16 *sum, struct sk_buff *skb,
csum_unfold(*sum))); csum_unfold(*sum)));
} }
EXPORT_SYMBOL(inet_proto_csum_replace16); 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);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册