[dpdk-dev] [PATCH v1 2/3] net/hyperv: implement core functionality
Stephen Hemminger
stephen at networkplumber.org
Tue Dec 19 16:37:07 CET 2017
On Tue, 19 Dec 2017 11:01:55 +0100
Adrien Mazarguil <adrien.mazarguil at 6wind.com> wrote:
> > Why not use sscanf which would be safer in this case.
>
> Right, this is indeed the obvious implementation, however not only the fixed
> MAC-48 format is not the most convenient to use for user input (somewhat
> like forcing them to enter fully expanded IPv6 addresses every time),
> sscanf() also ignores leading white spaces and successfully parses weird
> expressions like " -42: 0x66: 0af: 0: 44:-6", which I think is a
> problem.
There is a standard for ethernet representation, that is all you need to
accept. The only simplifications are optional leading zeros 02 vs 2
and upper and lower case a-f.
Don't overthink this. The FreeBSD version of ether_aton_r is:
struct ether_addr *
ether_aton_r(const char *a, struct ether_addr *e)
{
int i;
unsigned int o0, o1, o2, o3, o4, o5;
i = sscanf(a, "%x:%x:%x:%x:%x:%x", &o0, &o1, &o2, &o3, &o4, &o5);
if (i != 6)
return (NULL);
e->octet[0]=o0;
e->octet[1]=o1;
e->octet[2]=o2;
e->octet[3]=o3;
e->octet[4]=o4;
e->octet[5]=o5;
return (e);
}
More information about the dev
mailing list