net/ice/base: support L4 for QinQ switch filter
This patch adds more dummy packet types for QinQ packet, it enables tcp/udp layer of ipv4/ipv6 for QinQ payload, so we can use L4 dst/src port as input set for switch filter. Signed-off-by: Steve Yang <stevex.yang@intel.com> Acked-by: Qi Zhang <qi.z.zhang@intel.com>
This commit is contained in:
parent
b43045eede
commit
ccf69617ce
@ -1660,7 +1660,7 @@ static const struct ice_dummy_pkt_offsets dummy_qinq_ipv4_packet_offsets[] = {
|
||||
{ ICE_MAC_OFOS, 0 },
|
||||
{ ICE_VLAN_EX, 12 },
|
||||
{ ICE_VLAN_IN, 16 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_IPV4_OFOS, 22 },
|
||||
{ ICE_PROTOCOL_LAST, 0 },
|
||||
};
|
||||
@ -1674,6 +1674,35 @@ static const u8 dummy_qinq_ipv4_pkt[] = {
|
||||
0x81, 0x00, 0x00, 0x00, /* ICE_VLAN_IN 16 */
|
||||
0x08, 0x00, /* ICE_ETYPE_OL 20 */
|
||||
|
||||
0x45, 0x00, 0x00, 0x14, /* ICE_IPV4_OFOS 22 */
|
||||
0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, /* 2 bytes for 4 byte alignment */
|
||||
};
|
||||
|
||||
static const
|
||||
struct ice_dummy_pkt_offsets dummy_qinq_ipv4_udp_packet_offsets[] = {
|
||||
{ ICE_MAC_OFOS, 0 },
|
||||
{ ICE_VLAN_EX, 12 },
|
||||
{ ICE_VLAN_IN, 16 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_IPV4_OFOS, 22 },
|
||||
{ ICE_UDP_ILOS, 42 },
|
||||
{ ICE_PROTOCOL_LAST, 0 },
|
||||
};
|
||||
|
||||
static const u8 dummy_qinq_ipv4_udp_pkt[] = {
|
||||
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x91, 0x00, 0x00, 0x00, /* ICE_VLAN_EX 12 */
|
||||
0x81, 0x00, 0x00, 0x00, /* ICE_VLAN_IN 16 */
|
||||
0x08, 0x00, /* ICE_ETYPE_OL 20 */
|
||||
|
||||
0x45, 0x00, 0x00, 0x1c, /* ICE_IPV4_OFOS 22 */
|
||||
0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x11, 0x00, 0x00,
|
||||
@ -1686,11 +1715,46 @@ static const u8 dummy_qinq_ipv4_pkt[] = {
|
||||
0x00, 0x00, /* 2 bytes for 4 byte alignment */
|
||||
};
|
||||
|
||||
static const
|
||||
struct ice_dummy_pkt_offsets dummy_qinq_ipv4_tcp_packet_offsets[] = {
|
||||
{ ICE_MAC_OFOS, 0 },
|
||||
{ ICE_VLAN_EX, 12 },
|
||||
{ ICE_VLAN_IN, 16 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_IPV4_OFOS, 22 },
|
||||
{ ICE_TCP_IL, 42 },
|
||||
{ ICE_PROTOCOL_LAST, 0 },
|
||||
};
|
||||
|
||||
static const u8 dummy_qinq_ipv4_tcp_pkt[] = {
|
||||
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x91, 0x00, 0x00, 0x00, /* ICE_VLAN_EX 12 */
|
||||
0x81, 0x00, 0x00, 0x00, /* ICE_VLAN_IN 16 */
|
||||
0x08, 0x00, /* ICE_ETYPE_OL 20 */
|
||||
|
||||
0x45, 0x00, 0x00, 0x28, /* ICE_IPV4_OFOS 22 */
|
||||
0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x06, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, /* ICE_TCP_IL 42 */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x50, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, /* 2 bytes for 4 byte alignment */
|
||||
};
|
||||
|
||||
static const struct ice_dummy_pkt_offsets dummy_qinq_ipv6_packet_offsets[] = {
|
||||
{ ICE_MAC_OFOS, 0 },
|
||||
{ ICE_VLAN_EX, 12 },
|
||||
{ ICE_VLAN_IN, 16 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_IPV6_OFOS, 22 },
|
||||
{ ICE_PROTOCOL_LAST, 0 },
|
||||
};
|
||||
@ -1705,7 +1769,41 @@ static const u8 dummy_qinq_ipv6_pkt[] = {
|
||||
0x86, 0xDD, /* ICE_ETYPE_OL 20 */
|
||||
|
||||
0x60, 0x00, 0x00, 0x00, /* ICE_IPV6_OFOS 22 */
|
||||
0x00, 0x10, 0x11, 0x00, /* Next header UDP */
|
||||
0x00, 0x00, 0x3b, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, /* 2 bytes for 4 byte alignment */
|
||||
};
|
||||
|
||||
static const
|
||||
struct ice_dummy_pkt_offsets dummy_qinq_ipv6_udp_packet_offsets[] = {
|
||||
{ ICE_MAC_OFOS, 0 },
|
||||
{ ICE_VLAN_EX, 12 },
|
||||
{ ICE_VLAN_IN, 16 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_IPV6_OFOS, 22 },
|
||||
{ ICE_UDP_ILOS, 62 },
|
||||
{ ICE_PROTOCOL_LAST, 0 },
|
||||
};
|
||||
|
||||
static const u8 dummy_qinq_ipv6_udp_pkt[] = {
|
||||
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x91, 0x00, 0x00, 0x00, /* ICE_VLAN_EX 12 */
|
||||
0x81, 0x00, 0x00, 0x00, /* ICE_VLAN_IN 16 */
|
||||
0x86, 0xDD, /* ICE_ETYPE_OL 20 */
|
||||
|
||||
0x60, 0x00, 0x00, 0x00, /* ICE_IPV6_OFOS 22 */
|
||||
0x00, 0x08, 0x11, 0x00, /* Next header UDP */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
@ -1716,9 +1814,46 @@ static const u8 dummy_qinq_ipv6_pkt[] = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, /* ICE_UDP_ILOS 62 */
|
||||
0x00, 0x10, 0x00, 0x00,
|
||||
0x00, 0x08, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, /* needed for ESP packets */
|
||||
0x00, 0x00, /* 2 bytes for 4 byte alignment */
|
||||
};
|
||||
|
||||
static const
|
||||
struct ice_dummy_pkt_offsets dummy_qinq_ipv6_tcp_packet_offsets[] = {
|
||||
{ ICE_MAC_OFOS, 0 },
|
||||
{ ICE_VLAN_EX, 12 },
|
||||
{ ICE_VLAN_IN, 16 },
|
||||
{ ICE_ETYPE_OL, 20 },
|
||||
{ ICE_IPV6_OFOS, 22 },
|
||||
{ ICE_TCP_IL, 62 },
|
||||
{ ICE_PROTOCOL_LAST, 0 },
|
||||
};
|
||||
|
||||
static const u8 dummy_qinq_ipv6_tcp_pkt[] = {
|
||||
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x91, 0x00, 0x00, 0x00, /* ICE_VLAN_EX 12 */
|
||||
0x81, 0x00, 0x00, 0x00, /* ICE_VLAN_IN 16 */
|
||||
0x86, 0xDD, /* ICE_ETYPE_OL 20 */
|
||||
|
||||
0x60, 0x00, 0x00, 0x00, /* ICE_IPV6_OFOS 22 */
|
||||
0x00, 0x14, 0x06, 0x00, /* Next header TCP */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, /* ICE_TCP_IL 62 */
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x50, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, /* 2 bytes for 4 byte alignment */
|
||||
@ -7922,12 +8057,40 @@ ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
|
||||
|
||||
if ((tun_type == ICE_SW_TUN_AND_NON_TUN_QINQ ||
|
||||
tun_type == ICE_NON_TUN_QINQ) && ipv6) {
|
||||
if (tcp) {
|
||||
*pkt = dummy_qinq_ipv6_tcp_pkt;
|
||||
*pkt_len = sizeof(dummy_qinq_ipv6_tcp_pkt);
|
||||
*offsets = dummy_qinq_ipv6_tcp_packet_offsets;
|
||||
return;
|
||||
}
|
||||
|
||||
if (udp) {
|
||||
*pkt = dummy_qinq_ipv6_udp_pkt;
|
||||
*pkt_len = sizeof(dummy_qinq_ipv6_udp_pkt);
|
||||
*offsets = dummy_qinq_ipv6_udp_packet_offsets;
|
||||
return;
|
||||
}
|
||||
|
||||
*pkt = dummy_qinq_ipv6_pkt;
|
||||
*pkt_len = sizeof(dummy_qinq_ipv6_pkt);
|
||||
*offsets = dummy_qinq_ipv6_packet_offsets;
|
||||
return;
|
||||
} else if (tun_type == ICE_SW_TUN_AND_NON_TUN_QINQ ||
|
||||
tun_type == ICE_NON_TUN_QINQ) {
|
||||
if (tcp) {
|
||||
*pkt = dummy_qinq_ipv4_tcp_pkt;
|
||||
*pkt_len = sizeof(dummy_qinq_ipv4_tcp_pkt);
|
||||
*offsets = dummy_qinq_ipv4_tcp_packet_offsets;
|
||||
return;
|
||||
}
|
||||
|
||||
if (udp) {
|
||||
*pkt = dummy_qinq_ipv4_udp_pkt;
|
||||
*pkt_len = sizeof(dummy_qinq_ipv4_udp_pkt);
|
||||
*offsets = dummy_qinq_ipv4_udp_packet_offsets;
|
||||
return;
|
||||
}
|
||||
|
||||
*pkt = dummy_qinq_ipv4_pkt;
|
||||
*pkt_len = sizeof(dummy_qinq_ipv4_pkt);
|
||||
*offsets = dummy_qinq_ipv4_packet_offsets;
|
||||
|
Loading…
x
Reference in New Issue
Block a user