Commit 4a778f3d authored by David S. Miller's avatar David S. Miller

Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/nex

t-queue

Tony Nguyen says:

====================
100GbE Intel Wired LAN Driver Updates 2022-04-07

Alexander Lobakin says:

This hunts down several places around packet templates/dummies for
switch rules which are either repetitive, fragile or just not
really readable code.
It's a common need to add new packet templates and to review such
changes as well, try to simplify both with the help of a pair
macros and aliases.
ice_find_dummy_packet() became very complex at this point with tons
of nested if-elses. It clearly showed this approach does not scale,
so convert its logics to the simple mask-match + static const array.

bloat-o-meter is happy about that (built w/ LLVM 13):

add/remove: 0/1 grow/shrink: 1/1 up/down: 2/-1058 (-1056)
Function                                     old     new   delta
ice_fill_adv_dummy_packet                    289     291      +2
ice_adv_add_update_vsi_list                  201       -    -201
ice_add_adv_rule                            2950    2093    -857
Total: Before=414512, After=413456, chg -0.25%
add/remove: 53/52 grow/shrink: 0/0 up/down: 4660/-3988 (672)
RO Data                                      old     new   delta
ice_dummy_pkt_profiles                         -     672    +672
Total: Before=37895, After=38567, chg +1.77%

Diffstat also looks nice, and adding new packet templates now takes
less lines.

We'll probably come out with dynamic template crafting in a while,
but for now let's improve what we have currently.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents e89006be e33163a4
...@@ -30,12 +30,46 @@ static const u8 dummy_eth_header[DUMMY_ETH_HDR_LEN] = { 0x2, 0, 0, 0, 0, 0, ...@@ -30,12 +30,46 @@ static const u8 dummy_eth_header[DUMMY_ETH_HDR_LEN] = { 0x2, 0, 0, 0, 0, 0,
0x2, 0, 0, 0, 0, 0, 0x2, 0, 0, 0, 0, 0,
0x81, 0, 0, 0}; 0x81, 0, 0, 0};
enum {
ICE_PKT_VLAN = BIT(0),
ICE_PKT_OUTER_IPV6 = BIT(1),
ICE_PKT_TUN_GTPC = BIT(2),
ICE_PKT_TUN_GTPU = BIT(3),
ICE_PKT_TUN_NVGRE = BIT(4),
ICE_PKT_TUN_UDP = BIT(5),
ICE_PKT_INNER_IPV6 = BIT(6),
ICE_PKT_INNER_TCP = BIT(7),
ICE_PKT_INNER_UDP = BIT(8),
ICE_PKT_GTP_NOPAY = BIT(9),
};
struct ice_dummy_pkt_offsets { struct ice_dummy_pkt_offsets {
enum ice_protocol_type type; enum ice_protocol_type type;
u16 offset; /* ICE_PROTOCOL_LAST indicates end of list */ u16 offset; /* ICE_PROTOCOL_LAST indicates end of list */
}; };
static const struct ice_dummy_pkt_offsets dummy_gre_tcp_packet_offsets[] = { struct ice_dummy_pkt_profile {
const struct ice_dummy_pkt_offsets *offsets;
const u8 *pkt;
u32 match;
u16 pkt_len;
};
#define ICE_DECLARE_PKT_OFFSETS(type) \
static const struct ice_dummy_pkt_offsets \
ice_dummy_##type##_packet_offsets[]
#define ICE_DECLARE_PKT_TEMPLATE(type) \
static const u8 ice_dummy_##type##_packet[]
#define ICE_PKT_PROFILE(type, m) { \
.match = (m), \
.pkt = ice_dummy_##type##_packet, \
.pkt_len = sizeof(ice_dummy_##type##_packet), \
.offsets = ice_dummy_##type##_packet_offsets, \
}
ICE_DECLARE_PKT_OFFSETS(gre_tcp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -47,7 +81,7 @@ static const struct ice_dummy_pkt_offsets dummy_gre_tcp_packet_offsets[] = { ...@@ -47,7 +81,7 @@ static const struct ice_dummy_pkt_offsets dummy_gre_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_gre_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(gre_tcp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -82,7 +116,7 @@ static const u8 dummy_gre_tcp_packet[] = { ...@@ -82,7 +116,7 @@ static const u8 dummy_gre_tcp_packet[] = {
0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00
}; };
static const struct ice_dummy_pkt_offsets dummy_gre_udp_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(gre_udp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -94,7 +128,7 @@ static const struct ice_dummy_pkt_offsets dummy_gre_udp_packet_offsets[] = { ...@@ -94,7 +128,7 @@ static const struct ice_dummy_pkt_offsets dummy_gre_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_gre_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(gre_udp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -126,7 +160,7 @@ static const u8 dummy_gre_udp_packet[] = { ...@@ -126,7 +160,7 @@ static const u8 dummy_gre_udp_packet[] = {
0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
}; };
static const struct ice_dummy_pkt_offsets dummy_udp_tun_tcp_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(udp_tun_tcp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -141,7 +175,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_tun_tcp_packet_offsets[] = { ...@@ -141,7 +175,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_tun_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_udp_tun_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(udp_tun_tcp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -179,7 +213,7 @@ static const u8 dummy_udp_tun_tcp_packet[] = { ...@@ -179,7 +213,7 @@ static const u8 dummy_udp_tun_tcp_packet[] = {
0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00
}; };
static const struct ice_dummy_pkt_offsets dummy_udp_tun_udp_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(udp_tun_udp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -194,7 +228,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_tun_udp_packet_offsets[] = { ...@@ -194,7 +228,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_tun_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_udp_tun_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(udp_tun_udp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -229,8 +263,7 @@ static const u8 dummy_udp_tun_udp_packet[] = { ...@@ -229,8 +263,7 @@ static const u8 dummy_udp_tun_udp_packet[] = {
0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
}; };
static const struct ice_dummy_pkt_offsets ICE_DECLARE_PKT_OFFSETS(gre_ipv6_tcp) = {
dummy_gre_ipv6_tcp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -242,7 +275,7 @@ dummy_gre_ipv6_tcp_packet_offsets[] = { ...@@ -242,7 +275,7 @@ dummy_gre_ipv6_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_gre_ipv6_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(gre_ipv6_tcp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -282,8 +315,7 @@ static const u8 dummy_gre_ipv6_tcp_packet[] = { ...@@ -282,8 +315,7 @@ static const u8 dummy_gre_ipv6_tcp_packet[] = {
0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00
}; };
static const struct ice_dummy_pkt_offsets ICE_DECLARE_PKT_OFFSETS(gre_ipv6_udp) = {
dummy_gre_ipv6_udp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -295,7 +327,7 @@ dummy_gre_ipv6_udp_packet_offsets[] = { ...@@ -295,7 +327,7 @@ dummy_gre_ipv6_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_gre_ipv6_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(gre_ipv6_udp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -332,8 +364,7 @@ static const u8 dummy_gre_ipv6_udp_packet[] = { ...@@ -332,8 +364,7 @@ static const u8 dummy_gre_ipv6_udp_packet[] = {
0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
}; };
static const struct ice_dummy_pkt_offsets ICE_DECLARE_PKT_OFFSETS(udp_tun_ipv6_tcp) = {
dummy_udp_tun_ipv6_tcp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -348,7 +379,7 @@ dummy_udp_tun_ipv6_tcp_packet_offsets[] = { ...@@ -348,7 +379,7 @@ dummy_udp_tun_ipv6_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_udp_tun_ipv6_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(udp_tun_ipv6_tcp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -391,8 +422,7 @@ static const u8 dummy_udp_tun_ipv6_tcp_packet[] = { ...@@ -391,8 +422,7 @@ static const u8 dummy_udp_tun_ipv6_tcp_packet[] = {
0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00
}; };
static const struct ice_dummy_pkt_offsets ICE_DECLARE_PKT_OFFSETS(udp_tun_ipv6_udp) = {
dummy_udp_tun_ipv6_udp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -407,7 +437,7 @@ dummy_udp_tun_ipv6_udp_packet_offsets[] = { ...@@ -407,7 +437,7 @@ dummy_udp_tun_ipv6_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_udp_tun_ipv6_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(udp_tun_ipv6_udp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -448,7 +478,7 @@ static const u8 dummy_udp_tun_ipv6_udp_packet[] = { ...@@ -448,7 +478,7 @@ static const u8 dummy_udp_tun_ipv6_udp_packet[] = {
}; };
/* offset info for MAC + IPv4 + UDP dummy packet */ /* offset info for MAC + IPv4 + UDP dummy packet */
static const struct ice_dummy_pkt_offsets dummy_udp_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(udp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -457,7 +487,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_packet_offsets[] = { ...@@ -457,7 +487,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_packet_offsets[] = {
}; };
/* Dummy packet for MAC + IPv4 + UDP */ /* Dummy packet for MAC + IPv4 + UDP */
static const u8 dummy_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(udp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -477,7 +507,7 @@ static const u8 dummy_udp_packet[] = { ...@@ -477,7 +507,7 @@ static const u8 dummy_udp_packet[] = {
}; };
/* offset info for MAC + VLAN + IPv4 + UDP dummy packet */ /* offset info for MAC + VLAN + IPv4 + UDP dummy packet */
static const struct ice_dummy_pkt_offsets dummy_vlan_udp_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(vlan_udp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_VLAN_OFOS, 12 }, { ICE_VLAN_OFOS, 12 },
{ ICE_ETYPE_OL, 16 }, { ICE_ETYPE_OL, 16 },
...@@ -487,7 +517,7 @@ static const struct ice_dummy_pkt_offsets dummy_vlan_udp_packet_offsets[] = { ...@@ -487,7 +517,7 @@ static const struct ice_dummy_pkt_offsets dummy_vlan_udp_packet_offsets[] = {
}; };
/* C-tag (801.1Q), IPv4:UDP dummy packet */ /* C-tag (801.1Q), IPv4:UDP dummy packet */
static const u8 dummy_vlan_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(vlan_udp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -509,7 +539,7 @@ static const u8 dummy_vlan_udp_packet[] = { ...@@ -509,7 +539,7 @@ static const u8 dummy_vlan_udp_packet[] = {
}; };
/* offset info for MAC + IPv4 + TCP dummy packet */ /* offset info for MAC + IPv4 + TCP dummy packet */
static const struct ice_dummy_pkt_offsets dummy_tcp_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(tcp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
...@@ -518,7 +548,7 @@ static const struct ice_dummy_pkt_offsets dummy_tcp_packet_offsets[] = { ...@@ -518,7 +548,7 @@ static const struct ice_dummy_pkt_offsets dummy_tcp_packet_offsets[] = {
}; };
/* Dummy packet for MAC + IPv4 + TCP */ /* Dummy packet for MAC + IPv4 + TCP */
static const u8 dummy_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(tcp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -541,7 +571,7 @@ static const u8 dummy_tcp_packet[] = { ...@@ -541,7 +571,7 @@ static const u8 dummy_tcp_packet[] = {
}; };
/* offset info for MAC + VLAN (C-tag, 802.1Q) + IPv4 + TCP dummy packet */ /* offset info for MAC + VLAN (C-tag, 802.1Q) + IPv4 + TCP dummy packet */
static const struct ice_dummy_pkt_offsets dummy_vlan_tcp_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(vlan_tcp) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_VLAN_OFOS, 12 }, { ICE_VLAN_OFOS, 12 },
{ ICE_ETYPE_OL, 16 }, { ICE_ETYPE_OL, 16 },
...@@ -551,7 +581,7 @@ static const struct ice_dummy_pkt_offsets dummy_vlan_tcp_packet_offsets[] = { ...@@ -551,7 +581,7 @@ static const struct ice_dummy_pkt_offsets dummy_vlan_tcp_packet_offsets[] = {
}; };
/* C-tag (801.1Q), IPv4:TCP dummy packet */ /* C-tag (801.1Q), IPv4:TCP dummy packet */
static const u8 dummy_vlan_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(vlan_tcp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -575,7 +605,7 @@ static const u8 dummy_vlan_tcp_packet[] = { ...@@ -575,7 +605,7 @@ static const u8 dummy_vlan_tcp_packet[] = {
0x00, 0x00, /* 2 bytes for 4 byte alignment */ 0x00, 0x00, /* 2 bytes for 4 byte alignment */
}; };
static const struct ice_dummy_pkt_offsets dummy_tcp_ipv6_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(tcp_ipv6) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV6_OFOS, 14 }, { ICE_IPV6_OFOS, 14 },
...@@ -583,7 +613,7 @@ static const struct ice_dummy_pkt_offsets dummy_tcp_ipv6_packet_offsets[] = { ...@@ -583,7 +613,7 @@ static const struct ice_dummy_pkt_offsets dummy_tcp_ipv6_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_tcp_ipv6_packet[] = { ICE_DECLARE_PKT_TEMPLATE(tcp_ipv6) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -611,8 +641,7 @@ static const u8 dummy_tcp_ipv6_packet[] = { ...@@ -611,8 +641,7 @@ static const u8 dummy_tcp_ipv6_packet[] = {
}; };
/* C-tag (802.1Q): IPv6 + TCP */ /* C-tag (802.1Q): IPv6 + TCP */
static const struct ice_dummy_pkt_offsets ICE_DECLARE_PKT_OFFSETS(vlan_tcp_ipv6) = {
dummy_vlan_tcp_ipv6_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_VLAN_OFOS, 12 }, { ICE_VLAN_OFOS, 12 },
{ ICE_ETYPE_OL, 16 }, { ICE_ETYPE_OL, 16 },
...@@ -622,7 +651,7 @@ dummy_vlan_tcp_ipv6_packet_offsets[] = { ...@@ -622,7 +651,7 @@ dummy_vlan_tcp_ipv6_packet_offsets[] = {
}; };
/* C-tag (802.1Q), IPv6 + TCP dummy packet */ /* C-tag (802.1Q), IPv6 + TCP dummy packet */
static const u8 dummy_vlan_tcp_ipv6_packet[] = { ICE_DECLARE_PKT_TEMPLATE(vlan_tcp_ipv6) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -652,7 +681,7 @@ static const u8 dummy_vlan_tcp_ipv6_packet[] = { ...@@ -652,7 +681,7 @@ static const u8 dummy_vlan_tcp_ipv6_packet[] = {
}; };
/* IPv6 + UDP */ /* IPv6 + UDP */
static const struct ice_dummy_pkt_offsets dummy_udp_ipv6_packet_offsets[] = { ICE_DECLARE_PKT_OFFSETS(udp_ipv6) = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_ETYPE_OL, 12 }, { ICE_ETYPE_OL, 12 },
{ ICE_IPV6_OFOS, 14 }, { ICE_IPV6_OFOS, 14 },
...@@ -661,7 +690,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_ipv6_packet_offsets[] = { ...@@ -661,7 +690,7 @@ static const struct ice_dummy_pkt_offsets dummy_udp_ipv6_packet_offsets[] = {
}; };
/* IPv6 + UDP dummy packet */ /* IPv6 + UDP dummy packet */
static const u8 dummy_udp_ipv6_packet[] = { ICE_DECLARE_PKT_TEMPLATE(udp_ipv6) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -689,8 +718,7 @@ static const u8 dummy_udp_ipv6_packet[] = { ...@@ -689,8 +718,7 @@ static const u8 dummy_udp_ipv6_packet[] = {
}; };
/* C-tag (802.1Q): IPv6 + UDP */ /* C-tag (802.1Q): IPv6 + UDP */
static const struct ice_dummy_pkt_offsets ICE_DECLARE_PKT_OFFSETS(vlan_udp_ipv6) = {
dummy_vlan_udp_ipv6_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_VLAN_OFOS, 12 }, { ICE_VLAN_OFOS, 12 },
{ ICE_ETYPE_OL, 16 }, { ICE_ETYPE_OL, 16 },
...@@ -700,7 +728,7 @@ dummy_vlan_udp_ipv6_packet_offsets[] = { ...@@ -700,7 +728,7 @@ dummy_vlan_udp_ipv6_packet_offsets[] = {
}; };
/* C-tag (802.1Q), IPv6 + UDP dummy packet */ /* C-tag (802.1Q), IPv6 + UDP dummy packet */
static const u8 dummy_vlan_udp_ipv6_packet[] = { ICE_DECLARE_PKT_TEMPLATE(vlan_udp_ipv6) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -727,8 +755,7 @@ static const u8 dummy_vlan_udp_ipv6_packet[] = { ...@@ -727,8 +755,7 @@ static const u8 dummy_vlan_udp_ipv6_packet[] = {
}; };
/* Outer IPv4 + Outer UDP + GTP + Inner IPv4 + Inner TCP */ /* Outer IPv4 + Outer UDP + GTP + Inner IPv4 + Inner TCP */
static const ICE_DECLARE_PKT_OFFSETS(ipv4_gtpu_ipv4_tcp) = {
struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv4_tcp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
{ ICE_UDP_OF, 34 }, { ICE_UDP_OF, 34 },
...@@ -738,7 +765,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv4_tcp_packet_offsets[] = { ...@@ -738,7 +765,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv4_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv4_gtpu_ipv4_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv4_gtpu_ipv4_tcp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -776,8 +803,7 @@ static const u8 dummy_ipv4_gtpu_ipv4_tcp_packet[] = { ...@@ -776,8 +803,7 @@ static const u8 dummy_ipv4_gtpu_ipv4_tcp_packet[] = {
}; };
/* Outer IPv4 + Outer UDP + GTP + Inner IPv4 + Inner UDP */ /* Outer IPv4 + Outer UDP + GTP + Inner IPv4 + Inner UDP */
static const ICE_DECLARE_PKT_OFFSETS(ipv4_gtpu_ipv4_udp) = {
struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv4_udp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
{ ICE_UDP_OF, 34 }, { ICE_UDP_OF, 34 },
...@@ -787,7 +813,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv4_udp_packet_offsets[] = { ...@@ -787,7 +813,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv4_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv4_gtpu_ipv4_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv4_gtpu_ipv4_udp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -822,8 +848,7 @@ static const u8 dummy_ipv4_gtpu_ipv4_udp_packet[] = { ...@@ -822,8 +848,7 @@ static const u8 dummy_ipv4_gtpu_ipv4_udp_packet[] = {
}; };
/* Outer IPv6 + Outer UDP + GTP + Inner IPv4 + Inner TCP */ /* Outer IPv6 + Outer UDP + GTP + Inner IPv4 + Inner TCP */
static const ICE_DECLARE_PKT_OFFSETS(ipv4_gtpu_ipv6_tcp) = {
struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv6_tcp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
{ ICE_UDP_OF, 34 }, { ICE_UDP_OF, 34 },
...@@ -833,7 +858,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv6_tcp_packet_offsets[] = { ...@@ -833,7 +858,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv6_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv4_gtpu_ipv6_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv4_gtpu_ipv6_tcp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -875,8 +900,7 @@ static const u8 dummy_ipv4_gtpu_ipv6_tcp_packet[] = { ...@@ -875,8 +900,7 @@ static const u8 dummy_ipv4_gtpu_ipv6_tcp_packet[] = {
0x00, 0x00, /* 2 bytes for 4 byte alignment */ 0x00, 0x00, /* 2 bytes for 4 byte alignment */
}; };
static const ICE_DECLARE_PKT_OFFSETS(ipv4_gtpu_ipv6_udp) = {
struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv6_udp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV4_OFOS, 14 }, { ICE_IPV4_OFOS, 14 },
{ ICE_UDP_OF, 34 }, { ICE_UDP_OF, 34 },
...@@ -886,7 +910,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv6_udp_packet_offsets[] = { ...@@ -886,7 +910,7 @@ struct ice_dummy_pkt_offsets dummy_ipv4_gtpu_ipv6_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv4_gtpu_ipv6_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv4_gtpu_ipv6_udp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -925,8 +949,7 @@ static const u8 dummy_ipv4_gtpu_ipv6_udp_packet[] = { ...@@ -925,8 +949,7 @@ static const u8 dummy_ipv4_gtpu_ipv6_udp_packet[] = {
0x00, 0x00, /* 2 bytes for 4 byte alignment */ 0x00, 0x00, /* 2 bytes for 4 byte alignment */
}; };
static const ICE_DECLARE_PKT_OFFSETS(ipv6_gtpu_ipv4_tcp) = {
struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv4_tcp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV6_OFOS, 14 }, { ICE_IPV6_OFOS, 14 },
{ ICE_UDP_OF, 54 }, { ICE_UDP_OF, 54 },
...@@ -936,7 +959,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv4_tcp_packet_offsets[] = { ...@@ -936,7 +959,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv4_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv6_gtpu_ipv4_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv6_gtpu_ipv4_tcp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -978,8 +1001,7 @@ static const u8 dummy_ipv6_gtpu_ipv4_tcp_packet[] = { ...@@ -978,8 +1001,7 @@ static const u8 dummy_ipv6_gtpu_ipv4_tcp_packet[] = {
0x00, 0x00, /* 2 bytes for 4 byte alignment */ 0x00, 0x00, /* 2 bytes for 4 byte alignment */
}; };
static const ICE_DECLARE_PKT_OFFSETS(ipv6_gtpu_ipv4_udp) = {
struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv4_udp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV6_OFOS, 14 }, { ICE_IPV6_OFOS, 14 },
{ ICE_UDP_OF, 54 }, { ICE_UDP_OF, 54 },
...@@ -989,7 +1011,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv4_udp_packet_offsets[] = { ...@@ -989,7 +1011,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv4_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv6_gtpu_ipv4_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv6_gtpu_ipv4_udp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -1028,8 +1050,7 @@ static const u8 dummy_ipv6_gtpu_ipv4_udp_packet[] = { ...@@ -1028,8 +1050,7 @@ static const u8 dummy_ipv6_gtpu_ipv4_udp_packet[] = {
0x00, 0x00, /* 2 bytes for 4 byte alignment */ 0x00, 0x00, /* 2 bytes for 4 byte alignment */
}; };
static const ICE_DECLARE_PKT_OFFSETS(ipv6_gtpu_ipv6_tcp) = {
struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv6_tcp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV6_OFOS, 14 }, { ICE_IPV6_OFOS, 14 },
{ ICE_UDP_OF, 54 }, { ICE_UDP_OF, 54 },
...@@ -1039,7 +1060,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv6_tcp_packet_offsets[] = { ...@@ -1039,7 +1060,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv6_tcp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv6_gtpu_ipv6_tcp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv6_gtpu_ipv6_tcp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -1086,8 +1107,7 @@ static const u8 dummy_ipv6_gtpu_ipv6_tcp_packet[] = { ...@@ -1086,8 +1107,7 @@ static const u8 dummy_ipv6_gtpu_ipv6_tcp_packet[] = {
0x00, 0x00, /* 2 bytes for 4 byte alignment */ 0x00, 0x00, /* 2 bytes for 4 byte alignment */
}; };
static const ICE_DECLARE_PKT_OFFSETS(ipv6_gtpu_ipv6_udp) = {
struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv6_udp_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV6_OFOS, 14 }, { ICE_IPV6_OFOS, 14 },
{ ICE_UDP_OF, 54 }, { ICE_UDP_OF, 54 },
...@@ -1097,7 +1117,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv6_udp_packet_offsets[] = { ...@@ -1097,7 +1117,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtpu_ipv6_udp_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv6_gtpu_ipv6_udp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv6_gtpu_ipv6_udp) = {
0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */ 0x00, 0x00, 0x00, 0x00, /* Ethernet 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -1141,7 +1161,15 @@ static const u8 dummy_ipv6_gtpu_ipv6_udp_packet[] = { ...@@ -1141,7 +1161,15 @@ static const u8 dummy_ipv6_gtpu_ipv6_udp_packet[] = {
0x00, 0x00, /* 2 bytes for 4 byte alignment */ 0x00, 0x00, /* 2 bytes for 4 byte alignment */
}; };
static const u8 dummy_ipv4_gtpu_ipv4_packet[] = { ICE_DECLARE_PKT_OFFSETS(ipv4_gtpu_ipv4) = {
{ ICE_MAC_OFOS, 0 },
{ ICE_IPV4_OFOS, 14 },
{ ICE_UDP_OF, 34 },
{ ICE_GTP_NO_PAY, 42 },
{ ICE_PROTOCOL_LAST, 0 },
};
ICE_DECLARE_PKT_TEMPLATE(ipv4_gtpu_ipv4) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -1171,17 +1199,7 @@ static const u8 dummy_ipv4_gtpu_ipv4_packet[] = { ...@@ -1171,17 +1199,7 @@ static const u8 dummy_ipv4_gtpu_ipv4_packet[] = {
0x00, 0x00, 0x00, 0x00,
}; };
static const ICE_DECLARE_PKT_OFFSETS(ipv6_gtp) = {
struct ice_dummy_pkt_offsets dummy_ipv4_gtp_no_pay_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 },
{ ICE_IPV4_OFOS, 14 },
{ ICE_UDP_OF, 34 },
{ ICE_GTP_NO_PAY, 42 },
{ ICE_PROTOCOL_LAST, 0 },
};
static const
struct ice_dummy_pkt_offsets dummy_ipv6_gtp_no_pay_packet_offsets[] = {
{ ICE_MAC_OFOS, 0 }, { ICE_MAC_OFOS, 0 },
{ ICE_IPV6_OFOS, 14 }, { ICE_IPV6_OFOS, 14 },
{ ICE_UDP_OF, 54 }, { ICE_UDP_OF, 54 },
...@@ -1189,7 +1207,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtp_no_pay_packet_offsets[] = { ...@@ -1189,7 +1207,7 @@ struct ice_dummy_pkt_offsets dummy_ipv6_gtp_no_pay_packet_offsets[] = {
{ ICE_PROTOCOL_LAST, 0 }, { ICE_PROTOCOL_LAST, 0 },
}; };
static const u8 dummy_ipv6_gtp_packet[] = { ICE_DECLARE_PKT_TEMPLATE(ipv6_gtp) = {
0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */ 0x00, 0x00, 0x00, 0x00, /* ICE_MAC_OFOS 0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
...@@ -1215,6 +1233,55 @@ static const u8 dummy_ipv6_gtp_packet[] = { ...@@ -1215,6 +1233,55 @@ static const u8 dummy_ipv6_gtp_packet[] = {
0x00, 0x00, 0x00, 0x00,
}; };
static const struct ice_dummy_pkt_profile ice_dummy_pkt_profiles[] = {
ICE_PKT_PROFILE(ipv6_gtp, ICE_PKT_TUN_GTPU | ICE_PKT_OUTER_IPV6 |
ICE_PKT_GTP_NOPAY),
ICE_PKT_PROFILE(ipv6_gtpu_ipv6_udp, ICE_PKT_TUN_GTPU |
ICE_PKT_OUTER_IPV6 |
ICE_PKT_INNER_IPV6 |
ICE_PKT_INNER_UDP),
ICE_PKT_PROFILE(ipv6_gtpu_ipv6_tcp, ICE_PKT_TUN_GTPU |
ICE_PKT_OUTER_IPV6 |
ICE_PKT_INNER_IPV6),
ICE_PKT_PROFILE(ipv6_gtpu_ipv4_udp, ICE_PKT_TUN_GTPU |
ICE_PKT_OUTER_IPV6 |
ICE_PKT_INNER_UDP),
ICE_PKT_PROFILE(ipv6_gtpu_ipv4_tcp, ICE_PKT_TUN_GTPU |
ICE_PKT_OUTER_IPV6),
ICE_PKT_PROFILE(ipv4_gtpu_ipv4, ICE_PKT_TUN_GTPU | ICE_PKT_GTP_NOPAY),
ICE_PKT_PROFILE(ipv4_gtpu_ipv6_udp, ICE_PKT_TUN_GTPU |
ICE_PKT_INNER_IPV6 |
ICE_PKT_INNER_UDP),
ICE_PKT_PROFILE(ipv4_gtpu_ipv6_tcp, ICE_PKT_TUN_GTPU |
ICE_PKT_INNER_IPV6),
ICE_PKT_PROFILE(ipv4_gtpu_ipv4_udp, ICE_PKT_TUN_GTPU |
ICE_PKT_INNER_UDP),
ICE_PKT_PROFILE(ipv4_gtpu_ipv4_tcp, ICE_PKT_TUN_GTPU),
ICE_PKT_PROFILE(ipv6_gtp, ICE_PKT_TUN_GTPC | ICE_PKT_OUTER_IPV6),
ICE_PKT_PROFILE(ipv4_gtpu_ipv4, ICE_PKT_TUN_GTPC),
ICE_PKT_PROFILE(gre_ipv6_tcp, ICE_PKT_TUN_NVGRE | ICE_PKT_INNER_IPV6 |
ICE_PKT_INNER_TCP),
ICE_PKT_PROFILE(gre_tcp, ICE_PKT_TUN_NVGRE | ICE_PKT_INNER_TCP),
ICE_PKT_PROFILE(gre_ipv6_udp, ICE_PKT_TUN_NVGRE | ICE_PKT_INNER_IPV6),
ICE_PKT_PROFILE(gre_udp, ICE_PKT_TUN_NVGRE),
ICE_PKT_PROFILE(udp_tun_ipv6_tcp, ICE_PKT_TUN_UDP |
ICE_PKT_INNER_IPV6 |
ICE_PKT_INNER_TCP),
ICE_PKT_PROFILE(udp_tun_tcp, ICE_PKT_TUN_UDP | ICE_PKT_INNER_TCP),
ICE_PKT_PROFILE(udp_tun_ipv6_udp, ICE_PKT_TUN_UDP |
ICE_PKT_INNER_IPV6),
ICE_PKT_PROFILE(udp_tun_udp, ICE_PKT_TUN_UDP),
ICE_PKT_PROFILE(vlan_udp_ipv6, ICE_PKT_OUTER_IPV6 | ICE_PKT_INNER_UDP |
ICE_PKT_VLAN),
ICE_PKT_PROFILE(udp_ipv6, ICE_PKT_OUTER_IPV6 | ICE_PKT_INNER_UDP),
ICE_PKT_PROFILE(vlan_udp, ICE_PKT_INNER_UDP | ICE_PKT_VLAN),
ICE_PKT_PROFILE(udp, ICE_PKT_INNER_UDP),
ICE_PKT_PROFILE(vlan_tcp_ipv6, ICE_PKT_OUTER_IPV6 | ICE_PKT_VLAN),
ICE_PKT_PROFILE(tcp_ipv6, ICE_PKT_OUTER_IPV6),
ICE_PKT_PROFILE(vlan_tcp, ICE_PKT_VLAN),
ICE_PKT_PROFILE(tcp, 0),
};
#define ICE_SW_RULE_RX_TX_ETH_HDR_SIZE \ #define ICE_SW_RULE_RX_TX_ETH_HDR_SIZE \
(offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr) + \ (offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr) + \
(DUMMY_ETH_HDR_LEN * \ (DUMMY_ETH_HDR_LEN * \
...@@ -5501,212 +5568,66 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, ...@@ -5501,212 +5568,66 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
* structure per protocol header * structure per protocol header
* @lkups_cnt: number of protocols * @lkups_cnt: number of protocols
* @tun_type: tunnel type * @tun_type: tunnel type
* @pkt: dummy packet to fill according to filter match criteria *
* @pkt_len: packet length of dummy packet * Returns the &ice_dummy_pkt_profile corresponding to these lookup params.
* @offsets: pointer to receive the pointer to the offsets for the packet
*/ */
static void static const struct ice_dummy_pkt_profile *
ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt, ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
enum ice_sw_tunnel_type tun_type, enum ice_sw_tunnel_type tun_type)
const u8 **pkt, u16 *pkt_len,
const struct ice_dummy_pkt_offsets **offsets)
{ {
bool inner_tcp = false, inner_udp = false, outer_ipv6 = false; const struct ice_dummy_pkt_profile *ret = ice_dummy_pkt_profiles;
bool vlan = false, inner_ipv6 = false, gtp_no_pay = false; u32 match = 0;
u16 i; u16 i;
switch (tun_type) {
case ICE_SW_TUN_GTPC:
match |= ICE_PKT_TUN_GTPC;
break;
case ICE_SW_TUN_GTPU:
match |= ICE_PKT_TUN_GTPU;
break;
case ICE_SW_TUN_NVGRE:
match |= ICE_PKT_TUN_NVGRE;
break;
case ICE_SW_TUN_GENEVE:
case ICE_SW_TUN_VXLAN:
match |= ICE_PKT_TUN_UDP;
break;
default:
break;
}
for (i = 0; i < lkups_cnt; i++) { for (i = 0; i < lkups_cnt; i++) {
if (lkups[i].type == ICE_UDP_ILOS) if (lkups[i].type == ICE_UDP_ILOS)
inner_udp = true; match |= ICE_PKT_INNER_UDP;
else if (lkups[i].type == ICE_TCP_IL) else if (lkups[i].type == ICE_TCP_IL)
inner_tcp = true; match |= ICE_PKT_INNER_TCP;
else if (lkups[i].type == ICE_IPV6_OFOS) else if (lkups[i].type == ICE_IPV6_OFOS)
outer_ipv6 = true; match |= ICE_PKT_OUTER_IPV6;
else if (lkups[i].type == ICE_VLAN_OFOS) else if (lkups[i].type == ICE_VLAN_OFOS)
vlan = true; match |= ICE_PKT_VLAN;
else if (lkups[i].type == ICE_ETYPE_OL && else if (lkups[i].type == ICE_ETYPE_OL &&
lkups[i].h_u.ethertype.ethtype_id == lkups[i].h_u.ethertype.ethtype_id ==
cpu_to_be16(ICE_IPV6_ETHER_ID) && cpu_to_be16(ICE_IPV6_ETHER_ID) &&
lkups[i].m_u.ethertype.ethtype_id == lkups[i].m_u.ethertype.ethtype_id ==
cpu_to_be16(0xFFFF)) cpu_to_be16(0xFFFF))
outer_ipv6 = true; match |= ICE_PKT_OUTER_IPV6;
else if (lkups[i].type == ICE_ETYPE_IL && else if (lkups[i].type == ICE_ETYPE_IL &&
lkups[i].h_u.ethertype.ethtype_id == lkups[i].h_u.ethertype.ethtype_id ==
cpu_to_be16(ICE_IPV6_ETHER_ID) && cpu_to_be16(ICE_IPV6_ETHER_ID) &&
lkups[i].m_u.ethertype.ethtype_id == lkups[i].m_u.ethertype.ethtype_id ==
cpu_to_be16(0xFFFF)) cpu_to_be16(0xFFFF))
inner_ipv6 = true; match |= ICE_PKT_INNER_IPV6;
else if (lkups[i].type == ICE_IPV6_IL) else if (lkups[i].type == ICE_IPV6_IL)
inner_ipv6 = true; match |= ICE_PKT_INNER_IPV6;
else if (lkups[i].type == ICE_GTP_NO_PAY) else if (lkups[i].type == ICE_GTP_NO_PAY)
gtp_no_pay = true; match |= ICE_PKT_GTP_NOPAY;
} }
if (tun_type == ICE_SW_TUN_GTPU) { while (ret->match && (match & ret->match) != ret->match)
if (outer_ipv6) { ret++;
if (gtp_no_pay) {
*pkt = dummy_ipv6_gtp_packet;
*pkt_len = sizeof(dummy_ipv6_gtp_packet);
*offsets = dummy_ipv6_gtp_no_pay_packet_offsets;
} else if (inner_ipv6) {
if (inner_udp) {
*pkt = dummy_ipv6_gtpu_ipv6_udp_packet;
*pkt_len = sizeof(dummy_ipv6_gtpu_ipv6_udp_packet);
*offsets = dummy_ipv6_gtpu_ipv6_udp_packet_offsets;
} else {
*pkt = dummy_ipv6_gtpu_ipv6_tcp_packet;
*pkt_len = sizeof(dummy_ipv6_gtpu_ipv6_tcp_packet);
*offsets = dummy_ipv6_gtpu_ipv6_tcp_packet_offsets;
}
} else {
if (inner_udp) {
*pkt = dummy_ipv6_gtpu_ipv4_udp_packet;
*pkt_len = sizeof(dummy_ipv6_gtpu_ipv4_udp_packet);
*offsets = dummy_ipv6_gtpu_ipv4_udp_packet_offsets;
} else {
*pkt = dummy_ipv6_gtpu_ipv4_tcp_packet;
*pkt_len = sizeof(dummy_ipv6_gtpu_ipv4_tcp_packet);
*offsets = dummy_ipv6_gtpu_ipv4_tcp_packet_offsets;
}
}
} else {
if (gtp_no_pay) {
*pkt = dummy_ipv4_gtpu_ipv4_packet;
*pkt_len = sizeof(dummy_ipv4_gtpu_ipv4_packet);
*offsets = dummy_ipv4_gtp_no_pay_packet_offsets;
} else if (inner_ipv6) {
if (inner_udp) {
*pkt = dummy_ipv4_gtpu_ipv6_udp_packet;
*pkt_len = sizeof(dummy_ipv4_gtpu_ipv6_udp_packet);
*offsets = dummy_ipv4_gtpu_ipv6_udp_packet_offsets;
} else {
*pkt = dummy_ipv4_gtpu_ipv6_tcp_packet;
*pkt_len = sizeof(dummy_ipv4_gtpu_ipv6_tcp_packet);
*offsets = dummy_ipv4_gtpu_ipv6_tcp_packet_offsets;
}
} else {
if (inner_udp) {
*pkt = dummy_ipv4_gtpu_ipv4_udp_packet;
*pkt_len = sizeof(dummy_ipv4_gtpu_ipv4_udp_packet);
*offsets = dummy_ipv4_gtpu_ipv4_udp_packet_offsets;
} else {
*pkt = dummy_ipv4_gtpu_ipv4_tcp_packet;
*pkt_len = sizeof(dummy_ipv4_gtpu_ipv4_tcp_packet);
*offsets = dummy_ipv4_gtpu_ipv4_tcp_packet_offsets;
}
}
}
return;
}
if (tun_type == ICE_SW_TUN_GTPC) {
if (outer_ipv6) {
*pkt = dummy_ipv6_gtp_packet;
*pkt_len = sizeof(dummy_ipv6_gtp_packet);
*offsets = dummy_ipv6_gtp_no_pay_packet_offsets;
} else {
*pkt = dummy_ipv4_gtpu_ipv4_packet;
*pkt_len = sizeof(dummy_ipv4_gtpu_ipv4_packet);
*offsets = dummy_ipv4_gtp_no_pay_packet_offsets;
}
return;
}
if (tun_type == ICE_SW_TUN_NVGRE) {
if (inner_tcp && inner_ipv6) {
*pkt = dummy_gre_ipv6_tcp_packet;
*pkt_len = sizeof(dummy_gre_ipv6_tcp_packet);
*offsets = dummy_gre_ipv6_tcp_packet_offsets;
return;
}
if (inner_tcp) {
*pkt = dummy_gre_tcp_packet;
*pkt_len = sizeof(dummy_gre_tcp_packet);
*offsets = dummy_gre_tcp_packet_offsets;
return;
}
if (inner_ipv6) {
*pkt = dummy_gre_ipv6_udp_packet;
*pkt_len = sizeof(dummy_gre_ipv6_udp_packet);
*offsets = dummy_gre_ipv6_udp_packet_offsets;
return;
}
*pkt = dummy_gre_udp_packet;
*pkt_len = sizeof(dummy_gre_udp_packet);
*offsets = dummy_gre_udp_packet_offsets;
return;
}
if (tun_type == ICE_SW_TUN_VXLAN ||
tun_type == ICE_SW_TUN_GENEVE) {
if (inner_tcp && inner_ipv6) {
*pkt = dummy_udp_tun_ipv6_tcp_packet;
*pkt_len = sizeof(dummy_udp_tun_ipv6_tcp_packet);
*offsets = dummy_udp_tun_ipv6_tcp_packet_offsets;
return;
}
if (inner_tcp) {
*pkt = dummy_udp_tun_tcp_packet;
*pkt_len = sizeof(dummy_udp_tun_tcp_packet);
*offsets = dummy_udp_tun_tcp_packet_offsets;
return;
}
if (inner_ipv6) {
*pkt = dummy_udp_tun_ipv6_udp_packet;
*pkt_len = sizeof(dummy_udp_tun_ipv6_udp_packet);
*offsets = dummy_udp_tun_ipv6_udp_packet_offsets;
return;
}
*pkt = dummy_udp_tun_udp_packet;
*pkt_len = sizeof(dummy_udp_tun_udp_packet);
*offsets = dummy_udp_tun_udp_packet_offsets;
return;
}
if (inner_udp && !outer_ipv6) { return ret;
if (vlan) {
*pkt = dummy_vlan_udp_packet;
*pkt_len = sizeof(dummy_vlan_udp_packet);
*offsets = dummy_vlan_udp_packet_offsets;
return;
}
*pkt = dummy_udp_packet;
*pkt_len = sizeof(dummy_udp_packet);
*offsets = dummy_udp_packet_offsets;
return;
} else if (inner_udp && outer_ipv6) {
if (vlan) {
*pkt = dummy_vlan_udp_ipv6_packet;
*pkt_len = sizeof(dummy_vlan_udp_ipv6_packet);
*offsets = dummy_vlan_udp_ipv6_packet_offsets;
return;
}
*pkt = dummy_udp_ipv6_packet;
*pkt_len = sizeof(dummy_udp_ipv6_packet);
*offsets = dummy_udp_ipv6_packet_offsets;
return;
} else if ((inner_tcp && outer_ipv6) || outer_ipv6) {
if (vlan) {
*pkt = dummy_vlan_tcp_ipv6_packet;
*pkt_len = sizeof(dummy_vlan_tcp_ipv6_packet);
*offsets = dummy_vlan_tcp_ipv6_packet_offsets;
return;
}
*pkt = dummy_tcp_ipv6_packet;
*pkt_len = sizeof(dummy_tcp_ipv6_packet);
*offsets = dummy_tcp_ipv6_packet_offsets;
return;
}
if (vlan) {
*pkt = dummy_vlan_tcp_packet;
*pkt_len = sizeof(dummy_vlan_tcp_packet);
*offsets = dummy_vlan_tcp_packet_offsets;
} else {
*pkt = dummy_tcp_packet;
*pkt_len = sizeof(dummy_tcp_packet);
*offsets = dummy_tcp_packet_offsets;
}
} }
/** /**
...@@ -5716,15 +5637,12 @@ ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt, ...@@ -5716,15 +5637,12 @@ ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
* structure per protocol header * structure per protocol header
* @lkups_cnt: number of protocols * @lkups_cnt: number of protocols
* @s_rule: stores rule information from the match criteria * @s_rule: stores rule information from the match criteria
* @dummy_pkt: dummy packet to fill according to filter match criteria * @profile: dummy packet profile (the template, its size and header offsets)
* @pkt_len: packet length of dummy packet
* @offsets: offset info for the dummy packet
*/ */
static int static int
ice_fill_adv_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt, ice_fill_adv_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
struct ice_aqc_sw_rules_elem *s_rule, struct ice_aqc_sw_rules_elem *s_rule,
const u8 *dummy_pkt, u16 pkt_len, const struct ice_dummy_pkt_profile *profile)
const struct ice_dummy_pkt_offsets *offsets)
{ {
u8 *pkt; u8 *pkt;
u16 i; u16 i;
...@@ -5734,9 +5652,10 @@ ice_fill_adv_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt, ...@@ -5734,9 +5652,10 @@ ice_fill_adv_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
*/ */
pkt = s_rule->pdata.lkup_tx_rx.hdr; pkt = s_rule->pdata.lkup_tx_rx.hdr;
memcpy(pkt, dummy_pkt, pkt_len); memcpy(pkt, profile->pkt, profile->pkt_len);
for (i = 0; i < lkups_cnt; i++) { for (i = 0; i < lkups_cnt; i++) {
const struct ice_dummy_pkt_offsets *offsets = profile->offsets;
enum ice_protocol_type type; enum ice_protocol_type type;
u16 offset = 0, len = 0, j; u16 offset = 0, len = 0, j;
bool found = false; bool found = false;
...@@ -5810,16 +5729,18 @@ ice_fill_adv_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt, ...@@ -5810,16 +5729,18 @@ ice_fill_adv_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
* indicated by the mask to make sure we don't improperly write * indicated by the mask to make sure we don't improperly write
* over any significant packet data. * over any significant packet data.
*/ */
for (j = 0; j < len / sizeof(u16); j++) for (j = 0; j < len / sizeof(u16); j++) {
if (((u16 *)&lkups[i].m_u)[j]) u16 *ptr = (u16 *)(pkt + offset);
((u16 *)(pkt + offset))[j] = u16 mask = lkups[i].m_raw[j];
(((u16 *)(pkt + offset))[j] &
~((u16 *)&lkups[i].m_u)[j]) | if (!mask)
(((u16 *)&lkups[i].h_u)[j] & continue;
((u16 *)&lkups[i].m_u)[j]);
ptr[j] = (ptr[j] & ~mask) | (lkups[i].h_raw[j] & mask);
}
} }
s_rule->pdata.lkup_tx_rx.hdr_len = cpu_to_le16(pkt_len); s_rule->pdata.lkup_tx_rx.hdr_len = cpu_to_le16(profile->pkt_len);
return 0; return 0;
} }
...@@ -6042,12 +5963,11 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, ...@@ -6042,12 +5963,11 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
struct ice_rule_query_data *added_entry) struct ice_rule_query_data *added_entry)
{ {
struct ice_adv_fltr_mgmt_list_entry *m_entry, *adv_fltr = NULL; struct ice_adv_fltr_mgmt_list_entry *m_entry, *adv_fltr = NULL;
u16 rid = 0, i, pkt_len, rule_buf_sz, vsi_handle;
const struct ice_dummy_pkt_offsets *pkt_offsets;
struct ice_aqc_sw_rules_elem *s_rule = NULL; struct ice_aqc_sw_rules_elem *s_rule = NULL;
const struct ice_dummy_pkt_profile *profile;
u16 rid = 0, i, rule_buf_sz, vsi_handle;
struct list_head *rule_head; struct list_head *rule_head;
struct ice_switch_info *sw; struct ice_switch_info *sw;
const u8 *pkt = NULL;
u16 word_cnt; u16 word_cnt;
u32 act = 0; u32 act = 0;
int status; int status;
...@@ -6065,24 +5985,18 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, ...@@ -6065,24 +5985,18 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
/* get # of words we need to match */ /* get # of words we need to match */
word_cnt = 0; word_cnt = 0;
for (i = 0; i < lkups_cnt; i++) { for (i = 0; i < lkups_cnt; i++) {
u16 j, *ptr; u16 j;
ptr = (u16 *)&lkups[i].m_u; for (j = 0; j < ARRAY_SIZE(lkups->m_raw); j++)
for (j = 0; j < sizeof(lkups->m_u) / sizeof(u16); j++) if (lkups[i].m_raw[j])
if (ptr[j] != 0)
word_cnt++; word_cnt++;
} }
if (!word_cnt || word_cnt > ICE_MAX_CHAIN_WORDS) if (!word_cnt || word_cnt > ICE_MAX_CHAIN_WORDS)
return -EINVAL; return -EINVAL;
/* make sure that we can locate a dummy packet */ /* locate a dummy packet */
ice_find_dummy_packet(lkups, lkups_cnt, rinfo->tun_type, &pkt, &pkt_len, profile = ice_find_dummy_packet(lkups, lkups_cnt, rinfo->tun_type);
&pkt_offsets);
if (!pkt) {
status = -EINVAL;
goto err_ice_add_adv_rule;
}
if (!(rinfo->sw_act.fltr_act == ICE_FWD_TO_VSI || if (!(rinfo->sw_act.fltr_act == ICE_FWD_TO_VSI ||
rinfo->sw_act.fltr_act == ICE_FWD_TO_Q || rinfo->sw_act.fltr_act == ICE_FWD_TO_Q ||
...@@ -6123,7 +6037,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, ...@@ -6123,7 +6037,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
} }
return status; return status;
} }
rule_buf_sz = ICE_SW_RULE_RX_TX_NO_HDR_SIZE + pkt_len; rule_buf_sz = ICE_SW_RULE_RX_TX_NO_HDR_SIZE + profile->pkt_len;
s_rule = kzalloc(rule_buf_sz, GFP_KERNEL); s_rule = kzalloc(rule_buf_sz, GFP_KERNEL);
if (!s_rule) if (!s_rule)
return -ENOMEM; return -ENOMEM;
...@@ -6183,8 +6097,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, ...@@ -6183,8 +6097,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
s_rule->pdata.lkup_tx_rx.recipe_id = cpu_to_le16(rid); s_rule->pdata.lkup_tx_rx.recipe_id = cpu_to_le16(rid);
s_rule->pdata.lkup_tx_rx.act = cpu_to_le32(act); s_rule->pdata.lkup_tx_rx.act = cpu_to_le32(act);
status = ice_fill_adv_dummy_packet(lkups, lkups_cnt, s_rule, pkt, status = ice_fill_adv_dummy_packet(lkups, lkups_cnt, s_rule, profile);
pkt_len, pkt_offsets);
if (status) if (status)
goto err_ice_add_adv_rule; goto err_ice_add_adv_rule;
...@@ -6192,7 +6105,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, ...@@ -6192,7 +6105,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
rinfo->tun_type != ICE_SW_TUN_AND_NON_TUN) { rinfo->tun_type != ICE_SW_TUN_AND_NON_TUN) {
status = ice_fill_adv_packet_tun(hw, rinfo->tun_type, status = ice_fill_adv_packet_tun(hw, rinfo->tun_type,
s_rule->pdata.lkup_tx_rx.hdr, s_rule->pdata.lkup_tx_rx.hdr,
pkt_offsets); profile->offsets);
if (status) if (status)
goto err_ice_add_adv_rule; goto err_ice_add_adv_rule;
} }
......
...@@ -138,8 +138,16 @@ struct ice_update_recipe_lkup_idx_params { ...@@ -138,8 +138,16 @@ struct ice_update_recipe_lkup_idx_params {
struct ice_adv_lkup_elem { struct ice_adv_lkup_elem {
enum ice_protocol_type type; enum ice_protocol_type type;
union ice_prot_hdr h_u; /* Header values */ union {
union ice_prot_hdr m_u; /* Mask of header values to match */ union ice_prot_hdr h_u; /* Header values */
/* Used to iterate over the headers */
u16 h_raw[sizeof(union ice_prot_hdr) / sizeof(u16)];
};
union {
union ice_prot_hdr m_u; /* Mask of header values to match */
/* Used to iterate over header mask */
u16 m_raw[sizeof(union ice_prot_hdr) / sizeof(u16)];
};
}; };
struct ice_sw_act_ctrl { struct ice_sw_act_ctrl {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment