mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 22:21:21 +00:00
net: add mac_pton() for parsing MAC address
mac_pton() parses MAC address in form XX:XX:XX:XX:XX:XX and only in that form. mac_pton() doesn't dirty result until it's sure string representation is valid. mac_pton() doesn't care about characters _after_ last octet, it's up to caller to deal with it. mac_pton() diverges from 0/-E return value convention. Target usage: if (!mac_pton(str, whatever->mac)) return -EINVAL; /* ->mac being u8 [ETH_ALEN] is filled at this point. */ /* optionally check str[3 * ETH_ALEN - 1] for termination */ Use mac_pton() in pktgen and netconsole for start. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
99f823f98f
commit
4940fc889e
5 changed files with 38 additions and 86 deletions
|
@ -296,3 +296,27 @@ void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
|
|||
csum_unfold(*sum)));
|
||||
}
|
||||
EXPORT_SYMBOL(inet_proto_csum_replace4);
|
||||
|
||||
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 (!strchr("0123456789abcdefABCDEF", s[i * 3]))
|
||||
return 0;
|
||||
if (!strchr("0123456789abcdefABCDEF", 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…
Add table
Add a link
Reference in a new issue