From 7c979d6725071c53ec0aaa9ac8ca3d190e9f37ed Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 17 Sep 2014 15:44:34 +0100 Subject: [PATCH] Remove veth and/or netns symlink if interface configuration fails part-way through --- weaver/weave | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/weaver/weave b/weaver/weave index 8ba2b3ac..4e76309a 100755 --- a/weaver/weave +++ b/weaver/weave @@ -117,19 +117,28 @@ configure_container_networking() { [ -f /var/run/netns/$NSPID ] && rm -f /var/run/netns/$NSPID ln -s /proc/$NSPID/ns/net /var/run/netns/$NSPID + EXITCODE=1 LOCAL_IFNAME="v${CONTAINER_IFNAME}pl${NSPID}" GUEST_IFNAME="v${CONTAINER_IFNAME}pg${NSPID}" - ip link add name $LOCAL_IFNAME mtu $MTU type veth peer name $GUEST_IFNAME mtu $MTU - ip link set $LOCAL_IFNAME master $BRIDGE - ip link set $LOCAL_IFNAME up - ip link set $GUEST_IFNAME netns $NSPID - ip netns exec $NSPID ip link set $GUEST_IFNAME name $CONTAINER_IFNAME - ip netns exec $NSPID ip addr add $2 dev $CONTAINER_IFNAME - ip netns exec $NSPID ip link set $CONTAINER_IFNAME up - - check_command_and_run ethtool ip netns exec $NSPID ethtool -K $3 tx off >/dev/null + if ip link add name $LOCAL_IFNAME mtu $MTU type veth peer name $GUEST_IFNAME mtu $MTU ; then + if ip link set $LOCAL_IFNAME master $BRIDGE && \ + ip link set $LOCAL_IFNAME up && \ + ip link set $GUEST_IFNAME netns $NSPID + then + ip netns exec $NSPID ip link set $GUEST_IFNAME name $CONTAINER_IFNAME && \ + ip netns exec $NSPID ip addr add $2 dev $CONTAINER_IFNAME && \ + ip netns exec $NSPID ip link set $CONTAINER_IFNAME up && \ + $(check_command_and_run ethtool ip netns exec $NSPID ethtool -K $3 tx off >/dev/null) && \ + EXITCODE=0 + else + # failed before we assigned the veth to the container's namespace - delete it + ip link delete $LOCAL_IFNAME type veth || true + fi + fi [ -f /var/run/netns/$NSPID ] && rm -f /var/run/netns/$NSPID + + exit $EXITCODE } case "$COMMAND" in