Skip to content

Commit bb055c1

Browse files
pjvuurendavem330
authored andcommitted
nfp: add mpls match offloading support
Previously MPLS match offloading was not supported. This patch enables MPLS match offloading support for label, bos and tc fields. Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Simon Horman <simon.horman@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 4e64b1e commit bb055c1

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@
5757
#define NFP_FLOWER_MASK_VLAN_CFI BIT(12)
5858
#define NFP_FLOWER_MASK_VLAN_VID GENMASK(11, 0)
5959

60+
#define NFP_FLOWER_MASK_MPLS_LB GENMASK(31, 12)
61+
#define NFP_FLOWER_MASK_MPLS_TC GENMASK(11, 9)
62+
#define NFP_FLOWER_MASK_MPLS_BOS BIT(8)
63+
#define NFP_FLOWER_MASK_MPLS_Q BIT(0)
64+
6065
#define NFP_FL_SC_ACT_DROP 0x80000000
6166
#define NFP_FL_SC_ACT_USER 0x7D000000
6267
#define NFP_FL_SC_ACT_POPV 0x6A000000

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,21 @@ nfp_flower_compile_mac(struct nfp_flower_mac_mpls *frame,
111111
ether_addr_copy(frame->mac_src, &addr->src[0]);
112112
}
113113

114-
if (mask_version)
115-
frame->mpls_lse = cpu_to_be32(~0);
114+
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_MPLS)) {
115+
struct flow_dissector_key_mpls *mpls;
116+
u32 t_mpls;
117+
118+
mpls = skb_flow_dissector_target(flow->dissector,
119+
FLOW_DISSECTOR_KEY_MPLS,
120+
target);
121+
122+
t_mpls = FIELD_PREP(NFP_FLOWER_MASK_MPLS_LB, mpls->mpls_label) |
123+
FIELD_PREP(NFP_FLOWER_MASK_MPLS_TC, mpls->mpls_tc) |
124+
FIELD_PREP(NFP_FLOWER_MASK_MPLS_BOS, mpls->mpls_bos) |
125+
NFP_FLOWER_MASK_MPLS_Q;
126+
127+
frame->mpls_lse = cpu_to_be32(t_mpls);
128+
}
116129
}
117130

118131
static void

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \
5858
BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
5959
BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) | \
60+
BIT(FLOW_DISSECTOR_KEY_MPLS) | \
6061
BIT(FLOW_DISSECTOR_KEY_IP))
6162

6263
#define NFP_FLOWER_WHITELIST_TUN_DISSECTOR \
@@ -238,11 +239,6 @@ nfp_flower_calculate_key_layers(struct nfp_fl_key_ls *ret_key_ls,
238239
case cpu_to_be16(ETH_P_ARP):
239240
return -EOPNOTSUPP;
240241

241-
/* Currently we do not offload MPLS. */
242-
case cpu_to_be16(ETH_P_MPLS_UC):
243-
case cpu_to_be16(ETH_P_MPLS_MC):
244-
return -EOPNOTSUPP;
245-
246242
/* Will be included in layer 2. */
247243
case cpu_to_be16(ETH_P_8021Q):
248244
break;

0 commit comments

Comments
 (0)