net: add MACsec header

Added MACsec protocol header to be used for supporting
MACsec protocol offload in hardware or directly in the application.

Signed-off-by: Akhil Goyal <gakhil@marvell.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Ori Kam <orika@nvidia.com>
This commit is contained in:
Akhil Goyal 2022-09-28 17:52:51 +05:30 committed by Thomas Monjalon
parent 4f3c773825
commit 32ae9939d9
3 changed files with 64 additions and 0 deletions

View File

@ -103,6 +103,7 @@ The public API headers are grouped by topics:
- **layers**:
[ethernet](@ref rte_ether.h),
[MACsec](@ref rte_macsec.h),
[ARP](@ref rte_arp.h),
[HIGIG](@ref rte_higig.h),
[ICMP](@ref rte_icmp.h),

View File

@ -10,6 +10,7 @@ headers = files(
'rte_icmp.h',
'rte_arp.h',
'rte_ether.h',
'rte_macsec.h',
'rte_vxlan.h',
'rte_gre.h',
'rte_gtp.h',

62
lib/net/rte_macsec.h Normal file
View File

@ -0,0 +1,62 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(C) 2022 Marvell.
*/
#ifndef RTE_MACSEC_H
#define RTE_MACSEC_H
/**
* @file
*
* MACsec-related defines
*/
#include <rte_byteorder.h>
#ifdef __cplusplus
extern "C" {
#endif
#define RTE_MACSEC_TCI_VER_MASK 0x80 /**< Version mask for MACsec. Should be 0. */
#define RTE_MACSEC_TCI_ES 0x40 /**< Mask for End station (ES) bit - SCI is not valid. */
#define RTE_MACSEC_TCI_SC 0x20 /**< Mask for SCI present bit. */
#define RTE_MACSEC_TCI_SCB 0x10 /**< Mask for EPON single copy broadcast bit. */
#define RTE_MACSEC_TCI_E 0x08 /**< Mask for encrypted user data bit. */
#define RTE_MACSEC_TCI_C 0x04 /**< Mask for changed user data bit (because of encryption). */
#define RTE_MACSEC_AN_MASK 0x03 /**< Association number mask in tci_an. */
/**
* MACsec Header (SecTAG)
*/
struct rte_macsec_hdr {
/**
* Tag control information and Association number of secure channel.
* Various bits of TCI and AN are masked using RTE_MACSEC_TCI_* and RTE_MACSEC_AN_MASK.
*/
uint8_t tci_an;
#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
uint8_t short_length:6; /**< Short Length. */
uint8_t unused:2;
#elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
uint8_t unused:2;
uint8_t short_length:6; /**< Short Length. */
#endif
rte_be32_t packet_number; /**< Packet number to support replay protection. */
} __rte_packed;
/** SCI length in MACsec header if present. */
#define RTE_MACSEC_SCI_LEN 8
/**
* MACsec SCI header (8 bytes) after the MACsec header
* which is present if SC bit is set in tci_an.
*/
struct rte_macsec_sci_hdr {
uint8_t sci[RTE_MACSEC_SCI_LEN]; /**< Optional secure channel ID. */
} __rte_packed;
#ifdef __cplusplus
}
#endif
#endif /* RTE_MACSEC_H */