mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
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>
This commit is contained in:
parent
4e64b1ed15
commit
bb055c198d
3 changed files with 21 additions and 7 deletions
|
@ -57,6 +57,11 @@
|
|||
#define NFP_FLOWER_MASK_VLAN_CFI BIT(12)
|
||||
#define NFP_FLOWER_MASK_VLAN_VID GENMASK(11, 0)
|
||||
|
||||
#define NFP_FLOWER_MASK_MPLS_LB GENMASK(31, 12)
|
||||
#define NFP_FLOWER_MASK_MPLS_TC GENMASK(11, 9)
|
||||
#define NFP_FLOWER_MASK_MPLS_BOS BIT(8)
|
||||
#define NFP_FLOWER_MASK_MPLS_Q BIT(0)
|
||||
|
||||
#define NFP_FL_SC_ACT_DROP 0x80000000
|
||||
#define NFP_FL_SC_ACT_USER 0x7D000000
|
||||
#define NFP_FL_SC_ACT_POPV 0x6A000000
|
||||
|
|
|
@ -111,8 +111,21 @@ nfp_flower_compile_mac(struct nfp_flower_mac_mpls *frame,
|
|||
ether_addr_copy(frame->mac_src, &addr->src[0]);
|
||||
}
|
||||
|
||||
if (mask_version)
|
||||
frame->mpls_lse = cpu_to_be32(~0);
|
||||
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_MPLS)) {
|
||||
struct flow_dissector_key_mpls *mpls;
|
||||
u32 t_mpls;
|
||||
|
||||
mpls = skb_flow_dissector_target(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_MPLS,
|
||||
target);
|
||||
|
||||
t_mpls = FIELD_PREP(NFP_FLOWER_MASK_MPLS_LB, mpls->mpls_label) |
|
||||
FIELD_PREP(NFP_FLOWER_MASK_MPLS_TC, mpls->mpls_tc) |
|
||||
FIELD_PREP(NFP_FLOWER_MASK_MPLS_BOS, mpls->mpls_bos) |
|
||||
NFP_FLOWER_MASK_MPLS_Q;
|
||||
|
||||
frame->mpls_lse = cpu_to_be32(t_mpls);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -57,6 +57,7 @@
|
|||
BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \
|
||||
BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
|
||||
BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) | \
|
||||
BIT(FLOW_DISSECTOR_KEY_MPLS) | \
|
||||
BIT(FLOW_DISSECTOR_KEY_IP))
|
||||
|
||||
#define NFP_FLOWER_WHITELIST_TUN_DISSECTOR \
|
||||
|
@ -238,11 +239,6 @@ nfp_flower_calculate_key_layers(struct nfp_fl_key_ls *ret_key_ls,
|
|||
case cpu_to_be16(ETH_P_ARP):
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Currently we do not offload MPLS. */
|
||||
case cpu_to_be16(ETH_P_MPLS_UC):
|
||||
case cpu_to_be16(ETH_P_MPLS_MC):
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Will be included in layer 2. */
|
||||
case cpu_to_be16(ETH_P_8021Q):
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue