net/macsec: Move some code for sharing with various drivers that implements offload
authorLior Nahmanson <liorna@nvidia.com>
Tue, 6 Sep 2022 05:21:15 +0000 (22:21 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Sep 2022 13:02:08 +0000 (14:02 +0100)
Move some MACsec infrastructure like defines and functions,
in order to avoid code duplication for future drivers which
implements MACsec offload.

Signed-off-by: Lior Nahmanson <liorna@nvidia.com>
Reviewed-by: Raed Salem <raeds@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Ben Ben-Ishay <benishay@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macsec.c
include/net/macsec.h

index e781b3e..830fed3 100644 (file)
@@ -25,8 +25,6 @@
 
 #include <uapi/linux/if_macsec.h>
 
-#define MACSEC_SCI_LEN 8
-
 /* SecTAG length = macsec_eth_header without the optional SCI */
 #define MACSEC_TAG_LEN 6
 
@@ -47,20 +45,10 @@ struct macsec_eth_header {
        u8 secure_channel_id[8]; /* optional */
 } __packed;
 
-#define MACSEC_TCI_VERSION 0x80
-#define MACSEC_TCI_ES      0x40 /* end station */
-#define MACSEC_TCI_SC      0x20 /* SCI present */
-#define MACSEC_TCI_SCB     0x10 /* epon */
-#define MACSEC_TCI_E       0x08 /* encryption */
-#define MACSEC_TCI_C       0x04 /* changed text */
-#define MACSEC_AN_MASK     0x03 /* association number */
-#define MACSEC_TCI_CONFID  (MACSEC_TCI_E | MACSEC_TCI_C)
-
 /* minimum secure data length deemed "not short", see IEEE 802.1AE-2006 9.7 */
 #define MIN_NON_SHORT_LEN 48
 
 #define GCM_AES_IV_LEN 12
-#define DEFAULT_ICV_LEN 16
 
 #define for_each_rxsc(secy, sc)                                \
        for (sc = rcu_dereference_bh(secy->rx_sc);      \
@@ -244,7 +232,6 @@ static struct macsec_cb *macsec_skb_cb(struct sk_buff *skb)
        return (struct macsec_cb *)skb->cb;
 }
 
-#define MACSEC_PORT_ES (htons(0x0001))
 #define MACSEC_PORT_SCB (0x0000)
 #define MACSEC_UNDEF_SCI ((__force sci_t)0xffffffffffffffffULL)
 #define MACSEC_UNDEF_SSCI ((__force ssci_t)0xffffffff)
@@ -259,14 +246,6 @@ static struct macsec_cb *macsec_skb_cb(struct sk_buff *skb)
 #define DEFAULT_ENCODING_SA 0
 #define MACSEC_XPN_MAX_REPLAY_WINDOW (((1 << 30) - 1))
 
-static bool send_sci(const struct macsec_secy *secy)
-{
-       const struct macsec_tx_sc *tx_sc = &secy->tx_sc;
-
-       return tx_sc->send_sci ||
-               (secy->n_rx_sc > 1 && !tx_sc->end_station && !tx_sc->scb);
-}
-
 static sci_t make_sci(const u8 *addr, __be16 port)
 {
        sci_t sci;
@@ -331,7 +310,7 @@ static void macsec_fill_sectag(struct macsec_eth_header *h,
        /* with GCM, C/E clear for !encrypt, both set for encrypt */
        if (tx_sc->encrypt)
                h->tci_an |= MACSEC_TCI_CONFID;
-       else if (secy->icv_len != DEFAULT_ICV_LEN)
+       else if (secy->icv_len != MACSEC_DEFAULT_ICV_LEN)
                h->tci_an |= MACSEC_TCI_C;
 
        h->tci_an |= tx_sc->encoding_sa;
@@ -655,7 +634,7 @@ static struct sk_buff *macsec_encrypt(struct sk_buff *skb,
 
        unprotected_len = skb->len;
        eth = eth_hdr(skb);
-       sci_present = send_sci(secy);
+       sci_present = macsec_send_sci(secy);
        hh = skb_push(skb, macsec_extra_len(sci_present));
        memmove(hh, eth, 2 * ETH_ALEN);
 
@@ -1303,7 +1282,7 @@ nosci:
        /* 10.6.1 if the SC is not found */
        cbit = !!(hdr->tci_an & MACSEC_TCI_C);
        if (!cbit)
-               macsec_finalize_skb(skb, DEFAULT_ICV_LEN,
+               macsec_finalize_skb(skb, MACSEC_DEFAULT_ICV_LEN,
                                    macsec_extra_len(macsec_skb_cb(skb)->has_sci));
 
        list_for_each_entry_rcu(macsec, &rxd->secys, secys) {
@@ -4067,7 +4046,7 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
 {
        struct macsec_dev *macsec = macsec_priv(dev);
        rx_handler_func_t *rx_handler;
-       u8 icv_len = DEFAULT_ICV_LEN;
+       u8 icv_len = MACSEC_DEFAULT_ICV_LEN;
        struct net_device *real_dev;
        int err, mtu;
        sci_t sci;
@@ -4191,7 +4170,7 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[],
                                struct netlink_ext_ack *extack)
 {
        u64 csid = MACSEC_DEFAULT_CIPHER_ID;
-       u8 icv_len = DEFAULT_ICV_LEN;
+       u8 icv_len = MACSEC_DEFAULT_ICV_LEN;
        int flag;
        bool es, scb, sci;
 
@@ -4203,7 +4182,7 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[],
 
        if (data[IFLA_MACSEC_ICV_LEN]) {
                icv_len = nla_get_u8(data[IFLA_MACSEC_ICV_LEN]);
-               if (icv_len != DEFAULT_ICV_LEN) {
+               if (icv_len != MACSEC_DEFAULT_ICV_LEN) {
                        char dummy_key[DEFAULT_SAK_LEN] = { 0 };
                        struct crypto_aead *dummy_tfm;
 
index 8494953..871599b 100644 (file)
 
 #define MACSEC_NUM_AN 4 /* 2 bits for the association number */
 
+#define MACSEC_SCI_LEN 8
+#define MACSEC_PORT_ES (htons(0x0001))
+
+#define MACSEC_TCI_VERSION 0x80
+#define MACSEC_TCI_ES      0x40 /* end station */
+#define MACSEC_TCI_SC      0x20 /* SCI present */
+#define MACSEC_TCI_SCB     0x10 /* epon */
+#define MACSEC_TCI_E       0x08 /* encryption */
+#define MACSEC_TCI_C       0x04 /* changed text */
+#define MACSEC_AN_MASK     0x03 /* association number */
+#define MACSEC_TCI_CONFID  (MACSEC_TCI_E | MACSEC_TCI_C)
+
+#define MACSEC_DEFAULT_ICV_LEN 16
+
 typedef u64 __bitwise sci_t;
 typedef u32 __bitwise ssci_t;
 
@@ -292,5 +306,12 @@ struct macsec_ops {
 };
 
 void macsec_pn_wrapped(struct macsec_secy *secy, struct macsec_tx_sa *tx_sa);
+static inline bool macsec_send_sci(const struct macsec_secy *secy)
+{
+       const struct macsec_tx_sc *tx_sc = &secy->tx_sc;
+
+       return tx_sc->send_sci ||
+               (secy->n_rx_sc > 1 && !tx_sc->end_station && !tx_sc->scb);
+}
 
 #endif /* _NET_MACSEC_H_ */