Skip to content

Commit

Permalink
Merge pull request #56 from ZeehMn/master
Browse files Browse the repository at this point in the history
support gratuitous_arp_request
  • Loading branch information
chenchun committed Apr 10, 2020
2 parents fb298b4 + 556e879 commit ce883dc
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 8 deletions.
2 changes: 1 addition & 1 deletion cni/k8s-sriov/k8s_sriov.go
Expand Up @@ -92,7 +92,7 @@ func cmdAdd(args *skel.CmdArgs) error {
}
//send Gratuitous ARP to let switch knows IP floats onto this node
//ignore errors as we can't print logs and we do this as best as we can
_ = utils.SendGratuitousARP(args.IfName, result020.IP4.IP.IP.String(), args.Netns)
_ = utils.SendGratuitousARP(args.IfName, result020.IP4.IP.IP.String(), args.Netns, false)
result020.DNS = conf.DNS
return result020.Print()
}
Expand Down
8 changes: 4 additions & 4 deletions cni/k8s-vlan/k8s_vlan.go
Expand Up @@ -96,7 +96,7 @@ func setupNetwork(result020s []*t020.Result, vlanIds []uint16, args *skel.CmdArg
//send Gratuitous ARP to let switch knows IP floats onto this node
//ignore errors as we can't print logs and we do this as best as we can
if d.PureMode() {
_ = utils.SendGratuitousARP(d.Device, result020s[0].IP4.IP.IP.String(), "")
_ = utils.SendGratuitousARP(d.Device, result020s[0].IP4.IP.IP.String(), "", d.GratuitousArpRequest)
}
return nil
}
Expand All @@ -108,7 +108,7 @@ func setupMacvlan(result *t020.Result, vlanId uint16, args *skel.CmdArgs) error
if err := utils.MacVlanConnectsHostWithContainer(result, args, d.DeviceIndex); err != nil {
return err
}
_ = utils.SendGratuitousARP(args.IfName, result.IP4.IP.IP.String(), args.Netns)
_ = utils.SendGratuitousARP(args.IfName, result.IP4.IP.IP.String(), args.Netns, d.GratuitousArpRequest)
return nil
}

Expand All @@ -119,7 +119,7 @@ func setupIPVlan(result *t020.Result, vlanId uint16, args *skel.CmdArgs) error {
if err := utils.IPVlanConnectsHostWithContainer(result, args, d.DeviceIndex); err != nil {
return err
}
_ = utils.SendGratuitousARP(args.IfName, result.IP4.IP.IP.String(), args.Netns)
_ = utils.SendGratuitousARP(args.IfName, result.IP4.IP.IP.String(), args.Netns, d.GratuitousArpRequest)
return nil
}

Expand All @@ -146,7 +146,7 @@ func setupVlanDevice(result020s []*t020.Result, vlanIds []uint16, args *skel.Cmd
if err := utils.VethConnectsHostWithContainer(result020, args, bridgeName, suffix); err != nil {
return err
}
_ = utils.SendGratuitousARP(args.IfName, result020s[0].IP4.IP.IP.String(), args.Netns)
_ = utils.SendGratuitousARP(args.IfName, result020s[0].IP4.IP.IP.String(), args.Netns, d.GratuitousArpRequest)
}
return nil
}
Expand Down
4 changes: 3 additions & 1 deletion pkg/network/vlan/vlan.go
Expand Up @@ -19,13 +19,13 @@ package vlan
import (
"encoding/json"
"fmt"
"github.com/vishvananda/netlink/nl"
"net"
"strings"
"sync"

"github.com/containernetworking/cni/pkg/types"
"github.com/vishvananda/netlink"
"github.com/vishvananda/netlink/nl"
"tkestack.io/galaxy/pkg/network"
"tkestack.io/galaxy/pkg/utils"
)
Expand Down Expand Up @@ -61,6 +61,8 @@ type NetConf struct {
BridgeNamePrefix string `json:"bridge_name_prefix"`

VlanNamePrefix string `json:"vlan_name_prefix"`

GratuitousArpRequest bool `json:"gratuitous_arp_request"`
}

func (d *VlanDriver) LoadConf(bytes []byte) (*NetConf, error) {
Expand Down
11 changes: 9 additions & 2 deletions pkg/utils/utils.go
Expand Up @@ -302,12 +302,19 @@ func VethConnectsHostWithContainer(result *t020.Result, args *skel.CmdArgs, brid
return nil
}

func SendGratuitousARP(dev, ip, nns string) error {
func SendGratuitousARP(dev, ip, nns string, useArpRequest bool) error {
arping, err := exec.LookPath("arping")
if err != nil {
return fmt.Errorf("unable to locate arping")
}
command := exec.Command(arping, "-c", "2", "-A", "-I", dev, ip)

var command *exec.Cmd
if useArpRequest {
command = exec.Command(arping, "-c", "2", "-U", "-I", dev, ip)
} else {
command = exec.Command(arping, "-c", "2", "-A", "-I", dev, ip)
}

if nns == "" {
_, err = command.CombinedOutput()
return err
Expand Down

0 comments on commit ce883dc

Please sign in to comment.