From: Pavel Belous <pavel.bel...@aquantia.com> This patch extends rte_security framework to support MACSEC operations.
Signed-off-by: Igor Russkikh <igor.russk...@aquantia.com> Signed-off-by: Pavel Belous <pavel.bel...@aquantia.com> --- lib/librte_security/rte_security.h | 143 +++++++++++++++++++++++++++++++++++-- 1 file changed, 138 insertions(+), 5 deletions(-) diff --git a/lib/librte_security/rte_security.h b/lib/librte_security/rte_security.h index aaafdfc..201319f 100644 --- a/lib/librte_security/rte_security.h +++ b/lib/librte_security/rte_security.h @@ -29,6 +29,7 @@ extern "C" { #include <rte_mbuf.h> #include <rte_memory.h> #include <rte_mempool.h> +#include <rte_ether.h> /** IPSec protocol mode */ enum rte_security_ipsec_sa_mode { @@ -215,11 +216,109 @@ struct rte_security_ipsec_xform { }; /** + * MACSEC global configuration parameters + * + */ +struct rte_security_macsec_param { + uint8_t enabled; + uint32_t ingress_pn_threshold; + uint32_t egress_pn_threshold; + uint8_t interrupts_enabled; + /**< List of bypassed ethertypes */ + uint32_t ctl_ether_types[8]; +}; + +/** + * MACSEC SC (Secure Connection) parameters + * + */ +struct rte_security_macsec_txsc_param { + struct rte_ether_addr s_mac; + /**< local side mac address */ + struct rte_ether_addr d_mac; + /**< remote side mac address */ + uint64_t sci; + uint32_t tci; + uint32_t sa_num; + uint8_t encrypt; + uint8_t protect; + uint8_t key_len; + uint8_t auto_rollover_enabled; + + uint32_t index; + uint32_t curr_an; +}; + +struct rte_security_macsec_rxsc_param { + struct rte_ether_addr s_mac; + struct rte_ether_addr d_mac; + uint64_t sci; + uint32_t tci; + uint32_t sa_num; + /**< remote side mac address */ + uint8_t replay_protection; + /**< replay protection */ + uint32_t anti_replay_window; + /**< anti replay window */ + uint16_t port_ident; + /**< remote side port identifier */ + uint8_t auto_rollover_enabled; + uint8_t validate_frames; + + uint32_t index; +}; + +struct rte_security_macsec_sa_param { + uint8_t sa_idx; + uint8_t an; + uint32_t packet_number; + uint8_t key_len; + uint8_t key[32]; +}; + +struct rte_security_macsec_capabilities { + /** Extended Packet Numbers (XPN) + * + * * 1: Extended (64 bit) packet numbers supported + * * 0: Extended (64 bit) packet numbers not supported + */ + uint32_t xpn : 1; +}; + +/** + * Available operations over MACSEC instance + */ +enum rte_security_macsec_op { + RTE_SECURITY_MACSEC_OP_CONFIG = 0, + + RTE_SECURITY_MACSEC_OP_ADD_TXSC, + RTE_SECURITY_MACSEC_OP_DEL_TXSC, + RTE_SECURITY_MACSEC_OP_UPD_TXSC, + + RTE_SECURITY_MACSEC_OP_ADD_RXSC, + RTE_SECURITY_MACSEC_OP_DEL_RXSC, + RTE_SECURITY_MACSEC_OP_UPD_RXSC, + + RTE_SECURITY_MACSEC_OP_ADD_TXSA, + RTE_SECURITY_MACSEC_OP_DEL_TXSA, + RTE_SECURITY_MACSEC_OP_UPD_TXSA, + + RTE_SECURITY_MACSEC_OP_ADD_RXSA, + RTE_SECURITY_MACSEC_OP_DEL_RXSA, + RTE_SECURITY_MACSEC_OP_UPD_RXSA, +}; + +/** * MACsec security session configuration */ struct rte_security_macsec_xform { - /** To be Filled */ - int dummy; + enum rte_security_macsec_op op; + union { + struct rte_security_macsec_param config_options; + struct rte_security_macsec_txsc_param txsc_options; + struct rte_security_macsec_rxsc_param rxsc_options; + struct rte_security_macsec_sa_param sa_options; + }; }; /** @@ -495,7 +594,42 @@ rte_security_attach_session(struct rte_crypto_op *op, } struct rte_security_macsec_stats { - uint64_t reserved; + /* Ingress Counters */ + uint64_t in_ctl_pkts; + uint64_t in_tagged_miss_pkts; + uint64_t in_untagged_miss_pkts; + uint64_t in_notag_pkts; + uint64_t in_untagged_pkts; + uint64_t in_bad_tag_pkts; + uint64_t in_no_sci_pkts; + uint64_t in_unknown_sci_pkts; + + /* Egress Counters */ + uint64_t out_ctl_pkts; + uint64_t out_unknown_sa_pkts; + uint64_t out_untagged_pkts; + uint64_t out_too_long; + + /* Ingress SA Counters */ + uint64_t in_untagged_hit_pkts; + uint64_t in_not_using_sa; + uint64_t in_unused_sa; + uint64_t in_not_valid_pkts; + uint64_t in_invalid_pkts; + uint64_t in_ok_pkts; + uint64_t in_unchecked_pkts; + uint64_t in_validated_octets; + uint64_t in_decrypted_octets; + /* Egress SC Counters */ + uint64_t out_sc_protected_pkts; + uint64_t out_sc_encrypted_pkts; + uint64_t out_sc_protected_octets; + uint64_t out_sc_encrypted_octets; + /* Egress SA Counters */ + uint64_t out_sa_hit_drop_redirect; + uint64_t out_sa_protected2_pkts; + uint64_t out_sa_protected_pkts; + uint64_t out_sa_encrypted_pkts; }; struct rte_security_ipsec_stats { @@ -566,8 +700,7 @@ struct rte_security_capability { } ipsec; /**< IPsec capability */ struct { - /* To be Filled */ - int dummy; + struct rte_security_macsec_capabilities caps; } macsec; /**< MACsec capability */ struct { -- 2.7.4