Skip to content

Commit 4851bfd

Browse files
committed
Merge branch 'nfp-flower-fixes'
Jakub Kicinski says: ==================== nfp: flower: fixes for flower offload Two fixes for flower matching and tunnel encap. Pieter fixes VLAN matching if the entire VLAN id is masked out and match is only performed on the PCP field. Louis adds validation of tunnel flags for encap, most importantly we should not offload actions on IPv6 tunnels if it's not supported. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 12a78b0 + 224de54 commit 4851bfd

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

drivers/net/ethernet/netronome/nfp/flower/action.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#define NFP_FL_TUNNEL_CSUM cpu_to_be16(0x01)
5353
#define NFP_FL_TUNNEL_KEY cpu_to_be16(0x04)
5454
#define NFP_FL_TUNNEL_GENEVE_OPT cpu_to_be16(0x0800)
55+
#define NFP_FL_SUPPORTED_TUNNEL_INFO_FLAGS IP_TUNNEL_INFO_TX
5556
#define NFP_FL_SUPPORTED_IPV4_UDP_TUN_FLAGS (NFP_FL_TUNNEL_CSUM | \
5657
NFP_FL_TUNNEL_KEY | \
5758
NFP_FL_TUNNEL_GENEVE_OPT)
@@ -741,11 +742,16 @@ nfp_flower_loop_action(struct nfp_app *app, const struct tc_action *a,
741742
nfp_fl_push_vlan(psh_v, a);
742743
*a_len += sizeof(struct nfp_fl_push_vlan);
743744
} else if (is_tcf_tunnel_set(a)) {
745+
struct ip_tunnel_info *ip_tun = tcf_tunnel_info(a);
744746
struct nfp_repr *repr = netdev_priv(netdev);
747+
745748
*tun_type = nfp_fl_get_tun_from_act_l4_port(repr->app, a);
746749
if (*tun_type == NFP_FL_TUNNEL_NONE)
747750
return -EOPNOTSUPP;
748751

752+
if (ip_tun->mode & ~NFP_FL_SUPPORTED_TUNNEL_INFO_FLAGS)
753+
return -EOPNOTSUPP;
754+
749755
/* Pre-tunnel action is required for tunnel encap.
750756
* This checks for next hop entries on NFP.
751757
* If none, the packet falls back before applying other actions.

drivers/net/ethernet/netronome/nfp/flower/main.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ struct nfp_app;
7070
#define NFP_FL_FEATS_GENEVE BIT(0)
7171
#define NFP_FL_NBI_MTU_SETTING BIT(1)
7272
#define NFP_FL_FEATS_GENEVE_OPT BIT(2)
73+
#define NFP_FL_FEATS_VLAN_PCP BIT(3)
7374
#define NFP_FL_FEATS_LAG BIT(31)
7475

7576
struct nfp_fl_mask_id {

drivers/net/ethernet/netronome/nfp/flower/match.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ nfp_flower_compile_meta_tci(struct nfp_flower_meta_tci *frame,
5656
FLOW_DISSECTOR_KEY_VLAN,
5757
target);
5858
/* Populate the tci field. */
59-
if (flow_vlan->vlan_id) {
59+
if (flow_vlan->vlan_id || flow_vlan->vlan_priority) {
6060
tmp_tci = FIELD_PREP(NFP_FLOWER_MASK_VLAN_PRIO,
6161
flow_vlan->vlan_priority) |
6262
FIELD_PREP(NFP_FLOWER_MASK_VLAN_VID,

drivers/net/ethernet/netronome/nfp/flower/offload.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,17 @@ nfp_flower_calculate_key_layers(struct nfp_app *app,
192192
key_size += sizeof(struct nfp_flower_mac_mpls);
193193
}
194194

195+
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_VLAN)) {
196+
struct flow_dissector_key_vlan *flow_vlan;
197+
198+
flow_vlan = skb_flow_dissector_target(flow->dissector,
199+
FLOW_DISSECTOR_KEY_VLAN,
200+
flow->mask);
201+
if (!(priv->flower_ext_feats & NFP_FL_FEATS_VLAN_PCP) &&
202+
flow_vlan->vlan_priority)
203+
return -EOPNOTSUPP;
204+
}
205+
195206
if (dissector_uses_key(flow->dissector,
196207
FLOW_DISSECTOR_KEY_ENC_CONTROL)) {
197208
struct flow_dissector_key_ipv4_addrs *mask_ipv4 = NULL;

0 commit comments

Comments
 (0)