Currently, the flow dissector and the Flower classifier can only handle the first entry of an MPLS label stack. This patch series generalises the code to allow parsing and matching the Label Stack Entries that follow.
Patch 1 extends the flow dissector to parse MPLS LSEs until the Bottom Of Stack bit is reached. The number of parsed LSEs is capped at FLOW_DIS_MPLS_MAX (arbitrarily set to 7). Flower and the NFP driver are updated to take into account the new layout of struct flow_dissector_key_mpls. Patch 2 extends Flower. It defines new netlink attributes, which are independent from the previous MPLS ones. Mixing the old and the new attributes in a same filter is not allowed. For backward compatibility, the old attributes are used when dumping filters that don't require the new ones. Changes since v1: * Fix compilation of NFP driver (kbuild test robot). * Fix sparse warning with entropy label (kbuild test robot). Guillaume Nault (2): flow_dissector: Parse multiple MPLS Label Stack Entries cls_flower: Support filtering on multiple MPLS Label Stack Entries .../net/ethernet/netronome/nfp/flower/match.c | 42 ++- include/net/flow_dissector.h | 14 +- include/uapi/linux/pkt_cls.h | 23 ++ net/core/flow_dissector.c | 49 ++- net/sched/cls_flower.c | 295 +++++++++++++++++- 5 files changed, 378 insertions(+), 45 deletions(-) -- 2.21.1 Note: the NFP udpate was only compile-tested as I don't have the required hardware.