• Guillaume Nault's avatar
    cls_flower: Support filtering on multiple MPLS Label Stack Entries · 61aec25a
    Guillaume Nault authored
    With struct flow_dissector_key_mpls now recording the first
    FLOW_DIS_MPLS_MAX labels, we can extend Flower to filter on any of
    these LSEs independently.
    
    In order to avoid creating new netlink attributes for every possible
    depth, let's define a new TCA_FLOWER_KEY_MPLS_OPTS nested attribute
    that contains the list of LSEs to match. Each LSE is represented by
    another attribute, TCA_FLOWER_KEY_MPLS_OPTS_LSE, which then contains
    the attributes representing the depth and the MPLS fields to match at
    this depth (label, TTL, etc.).
    
    For each MPLS field, the mask is always set to all-ones, as this is
    what the original API did. We could allow user configurable masks in
    the future if there is demand for more flexibility.
    
    The new API also allows to only specify an LSE depth. In that case,
    Flower only verifies that the MPLS label stack depth is greater or
    equal to the provided depth (that is, an LSE exists at this depth).
    
    Filters that only match on one (or more) fields of the first LSE are
    dumped using the old netlink attributes, to avoid confusing user space
    programs that don't understand the new API.
    Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    61aec25a
cls_flower.c 90 KB