• Roopa Prabhu's avatar
    vxlan: support fdb and learning in COLLECT_METADATA mode · 3ad7a4b1
    Roopa Prabhu authored
    Vxlan COLLECT_METADATA mode today solves the per-vni netdev
    scalability problem in l3 networks. It expects all forwarding
    information to be present in dst_metadata. This patch series
    enhances collect metadata mode to include the case where only
    vni is present in dst_metadata, and the vxlan driver can then use
    the rest of the forwarding information datbase to make forwarding
    decisions. There is no change to default COLLECT_METADATA
    behaviour. These changes only apply to COLLECT_METADATA when
    used with the bridging use-case with a special dst_metadata
    tunnel info flag (eg: where vxlan device is part of a bridge).
    For all this to work, the vxlan driver will need to now support a
    single fdb table hashed by mac + vni. This series essentially makes
    this happen.
    
    use-case and workflow:
    vxlan collect metadata device participates in bridging vlan
    to vn-segments. Bridge driver above the vxlan device,
    sends the vni corresponding to the vlan in the dst_metadata.
    vxlan driver will lookup forwarding database with (mac + vni)
    for the required remote destination information to forward the
    packet.
    
    Changes introduced by this patch:
        - allow learning and forwarding database state in vxlan netdev in
          COLLECT_METADATA mode. Current behaviour is not changed
          by default. tunnel info flag IP_TUNNEL_INFO_BRIDGE is used
          to support the new bridge friendly mode.
        - A single fdb table hashed by (mac, vni) to allow fdb entries with
          multiple vnis in the same fdb table
        - rx path already has the vni
        - tx path expects a vni in the packet with dst_metadata
        - prior to this series, fdb remote_dsts carried remote vni and
          the vxlan device carrying the fdb table represented the
          source vni. With the vxlan device now representing multiple vnis,
          this patch adds a src vni attribute to the fdb entry. The remote
          vni already uses NDA_VNI attribute. This patch introduces
          NDA_SRC_VNI netlink attribute to represent the src vni in a multi
          vni fdb table.
    
    iproute2 example (patched and pruned iproute2 output to just show
    relevant fdb entries):
    example shows same host mac learnt on two vni's.
    
    before (netdev per vni):
    $bridge fdb show | grep "00:02:00:00:00:03"
    00:02:00:00:00:03 dev vxlan1001 dst 12.0.0.8 self
    00:02:00:00:00:03 dev vxlan1000 dst 12.0.0.8 self
    
    after this patch with collect metadata in bridged mode (single netdev):
    $bridge fdb show | grep "00:02:00:00:00:03"
    00:02:00:00:00:03 dev vxlan0 src_vni 1001 dst 12.0.0.8 self
    00:02:00:00:00:03 dev vxlan0 src_vni 1000 dst 12.0.0.8 self
    Signed-off-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3ad7a4b1
vxlan.c 86.9 KB