1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(C) 2022 Marvell. 3 */ 4 5 #ifndef RTE_MACSEC_H 6 #define RTE_MACSEC_H 7 8 /** 9 * @file 10 * 11 * MACsec-related defines 12 */ 13 14 #include <rte_byteorder.h> 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 #define RTE_MACSEC_TCI_VER_MASK 0x80 /**< Version mask for MACsec. Should be 0. */ 21 #define RTE_MACSEC_TCI_ES 0x40 /**< Mask for End station (ES) bit - SCI is not valid. */ 22 #define RTE_MACSEC_TCI_SC 0x20 /**< Mask for SCI present bit. */ 23 #define RTE_MACSEC_TCI_SCB 0x10 /**< Mask for EPON single copy broadcast bit. */ 24 #define RTE_MACSEC_TCI_E 0x08 /**< Mask for encrypted user data bit. */ 25 #define RTE_MACSEC_TCI_C 0x04 /**< Mask for changed user data bit (because of encryption). */ 26 #define RTE_MACSEC_AN_MASK 0x03 /**< Association number mask in tci_an. */ 27 28 /** 29 * MACsec Header (SecTAG) 30 */ 31 __extension__ 32 struct rte_macsec_hdr { 33 /** 34 * Tag control information and Association number of secure channel. 35 * Various bits of TCI and AN are masked using RTE_MACSEC_TCI_* and RTE_MACSEC_AN_MASK. 36 */ 37 uint8_t tci_an; 38 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 39 uint8_t short_length:6; /**< Short Length. */ 40 uint8_t unused:2; 41 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN 42 uint8_t unused:2; 43 uint8_t short_length:6; /**< Short Length. */ 44 #endif 45 rte_be32_t packet_number; /**< Packet number to support replay protection. */ 46 } __rte_packed; 47 48 /** SCI length in MACsec header if present. */ 49 #define RTE_MACSEC_SCI_LEN 8 50 51 /** 52 * MACsec SCI header (8 bytes) after the MACsec header 53 * which is present if SC bit is set in tci_an. 54 */ 55 struct rte_macsec_sci_hdr { 56 uint8_t sci[RTE_MACSEC_SCI_LEN]; /**< Optional secure channel ID. */ 57 } __rte_packed; 58 59 #ifdef __cplusplus 60 } 61 #endif 62 63 #endif /* RTE_MACSEC_H */ 64