]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - include/net/macsec.h
macsec: Netlink support of XPN cipher suites (IEEE 802.1AEbw)
[mirror_ubuntu-jammy-kernel.git] / include / net / macsec.h
index 92e43db8b5667362977102fa399e450813153922..2e4780dbf5c6a78ec2f58a20def551522d198132 100644 (file)
 #include <uapi/linux/if_link.h>
 #include <uapi/linux/if_macsec.h>
 
-typedef u64 __bitwise sci_t;
+#define MACSEC_DEFAULT_PN_LEN 4
+#define MACSEC_XPN_PN_LEN 8
 
+#define MACSEC_SALT_LEN 12
 #define MACSEC_NUM_AN 4 /* 2 bits for the association number */
 
+typedef u64 __bitwise sci_t;
+typedef u32 __bitwise ssci_t;
+
+typedef union salt {
+       struct {
+               u32 ssci;
+               u64 pn;
+       } __packed;
+       u8 bytes[MACSEC_SALT_LEN];
+} __packed salt_t;
+
+typedef union pn {
+       struct {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+               u32 lower;
+               u32 upper;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+               u32 upper;
+               u32 lower;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       };
+       u64 full64;
+} pn_t;
+
 /**
  * struct macsec_key - SA key
  * @id: user-provided key identifier
  * @tfm: crypto struct, key storage
+ * @salt: salt used to generate IV in XPN cipher suites
  */
 struct macsec_key {
        u8 id[MACSEC_KEYID_LEN];
        struct crypto_aead *tfm;
+       salt_t salt;
 };
 
 struct macsec_rx_sc_stats {
@@ -64,12 +94,17 @@ struct macsec_tx_sc_stats {
  * @next_pn: packet number expected for the next packet
  * @lock: protects next_pn manipulations
  * @key: key structure
+ * @ssci: short secure channel identifier
  * @stats: per-SA stats
  */
 struct macsec_rx_sa {
        struct macsec_key key;
+       ssci_t ssci;
        spinlock_t lock;
-       u32 next_pn;
+       union {
+               pn_t next_pn_halves;
+               u64 next_pn;
+       };
        refcount_t refcnt;
        bool active;
        struct macsec_rx_sa_stats __percpu *stats;
@@ -110,12 +145,17 @@ struct macsec_rx_sc {
  * @next_pn: packet number to use for the next packet
  * @lock: protects next_pn manipulations
  * @key: key structure
+ * @ssci: short secure channel identifier
  * @stats: per-SA stats
  */
 struct macsec_tx_sa {
        struct macsec_key key;
+       ssci_t ssci;
        spinlock_t lock;
-       u32 next_pn;
+       union {
+               pn_t next_pn_halves;
+               u64 next_pn;
+       };
        refcount_t refcnt;
        bool active;
        struct macsec_tx_sa_stats __percpu *stats;
@@ -152,6 +192,7 @@ struct macsec_tx_sc {
  * @key_len: length of keys used by the cipher suite
  * @icv_len: length of ICV used by the cipher suite
  * @validate_frames: validation mode
+ * @xpn: enable XPN for this SecY
  * @operational: MAC_Operational flag
  * @protect_frames: enable protection for this SecY
  * @replay_protect: enable packet number checks on receive
@@ -166,6 +207,7 @@ struct macsec_secy {
        u16 key_len;
        u16 icv_len;
        enum macsec_validation_type validate_frames;
+       bool xpn;
        bool operational;
        bool protect_frames;
        bool replay_protect;