diff --git a/.gitmodules b/.gitmodules index 58ec72d5..acb88c3e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -70,3 +70,6 @@ [submodule "vendor/github.com/coreos/go-iptables"] path = vendor/github.com/coreos/go-iptables url = https://github.com/coreos/go-iptables +[submodule "vendor/github.com/j-keck/arping"] + path = vendor/github.com/j-keck/arping + url = https://github.com/j-keck/arping diff --git a/plugin/net/cni.go b/plugin/net/cni.go index 8d529b10..3682a721 100644 --- a/plugin/net/cni.go +++ b/plugin/net/cni.go @@ -10,6 +10,7 @@ import ( "github.com/appc/cni/pkg/ipam" "github.com/appc/cni/pkg/skel" "github.com/appc/cni/pkg/types" + "github.com/j-keck/arping" "github.com/vishvananda/netlink" "github.com/vishvananda/netns" weaveapi "github.com/weaveworks/weave/api" @@ -151,6 +152,7 @@ func setupGuestIP4(origName, name string, ipnet net.IPNet, gw net.IP, routes []t if err = netlink.AddrAdd(guest, &netlink.Addr{IPNet: &ipnet}); err != nil { return fmt.Errorf("failed to add IP address to %q: %v", name, err) } + arping.GratuitousArpOverIfaceByName(ipnet.IP, name) for _, r := range routes { if r.GW != nil { err = addRoute(guest, netlink.SCOPE_UNIVERSE, &r.Dst, r.GW) diff --git a/vendor/github.com/j-keck/arping b/vendor/github.com/j-keck/arping new file mode 160000 index 00000000..af9a9003 --- /dev/null +++ b/vendor/github.com/j-keck/arping @@ -0,0 +1 @@ +Subproject commit af9a9003cfd88231902ab8959023d743f4ea93d7