All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, olteanv@gmail.com, andrew@lunn.ch,
	idosch@idosch.org, f.fainelli@gmail.com, snelson@pensando.io,
	Jakub Kicinski <kuba@kernel.org>
Subject: [PATCH net-next 1/6] ethernet: add a helper for assigning port addresses
Date: Mon, 18 Oct 2021 14:10:02 -0700	[thread overview]
Message-ID: <20211018211007.1185777-2-kuba@kernel.org> (raw)
In-Reply-To: <20211018211007.1185777-1-kuba@kernel.org>

We have 5 drivers which offset base MAC addr by port id.
Create a helper for them.

This helper takes care of overflows, which some drivers
did not do, please complain if that's going to break
anything!

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--
 - eth_hw_addr_set_port() -> eth_hw_addr_gen()
 - id u8 -> unsigned int
---
 include/linux/etherdevice.h | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 23681c3d3b8a..2ad71cc90b37 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -551,6 +551,27 @@ static inline unsigned long compare_ether_header(const void *a, const void *b)
 #endif
 }
 
+/**
+ * eth_hw_addr_gen - Generate and assign Ethernet address to a port
+ * @dev: pointer to port's net_device structure
+ * @base_addr: base Ethernet address
+ * @id: offset to add to the base address
+ *
+ * Generate a MAC address using a base address and an offset and assign it
+ * to a net_device. Commonly used by switch drivers which need to compute
+ * addresses for all their ports. addr_assign_type is not changed.
+ */
+static inline void eth_hw_addr_gen(struct net_device *dev, const u8 *base_addr,
+				   unsigned int id)
+{
+	u64 u = ether_addr_to_u64(base_addr);
+	u8 addr[ETH_ALEN];
+
+	u += id;
+	u64_to_ether_addr(u, addr);
+	eth_hw_addr_set(dev, addr);
+}
+
 /**
  * eth_skb_pad - Pad buffer to mininum number of octets for Ethernet frame
  * @skb: Buffer to pad
-- 
2.31.1


  reply	other threads:[~2021-10-18 21:10 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-18 21:10 [PATCH net-next 0/6] ethernet: add eth_hw_addr_gen() for switches Jakub Kicinski
2021-10-18 21:10 ` Jakub Kicinski [this message]
2021-10-18 21:37   ` [PATCH net-next 1/6] ethernet: add a helper for assigning port addresses Vladimir Oltean
2021-10-18 21:54   ` Shannon Nelson
2021-10-19  6:11   ` Ido Schimmel
2021-10-18 21:10 ` [PATCH net-next 2/6] ethernet: ocelot: use eth_hw_addr_gen() Jakub Kicinski
2021-10-18 21:33   ` Vladimir Oltean
2021-10-18 21:10 ` [PATCH net-next 3/6] ethernet: prestera: " Jakub Kicinski
2021-10-18 21:10 ` [PATCH net-next 4/6] ethernet: fec: " Jakub Kicinski
2021-10-18 23:19   ` Vladimir Oltean
2021-10-18 21:10 ` [PATCH net-next 5/6] ethernet: mlxsw: " Jakub Kicinski
2021-10-19  6:12   ` Ido Schimmel
2021-10-18 21:10 ` [PATCH net-next 6/6] ethernet: sparx5: " Jakub Kicinski
2021-10-19 11:50 ` [PATCH net-next 0/6] ethernet: add eth_hw_addr_gen() for switches patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211018211007.1185777-2-kuba@kernel.org \
    --to=kuba@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=idosch@idosch.org \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=snelson@pensando.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.