diff --git a/pipework b/pipework index 01022db..111b8dc 100755 --- a/pipework +++ b/pipework @@ -11,6 +11,10 @@ case "$1" in DIRECT_PHYS=1 shift ;; + --macvlan-mode) + MACVLAN_MODE=1 + shift + ;; esac IFNAME=$1 @@ -153,8 +157,8 @@ CONTAINER_IFNAME=${CONTAINER_IFNAME:-eth1} exit 0 } -[ "$IFTYPE" = bridge ] && [ "$BRTYPE" = linux ] && [ "$VLAN" ] && { - die 1 "VLAN configuration currently unsupported for Linux bridge." +[ "$IFTYPE" = bridge ] && [ "$BRTYPE" = linux ] && [ "$VLAN" ] && [ -z "$MACVLAN_MODE" ] && { + die 1 "VLAN configuration currently unsupported for Linux bridge. Try --macvlan-mode." } [ "$IFTYPE" = ipoib ] && [ "$MACADDR" ] && { @@ -292,7 +296,7 @@ ln -s "/proc/$NSPID/ns/net" "/var/run/netns/$NSPID" [ "$IFTYPE" != "route" ] && [ "$IFTYPE" != "dummy" ] && [ "$IFTYPE" != "rule" ] && [ "$IFTYPE" != "tc" ] && MTU=$(ip link show "$IFNAME" | awk '{print $5}') # If it's a bridge, we need to create a veth pair -[ "$IFTYPE" = bridge ] && { +[ "$IFTYPE" = bridge ] && [ -z "$MACVLAN_MODE" ] && { if [ -z "$LOCAL_IFNAME" ]; then LOCAL_IFNAME="v${CONTAINER_IFNAME}pl${NSPID}" fi @@ -329,7 +333,7 @@ ln -s "/proc/$NSPID/ns/net" "/var/run/netns/$NSPID" } # If it's a physical interface, create a macvlan subinterface -[ "$IFTYPE" = phys ] && { +[ "$IFTYPE" = phys ] || ( [ "$IFTYPE" = bridge ] && [ ! -z "$MACVLAN_MODE" ] ) && { [ "$VLAN" ] && { [ ! -d "/sys/class/net/${IFNAME}.${VLAN}" ] && { ip link add link "$IFNAME" name "$IFNAME.$VLAN" mtu "$MTU" type vlan id "$VLAN"