• Arnd Bergmann's avatar
    macvlan: implement bridge, VEPA and private mode · 618e1b74
    Arnd Bergmann authored
    This allows each macvlan slave device to be in one
    of three modes, depending on the use case:
    
    MACVLAN_PRIVATE:
      The device never communicates with any other device
      on the same upper_dev. This even includes frames
      coming back from a reflective relay, where supported
      by the adjacent bridge.
    
    MACVLAN_VEPA:
      The new Virtual Ethernet Port Aggregator (VEPA) mode,
      we assume that the adjacent bridge returns all frames
      where both source and destination are local to the
      macvlan port, i.e. the bridge is set up as a reflective
      relay.
      Broadcast frames coming in from the upper_dev get
      flooded to all macvlan interfaces in VEPA mode.
      We never deliver any frames locally.
    
    MACVLAN_BRIDGE:
      We provide the behavior of a simple bridge between
      different macvlan interfaces on the same port. Frames
      from one interface to another one get delivered directly
      and are not sent out externally. Broadcast frames get
      flooded to all other bridge ports and to the external
      interface, but when they come back from a reflective
      relay, we don't deliver them again.
      Since we know all the MAC addresses, the macvlan bridge
      mode does not require learning or STP like the bridge
      module does.
    
    Based on an earlier patch "macvlan: Reflect macvlan packets
    meant for other macvlan devices" by Eric Biederman.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Acked-by: default avatarPatrick McHardy <kaber@trash.net>
    Cc: Eric Biederman <ebiederm@xmission.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    618e1b74
macvlan.c 19.2 KB