dpdk/drivers/net/ixgbe/ixgbe_ipsec.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2010-2017 Intel Corporation
   3 */
   4
   5#ifndef IXGBE_IPSEC_H_
   6#define IXGBE_IPSEC_H_
   7
   8#include <rte_security.h>
   9
  10#define IPSRXIDX_RX_EN                                    0x00000001
  11#define IPSRXIDX_TABLE_IP                                 0x00000002
  12#define IPSRXIDX_TABLE_SPI                                0x00000004
  13#define IPSRXIDX_TABLE_KEY                                0x00000006
  14#define IPSRXIDX_WRITE                                    0x80000000
  15#define IPSRXIDX_READ                                     0x40000000
  16#define IPSRXMOD_VALID                                    0x00000001
  17#define IPSRXMOD_PROTO                                    0x00000004
  18#define IPSRXMOD_DECRYPT                                  0x00000008
  19#define IPSRXMOD_IPV6                                     0x00000010
  20#define IXGBE_ADVTXD_POPTS_IPSEC                          0x00000400
  21#define IXGBE_ADVTXD_TUCMD_IPSEC_TYPE_ESP                 0x00002000
  22#define IXGBE_ADVTXD_TUCMD_IPSEC_ENCRYPT_EN               0x00004000
  23#define IXGBE_RXDADV_IPSEC_STATUS_SECP                    0x00020000
  24#define IXGBE_RXDADV_IPSEC_ERROR_BIT_MASK                 0x18000000
  25#define IXGBE_RXDADV_IPSEC_ERROR_INVALID_PROTOCOL         0x08000000
  26#define IXGBE_RXDADV_IPSEC_ERROR_INVALID_LENGTH           0x10000000
  27#define IXGBE_RXDADV_IPSEC_ERROR_AUTHENTICATION_FAILED    0x18000000
  28
  29#define IPSEC_MAX_RX_IP_COUNT           128
  30#define IPSEC_MAX_SA_COUNT              1024
  31
  32#define ESP_ICV_SIZE 16
  33#define ESP_TRAILER_SIZE 2
  34
  35enum ixgbe_operation {
  36        IXGBE_OP_AUTHENTICATED_ENCRYPTION,
  37        IXGBE_OP_AUTHENTICATED_DECRYPTION
  38};
  39
  40enum ixgbe_gcm_key {
  41        IXGBE_GCM_KEY_128,
  42        IXGBE_GCM_KEY_256
  43};
  44
  45/**
  46 * Generic IP address structure
  47 * TODO: Find better location for this rte_net.h possibly.
  48 **/
  49struct ipaddr {
  50        enum ipaddr_type {
  51                IPv4,
  52                IPv6
  53        } type;
  54        /**< IP Address Type - IPv4/IPv6 */
  55
  56        union {
  57                uint32_t ipv4;
  58                uint32_t ipv6[4];
  59        };
  60};
  61
  62/** inline crypto crypto private session structure */
  63struct ixgbe_crypto_session {
  64        enum ixgbe_operation op;
  65        const uint8_t *key;
  66        uint32_t key_len;
  67        uint32_t salt;
  68        uint32_t sa_index;
  69        uint32_t spi;
  70        struct ipaddr src_ip;
  71        struct ipaddr dst_ip;
  72        struct rte_eth_dev *dev;
  73} __rte_cache_aligned;
  74
  75struct ixgbe_crypto_rx_ip_table {
  76        struct ipaddr ip;
  77        uint16_t ref_count;
  78};
  79struct ixgbe_crypto_rx_sa_table {
  80        uint32_t spi;
  81        uint32_t ip_index;
  82        uint8_t  mode;
  83        uint8_t  used;
  84};
  85
  86struct ixgbe_crypto_tx_sa_table {
  87        uint32_t spi;
  88        uint8_t  used;
  89};
  90
  91union ixgbe_crypto_tx_desc_md {
  92        uint64_t data;
  93        struct {
  94                /**< SA table index */
  95                uint32_t sa_idx;
  96                /**< ICV and ESP trailer length */
  97                uint8_t pad_len;
  98                /**< enable encryption */
  99                uint8_t enc;
 100        };
 101};
 102
 103struct ixgbe_ipsec {
 104        struct ixgbe_crypto_rx_ip_table rx_ip_tbl[IPSEC_MAX_RX_IP_COUNT];
 105        struct ixgbe_crypto_rx_sa_table rx_sa_tbl[IPSEC_MAX_SA_COUNT];
 106        struct ixgbe_crypto_tx_sa_table tx_sa_tbl[IPSEC_MAX_SA_COUNT];
 107};
 108
 109
 110int ixgbe_ipsec_ctx_create(struct rte_eth_dev *dev);
 111int ixgbe_crypto_enable_ipsec(struct rte_eth_dev *dev);
 112int ixgbe_crypto_add_ingress_sa_from_flow(const void *sess,
 113                                          const void *ip_spec,
 114                                          uint8_t is_ipv6);
 115
 116
 117
 118#endif /*IXGBE_IPSEC_H_*/
 119