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:
parent
4f3c773825
commit
32ae9939d9
@ -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),
|
||||
|
@ -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
62
lib/net/rte_macsec.h
Normal 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 */
|
Loading…
Reference in New Issue
Block a user