[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220508090954.10864-3-liorna@nvidia.com>
Date: Sun, 8 May 2022 12:09:53 +0300
From: Lior Nahmanson <liorna@...dia.com>
To: <edumazet@...gle.com>, <kuba@...nel.org>, <pabeni@...hat.com>
CC: <davem@...emloft.net>, <netdev@...r.kernel.org>,
Lior Nahmanson <liorna@...dia.com>,
Raed Salem <raeds@...dia.com>, Jiri Pirko <jiri@...dia.com>,
Ben Ben-Ishay <benishay@...dia.com>
Subject: [PATCH net-next v1 02/03] net/macsec: Add MACsec skb extension Rx Data path support
Like in the Tx changes, packet that don't have SecTAG
header aren't necessary been offloaded by the HW.
Therefore, the MACsec driver needs to distinguish if the packet
was offloaded or not and handle accordingly.
Moreover, if there are more than one MACsec device with the same MAC
address as in the packet's destination MAC, the packet will forward only
to this device and only to the desired one.
Used SKB extension and marking it by the HW if the packet was offloaded
and to which MACsec offload device it belongs according to the packet's
SCI.
Signed-off-by: Lior Nahmanson <liorna@...dia.com>
Reviewed-by: Raed Salem <raeds@...dia.com>
Reviewed-by: Jiri Pirko <jiri@...dia.com>
Reviewed-by: Ben Ben-Ishay <benishay@...dia.com>
---
drivers/net/macsec.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index 0960339e2442..ee83d6a6e818 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -997,11 +997,13 @@ static enum rx_handler_result handle_not_macsec(struct sk_buff *skb)
/* Deliver to the uncontrolled port by default */
enum rx_handler_result ret = RX_HANDLER_PASS;
struct ethhdr *hdr = eth_hdr(skb);
+ struct macsec_ext *macsec_ext;
struct macsec_rxh_data *rxd;
struct macsec_dev *macsec;
rcu_read_lock();
rxd = macsec_data_rcu(skb->dev);
+ macsec_ext = skb_ext_find(skb, SKB_EXT_MACSEC);
list_for_each_entry_rcu(macsec, &rxd->secys, secys) {
struct sk_buff *nskb;
@@ -1011,7 +1013,11 @@ static enum rx_handler_result handle_not_macsec(struct sk_buff *skb)
/* If h/w offloading is enabled, HW decodes frames and strips
* the SecTAG, so we have to deduce which port to deliver to.
*/
- if (macsec_is_offloaded(macsec) && netif_running(ndev)) {
+ if (macsec_is_offloaded(macsec) && netif_running(ndev) &&
+ (!macsec_ext || macsec_ext->offloaded)) {
+ if ((macsec_ext) && (!find_rx_sc(&macsec->secy, macsec_ext->sci)))
+ continue;
+
if (ether_addr_equal_64bits(hdr->h_dest,
ndev->dev_addr)) {
/* exact match, divert skb to this port */
--
2.25.4
Powered by blists - more mailing lists