net/ice: support IPv6 NAT-T
This patch add switch filter support for IPv6 NAT-T packets, it enable switch filter to direct IPv6 packets with NAT-T payload to specific action. Signed-off-by: Wei Zhao <wei.zhao1@intel.com> Acked-by: Qi Zhang <qi.z.zhang@intel.com>
This commit is contained in:
parent
277f125f00
commit
45b53ed370
@ -1394,6 +1394,20 @@ enum rte_flow_item_type pattern_eth_ipv6_ah[] = {
|
|||||||
RTE_FLOW_ITEM_TYPE_AH,
|
RTE_FLOW_ITEM_TYPE_AH,
|
||||||
RTE_FLOW_ITEM_TYPE_END,
|
RTE_FLOW_ITEM_TYPE_END,
|
||||||
};
|
};
|
||||||
|
enum rte_flow_item_type pattern_eth_ipv6_udp_esp[] = {
|
||||||
|
RTE_FLOW_ITEM_TYPE_ETH,
|
||||||
|
RTE_FLOW_ITEM_TYPE_IPV6,
|
||||||
|
RTE_FLOW_ITEM_TYPE_UDP,
|
||||||
|
RTE_FLOW_ITEM_TYPE_ESP,
|
||||||
|
RTE_FLOW_ITEM_TYPE_END,
|
||||||
|
};
|
||||||
|
enum rte_flow_item_type pattern_eth_ipv6_udp_ah[] = {
|
||||||
|
RTE_FLOW_ITEM_TYPE_ETH,
|
||||||
|
RTE_FLOW_ITEM_TYPE_IPV6,
|
||||||
|
RTE_FLOW_ITEM_TYPE_UDP,
|
||||||
|
RTE_FLOW_ITEM_TYPE_AH,
|
||||||
|
RTE_FLOW_ITEM_TYPE_END,
|
||||||
|
};
|
||||||
enum rte_flow_item_type pattern_eth_ipv6_l2tp[] = {
|
enum rte_flow_item_type pattern_eth_ipv6_l2tp[] = {
|
||||||
RTE_FLOW_ITEM_TYPE_ETH,
|
RTE_FLOW_ITEM_TYPE_ETH,
|
||||||
RTE_FLOW_ITEM_TYPE_IPV6,
|
RTE_FLOW_ITEM_TYPE_IPV6,
|
||||||
|
@ -393,9 +393,11 @@ extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[];
|
|||||||
|
|
||||||
/* ESP */
|
/* ESP */
|
||||||
extern enum rte_flow_item_type pattern_eth_ipv6_esp[];
|
extern enum rte_flow_item_type pattern_eth_ipv6_esp[];
|
||||||
|
extern enum rte_flow_item_type pattern_eth_ipv6_udp_esp[];
|
||||||
|
|
||||||
/* AH */
|
/* AH */
|
||||||
extern enum rte_flow_item_type pattern_eth_ipv6_ah[];
|
extern enum rte_flow_item_type pattern_eth_ipv6_ah[];
|
||||||
|
extern enum rte_flow_item_type pattern_eth_ipv6_udp_ah[];
|
||||||
|
|
||||||
/* L2TP */
|
/* L2TP */
|
||||||
extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[];
|
extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[];
|
||||||
|
@ -150,8 +150,12 @@ ice_pattern_match_item ice_switch_pattern_dist_comms[] = {
|
|||||||
ICE_SW_INSET_MAC_PPPOE_PROTO, ICE_INSET_NONE},
|
ICE_SW_INSET_MAC_PPPOE_PROTO, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv6_esp,
|
{pattern_eth_ipv6_esp,
|
||||||
ICE_INSET_NONE, ICE_INSET_NONE},
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
|
{pattern_eth_ipv6_udp_esp,
|
||||||
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv6_ah,
|
{pattern_eth_ipv6_ah,
|
||||||
ICE_INSET_NONE, ICE_INSET_NONE},
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
|
{pattern_eth_ipv6_udp_ah,
|
||||||
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv6_l2tp,
|
{pattern_eth_ipv6_l2tp,
|
||||||
ICE_INSET_NONE, ICE_INSET_NONE},
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv4_pfcp,
|
{pattern_eth_ipv4_pfcp,
|
||||||
@ -224,8 +228,12 @@ ice_pattern_match_item ice_switch_pattern_perm[] = {
|
|||||||
ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE},
|
ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv6_esp,
|
{pattern_eth_ipv6_esp,
|
||||||
ICE_INSET_NONE, ICE_INSET_NONE},
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
|
{pattern_eth_ipv6_udp_esp,
|
||||||
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv6_ah,
|
{pattern_eth_ipv6_ah,
|
||||||
ICE_INSET_NONE, ICE_INSET_NONE},
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
|
{pattern_eth_ipv6_udp_ah,
|
||||||
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv6_l2tp,
|
{pattern_eth_ipv6_l2tp,
|
||||||
ICE_INSET_NONE, ICE_INSET_NONE},
|
ICE_INSET_NONE, ICE_INSET_NONE},
|
||||||
{pattern_eth_ipv4_pfcp,
|
{pattern_eth_ipv4_pfcp,
|
||||||
@ -364,6 +372,7 @@ ice_switch_inset_get(const struct rte_flow_item pattern[],
|
|||||||
uint16_t tunnel_valid = 0;
|
uint16_t tunnel_valid = 0;
|
||||||
uint16_t pppoe_valid = 0;
|
uint16_t pppoe_valid = 0;
|
||||||
uint16_t ipv6_valiad = 0;
|
uint16_t ipv6_valiad = 0;
|
||||||
|
uint16_t udp_valiad = 0;
|
||||||
|
|
||||||
|
|
||||||
for (item = pattern; item->type !=
|
for (item = pattern; item->type !=
|
||||||
@ -642,6 +651,7 @@ ice_switch_inset_get(const struct rte_flow_item pattern[],
|
|||||||
case RTE_FLOW_ITEM_TYPE_UDP:
|
case RTE_FLOW_ITEM_TYPE_UDP:
|
||||||
udp_spec = item->spec;
|
udp_spec = item->spec;
|
||||||
udp_mask = item->mask;
|
udp_mask = item->mask;
|
||||||
|
udp_valiad = 1;
|
||||||
if (udp_spec && udp_mask) {
|
if (udp_spec && udp_mask) {
|
||||||
/* Check UDP mask and update input set*/
|
/* Check UDP mask and update input set*/
|
||||||
if (udp_mask->hdr.dgram_len ||
|
if (udp_mask->hdr.dgram_len ||
|
||||||
@ -974,7 +984,9 @@ ice_switch_inset_get(const struct rte_flow_item pattern[],
|
|||||||
"Invalid esp item");
|
"Invalid esp item");
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
if (ipv6_valiad)
|
if (ipv6_valiad && udp_valiad)
|
||||||
|
*tun_type = ICE_SW_TUN_PROFID_IPV6_NAT_T;
|
||||||
|
else if (ipv6_valiad)
|
||||||
*tun_type = ICE_SW_TUN_PROFID_IPV6_ESP;
|
*tun_type = ICE_SW_TUN_PROFID_IPV6_ESP;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -988,7 +1000,9 @@ ice_switch_inset_get(const struct rte_flow_item pattern[],
|
|||||||
"Invalid ah item");
|
"Invalid ah item");
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
if (ipv6_valiad)
|
if (ipv6_valiad && udp_valiad)
|
||||||
|
*tun_type = ICE_SW_TUN_PROFID_IPV6_NAT_T;
|
||||||
|
else if (ipv6_valiad)
|
||||||
*tun_type = ICE_SW_TUN_PROFID_IPV6_AH;
|
*tun_type = ICE_SW_TUN_PROFID_IPV6_AH;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1237,6 +1251,7 @@ ice_is_profile_rule(enum ice_sw_tunnel_type tun_type)
|
|||||||
case ICE_SW_TUN_PROFID_IPV6_ESP:
|
case ICE_SW_TUN_PROFID_IPV6_ESP:
|
||||||
case ICE_SW_TUN_PROFID_IPV6_AH:
|
case ICE_SW_TUN_PROFID_IPV6_AH:
|
||||||
case ICE_SW_TUN_PROFID_MAC_IPV6_L2TPV3:
|
case ICE_SW_TUN_PROFID_MAC_IPV6_L2TPV3:
|
||||||
|
case ICE_SW_TUN_PROFID_IPV6_NAT_T:
|
||||||
case ICE_SW_TUN_PROFID_IPV4_PFCP_NODE:
|
case ICE_SW_TUN_PROFID_IPV4_PFCP_NODE:
|
||||||
case ICE_SW_TUN_PROFID_IPV4_PFCP_SESSION:
|
case ICE_SW_TUN_PROFID_IPV4_PFCP_SESSION:
|
||||||
case ICE_SW_TUN_PROFID_IPV6_PFCP_NODE:
|
case ICE_SW_TUN_PROFID_IPV6_PFCP_NODE:
|
||||||
|
Loading…
Reference in New Issue
Block a user