Message ID | 20170410153356.2664-5-oliver@schinagl.nl |
---|---|
State | Superseded |
Delegated to: | Joe Hershberger |
Headers | show |
A first comment I have myself, which will go in a v3 (or as a separate patch after this has been merged): On 10-04-17 17:33, Olliver Schinagl wrote: > Universally administered and locally administered addresses are > distinguished by setting the second-least-significant bit of the first > octet of the address. Having a function to check and set this U/L bit > from a function makes it nice for boards that want to generate their own > mac address to ensure they are locally administered. > > Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> > --- > include/net.h | 24 +++++++++++++++++++++++- > 1 file changed, 23 insertions(+), 1 deletion(-) > > diff --git a/include/net.h b/include/net.h > index b4af8eaae4..b1d6f05a76 100644 > --- a/include/net.h > +++ b/include/net.h > @@ -779,6 +779,28 @@ static inline int is_multicast_ethaddr(const u8 *addr) > return 0x01 & addr[0]; > } 0x01 can be a defien, > > +/** > + * is_local_ethaddr - Determine if the Ethernet address is a locally > + * administered MAC address. > + * @addr: Pointer to a six-byte array containing the Ethernet address > + * > + * Return true if the address is a locally administered address. > + */ > +static inline int is_local_ethaddr(const u8 *addr) > +{ > + return 0x02 & addr[0]; 0x02 can be a define as well > +} > + > +/** > + * set_local_ethaddr - Make the supplied Ethernet address a locally > + * administered one. > + * @addr: Pointer to a six-byte array containing the Ethernet address > + */ > +static inline void set_local_ethaddr(u8 *addr) > +{ > + addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ > +} > + > /* > * is_broadcast_ethaddr - Determine if the Ethernet address is broadcast > * @addr: Pointer to a six-byte array containing the Ethernet address > @@ -823,7 +845,7 @@ static inline void net_random_ethaddr(uchar *addr) > addr[i] = rand_r(&seed); > > addr[0] &= 0xfe; /* clear multicast bit */ > - addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ > + set_local_ethaddr(addr); > } > > /* Convert an IP address to a string */ >
diff --git a/include/net.h b/include/net.h index b4af8eaae4..b1d6f05a76 100644 --- a/include/net.h +++ b/include/net.h @@ -779,6 +779,28 @@ static inline int is_multicast_ethaddr(const u8 *addr) return 0x01 & addr[0]; } +/** + * is_local_ethaddr - Determine if the Ethernet address is a locally + * administered MAC address. + * @addr: Pointer to a six-byte array containing the Ethernet address + * + * Return true if the address is a locally administered address. + */ +static inline int is_local_ethaddr(const u8 *addr) +{ + return 0x02 & addr[0]; +} + +/** + * set_local_ethaddr - Make the supplied Ethernet address a locally + * administered one. + * @addr: Pointer to a six-byte array containing the Ethernet address + */ +static inline void set_local_ethaddr(u8 *addr) +{ + addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ +} + /* * is_broadcast_ethaddr - Determine if the Ethernet address is broadcast * @addr: Pointer to a six-byte array containing the Ethernet address @@ -823,7 +845,7 @@ static inline void net_random_ethaddr(uchar *addr) addr[i] = rand_r(&seed); addr[0] &= 0xfe; /* clear multicast bit */ - addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ + set_local_ethaddr(addr); } /* Convert an IP address to a string */
Universally administered and locally administered addresses are distinguished by setting the second-least-significant bit of the first octet of the address. Having a function to check and set this U/L bit from a function makes it nice for boards that want to generate their own mac address to ensure they are locally administered. Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> --- include/net.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-)