diff mbox

[U-Boot,PATCHv2,04/21] net: core: Add function to check/set MAC locality

Message ID 20170410153356.2664-5-oliver@schinagl.nl
State Superseded
Delegated to: Joe Hershberger
Headers show

Commit Message

Olliver Schinagl April 10, 2017, 3:33 p.m. UTC
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(-)

Comments

Olliver Schinagl April 11, 2017, 1:49 p.m. UTC | #1
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 mbox

Patch

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 */