• Roopa Prabhu's avatar
    bridge: per vlan dst_metadata netlink support · efa5356b
    Roopa Prabhu authored
    This patch adds support to attach per vlan tunnel info dst
    metadata. This enables bridge driver to map vlan to tunnel_info
    at ingress and egress. It uses the kernel dst_metadata infrastructure.
    The initial use case is vlan to vni bridging, but the api is generic
    to extend to any tunnel_info in the future:
        - Uapi to configure/unconfigure/dump per vlan tunnel data
        - netlink functions to configure vlan and tunnel_info mapping
        - Introduces bridge port flag BR_LWT_VLAN to enable attach/detach
        dst_metadata to bridged packets on ports. off by default.
        - changes to existing code is mainly refactor some existing vlan
        handling netlink code + hooks for new vlan tunnel code
        - I have kept the vlan tunnel code isolated in separate files.
        - most of the netlink vlan tunnel code is handling of vlan-tunid
        ranges (follows the vlan range handling code). To conserve space
        vlan-tunid by default are always dumped in ranges if applicable.
    Use case:
    example use for this is a vxlan bridging gateway or vtep
    which maps vlans to vn-segments (or vnis).
    iproute2 example (patched and pruned iproute2 output to just show
    relevant fdb entries):
    example shows same host mac learnt on two vni's and
    vlan 100 maps to vni 1000, vlan 101 maps to vni 1001
    before (netdev per vni):
    $bridge fdb show | grep "00:02:00:00:00:03"
    00:02:00:00:00:03 dev vxlan1001 vlan 101 master bridge
    00:02:00:00:00:03 dev vxlan1001 dst self
    00:02:00:00:00:03 dev vxlan1000 vlan 100 master bridge
    00:02:00:00:00:03 dev vxlan1000 dst self
    after this patch with collect metdata in bridged mode (single netdev):
    $bridge fdb show | grep "00:02:00:00:00:03"
    00:02:00:00:00:03 dev vxlan0 vlan 101 master bridge
    00:02:00:00:00:03 dev vxlan0 src_vni 1001 dst self
    00:02:00:00:00:03 dev vxlan0 vlan 100 master bridge
    00:02:00:00:00:03 dev vxlan0 src_vni 1000 dst self
    CC: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Signed-off-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>