/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2019
+ * Copyright(c) 2001-2021 Intel Corporation
*/
#ifndef _ICE_PROTOCOL_TYPE_H_
ICE_NVGRE,
ICE_GTP,
ICE_PPPOE,
+ ICE_PFCP,
+ ICE_L2TPV3,
+ ICE_ESP,
+ ICE_AH,
+ ICE_NAT_T,
+ ICE_GTP_NO_PAY,
+ ICE_VLAN_EX,
+ ICE_VLAN_IN,
ICE_PROTOCOL_LAST
};
ICE_NON_TUN = 0,
ICE_SW_TUN_AND_NON_TUN,
ICE_SW_TUN_VXLAN_GPE,
- ICE_SW_TUN_GENEVE,
- ICE_SW_TUN_VXLAN,
+ ICE_SW_TUN_GENEVE, /* GENEVE matches only non-VLAN pkts */
+ ICE_SW_TUN_GENEVE_VLAN, /* GENEVE matches both VLAN and non-VLAN pkts */
+ ICE_SW_TUN_VXLAN, /* VXLAN matches only non-VLAN pkts */
+ ICE_SW_TUN_VXLAN_VLAN, /* VXLAN matches both VLAN and non-VLAN pkts */
ICE_SW_TUN_NVGRE,
ICE_SW_TUN_UDP, /* This means all "UDP" tunnel types: VXLAN-GPE, VXLAN
* and GENEVE
*/
+ ICE_SW_IPV4_TCP,
+ ICE_SW_IPV4_UDP,
+ ICE_SW_IPV6_TCP,
+ ICE_SW_IPV6_UDP,
ICE_SW_TUN_GTP,
+ ICE_SW_TUN_IPV4_GTPU_NO_PAY,
+ ICE_SW_TUN_IPV6_GTPU_NO_PAY,
+ ICE_SW_TUN_IPV4_GTPU_EH_IPV4,
+ ICE_SW_TUN_IPV4_GTPU_IPV4_UDP,
+ ICE_SW_TUN_IPV4_GTPU_EH_IPV4_UDP,
+ ICE_SW_TUN_IPV4_GTPU_IPV4_TCP,
+ ICE_SW_TUN_IPV4_GTPU_EH_IPV4_TCP,
+ ICE_SW_TUN_IPV4_GTPU_EH_IPV6,
+ ICE_SW_TUN_IPV4_GTPU_IPV6_UDP,
+ ICE_SW_TUN_IPV4_GTPU_EH_IPV6_UDP,
+ ICE_SW_TUN_IPV4_GTPU_IPV6_TCP,
+ ICE_SW_TUN_IPV4_GTPU_EH_IPV6_TCP,
+ ICE_SW_TUN_IPV6_GTPU_EH_IPV4,
+ ICE_SW_TUN_IPV6_GTPU_IPV4_UDP,
+ ICE_SW_TUN_IPV6_GTPU_EH_IPV4_UDP,
+ ICE_SW_TUN_IPV6_GTPU_IPV4_TCP,
+ ICE_SW_TUN_IPV6_GTPU_EH_IPV4_TCP,
+ ICE_SW_TUN_IPV6_GTPU_EH_IPV6,
+ ICE_SW_TUN_IPV6_GTPU_IPV6_UDP,
+ ICE_SW_TUN_IPV6_GTPU_EH_IPV6_UDP,
+ ICE_SW_TUN_IPV6_GTPU_IPV6_TCP,
+ ICE_SW_TUN_IPV6_GTPU_EH_IPV6_TCP,
ICE_SW_TUN_PPPOE,
+ ICE_SW_TUN_PPPOE_PAY,
+ ICE_SW_TUN_PPPOE_IPV4,
+ ICE_SW_TUN_PPPOE_IPV4_TCP,
+ ICE_SW_TUN_PPPOE_IPV4_UDP,
+ ICE_SW_TUN_PPPOE_IPV6,
+ ICE_SW_TUN_PPPOE_IPV6_TCP,
+ ICE_SW_TUN_PPPOE_IPV6_UDP,
+ ICE_SW_TUN_IPV4_ESP,
+ ICE_SW_TUN_IPV6_ESP,
+ ICE_SW_TUN_IPV4_AH,
+ ICE_SW_TUN_IPV6_AH,
+ ICE_SW_TUN_IPV4_NAT_T,
+ ICE_SW_TUN_IPV6_NAT_T,
+ ICE_SW_TUN_IPV4_L2TPV3,
+ ICE_SW_TUN_IPV6_L2TPV3,
+ ICE_SW_TUN_PROFID_IPV6_ESP,
+ ICE_SW_TUN_PROFID_IPV6_AH,
+ ICE_SW_TUN_PROFID_MAC_IPV6_L2TPV3,
+ ICE_SW_TUN_PROFID_IPV6_NAT_T,
+ ICE_SW_TUN_PROFID_IPV4_PFCP_NODE,
+ ICE_SW_TUN_PROFID_IPV4_PFCP_SESSION,
+ ICE_SW_TUN_PROFID_IPV6_PFCP_NODE,
+ ICE_SW_TUN_PROFID_IPV6_PFCP_SESSION,
+ ICE_SW_TUN_AND_NON_TUN_QINQ,
+ ICE_NON_TUN_QINQ,
+ ICE_SW_TUN_PPPOE_QINQ,
+ ICE_SW_TUN_PPPOE_PAY_QINQ,
+ ICE_SW_TUN_PPPOE_IPV4_QINQ,
+ ICE_SW_TUN_PPPOE_IPV6_QINQ,
+ ICE_SW_TUN_IPV4_GTPU_IPV4,
+ ICE_SW_TUN_IPV4_GTPU_IPV6,
+ ICE_SW_TUN_IPV6_GTPU_IPV4,
+ ICE_SW_TUN_IPV6_GTPU_IPV6,
+ ICE_SW_TUN_GTP_IPV4,
+ ICE_SW_TUN_GTP_IPV6,
ICE_ALL_TUNNELS /* All tunnel types including NVGRE */
};
ICE_PROT_MPLS_IL = 29,
ICE_PROT_IPV4_OF_OR_S = 32,
ICE_PROT_IPV4_IL = 33,
+ ICE_PROT_IPV4_IL_IL = 34,
ICE_PROT_IPV6_OF_OR_S = 40,
ICE_PROT_IPV6_IL = 41,
+ ICE_PROT_IPV6_IL_IL = 42,
ICE_PROT_IPV6_FRAG = 47,
ICE_PROT_TCP_IL = 49,
ICE_PROT_UDP_OF = 52,
ICE_PROT_VRRP_F = 101,
ICE_PROT_OSPF = 102,
ICE_PROT_PPPOE = 103,
+ ICE_PROT_L2TPV3 = 104,
+ ICE_PROT_ECPRI = 105,
+ ICE_PROT_PPP = 106,
ICE_PROT_ATAOE_OF = 114,
ICE_PROT_CTRL_OF = 116,
ICE_PROT_LLDP_OF = 117,
#define ICE_MAC_OFOS_HW 1
#define ICE_MAC_IL_HW 4
#define ICE_ETYPE_OL_HW 9
+#define ICE_VLAN_OF_HW 16
#define ICE_VLAN_OL_HW 17
#define ICE_IPV4_OFOS_HW 32
#define ICE_IPV4_IL_HW 33
#define ICE_IPV6_IL_HW 41
#define ICE_TCP_IL_HW 49
#define ICE_UDP_ILOS_HW 53
+#define ICE_ESP_HW 88
+#define ICE_AH_HW 89
#define ICE_SCTP_IL_HW 96
#define ICE_PPPOE_HW 103
+#define ICE_L2TPV3_HW 104
/* ICE_UDP_OF is used to identify all 3 tunnel types
* VXLAN, GENEVE and VXLAN_GPE. To differentiate further
#define ICE_MDID_SIZE 2
#define ICE_TUN_FLAG_MDID 21
+#define ICE_TUN_FLAG_MDID_OFF (ICE_MDID_SIZE * ICE_TUN_FLAG_MDID)
#define ICE_TUN_FLAG_MASK 0xFF
+#define ICE_TUN_FLAG_VLAN_MASK 0x01
#define ICE_TUN_FLAG_FV_IND 2
#define ICE_PROTOCOL_MAX_ENTRIES 16
};
struct ice_ethtype_hdr {
- u16 ethtype_id;
+ __be16 ethtype_id;
};
struct ice_ether_vlan_hdr {
u8 dst_addr[ETH_ALEN];
u8 src_addr[ETH_ALEN];
- u32 vlan_id;
+ __be32 vlan_id;
};
struct ice_vlan_hdr {
- u16 vlan;
- u16 type;
+ __be16 type;
+ __be16 vlan;
};
struct ice_ipv4_hdr {
u8 version;
u8 tos;
- u16 total_length;
- u16 id;
- u16 frag_off;
+ __be16 total_length;
+ __be16 id;
+ __be16 frag_off;
u8 time_to_live;
u8 protocol;
- u16 check;
- u32 src_addr;
- u32 dst_addr;
+ __be16 check;
+ __be32 src_addr;
+ __be32 dst_addr;
+};
+
+struct ice_le_ver_tc_flow {
+ union {
+ struct {
+ u32 flow_label : 20;
+ u32 tc : 8;
+ u32 version : 4;
+ } fld;
+ u32 val;
+ } u;
};
struct ice_ipv6_hdr {
- u32 version:4;
- u32 tc:8;
- u32 flow_label:20;
- u16 payload_len;
+ __be32 be_ver_tc_flow;
+ __be16 payload_len;
u8 next_hdr;
u8 hop_limit;
u8 src_addr[ICE_IPV6_ADDR_LENGTH];
};
struct ice_sctp_hdr {
- u16 src_port;
- u16 dst_port;
- u32 verification_tag;
- u32 check;
+ __be16 src_port;
+ __be16 dst_port;
+ __be32 verification_tag;
+ __be32 check;
};
struct ice_l4_hdr {
- u16 src_port;
- u16 dst_port;
- u16 len;
- u16 check;
+ __be16 src_port;
+ __be16 dst_port;
+ __be16 len;
+ __be16 check;
};
struct ice_udp_tnl_hdr {
- u16 field;
- u16 proto_type;
- u32 vni; /* only use lower 24-bits */
+ __be16 field;
+ __be16 proto_type;
+ __be32 vni; /* only use lower 24-bits */
};
-#pragma pack(1)
struct ice_udp_gtp_hdr {
u8 flags;
u8 msg_type;
- u16 rsrvd_len;
- u32 teid;
- u16 rsrvd_seq_nbr;
+ __be16 rsrvd_len;
+ __be32 teid;
+ __be16 rsrvd_seq_nbr;
u8 rsrvd_n_pdu_nbr;
u8 rsrvd_next_ext;
u8 rsvrd_ext_len;
struct ice_pppoe_hdr {
u8 rsrvd_ver_type;
- u8 rsrved_code;
- u16 session_id;
- u16 length;
- u16 ppp_prot_id; /* control and data only */
+ u8 rsrvd_code;
+ __be16 session_id;
+ __be16 length;
+ __be16 ppp_prot_id; /* control and data only */
+};
+
+struct ice_pfcp_hdr {
+ u8 flags;
+ u8 msg_type;
+ __be16 length;
+ __be64 seid;
+ __be32 seq;
+ u8 spare;
+};
+
+struct ice_l2tpv3_sess_hdr {
+ __be32 session_id;
+ __be64 cookie;
+};
+
+struct ice_esp_hdr {
+ __be32 spi;
+ __be32 seq;
+};
+
+struct ice_ah_hdr {
+ u8 next_hdr;
+ u8 paylen;
+ __be16 rsrvd;
+ __be32 spi;
+ __be32 seq;
+};
+
+struct ice_nat_t_hdr {
+ struct ice_esp_hdr esp;
};
-#pragma pack()
struct ice_nvgre {
- u16 flags;
- u16 protocol;
- u32 tni_flow;
+ __be16 flags;
+ __be16 protocol;
+ __be32 tni_flow;
};
union ice_prot_hdr {
struct ice_nvgre nvgre_hdr;
struct ice_udp_gtp_hdr gtp_hdr;
struct ice_pppoe_hdr pppoe_hdr;
+ struct ice_pfcp_hdr pfcp_hdr;
+ struct ice_l2tpv3_sess_hdr l2tpv3_sess_hdr;
+ struct ice_esp_hdr esp_hdr;
+ struct ice_ah_hdr ah_hdr;
+ struct ice_nat_t_hdr nat_t_hdr;
};
/* This is mapping table entry that maps every word within a given protocol