Skip to content

Commit

Permalink
Merge pull request #809 from squeed/bridge-refresh-mac
Browse files Browse the repository at this point in the history
bridge: refresh host-veth mac after port add
  • Loading branch information
dcbw authored Jan 16, 2023
2 parents 0924b71 + 2c4c27e commit c4d24e8
Showing 1 changed file with 25 additions and 20 deletions.
45 changes: 25 additions & 20 deletions plugins/main/bridge/bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@ func loadNetConf(bytes []byte, envArgs string) (*NetConf, string, error) {

// calcGateways processes the results from the IPAM plugin and does the
// following for each IP family:
// - Calculates and compiles a list of gateway addresses
// - Adds a default route if needed
// - Calculates and compiles a list of gateway addresses
// - Adds a default route if needed
func calcGateways(result *current.Result, n *NetConf) (*gwInfo, *gwInfo, error) {

gwsV4 := &gwInfo{}
Expand Down Expand Up @@ -517,24 +517,6 @@ func cmdAdd(args *skel.CmdArgs) error {
return err
}

// check bridge port state
retries := []int{0, 50, 500, 1000, 1000}
for idx, sleep := range retries {
time.Sleep(time.Duration(sleep) * time.Millisecond)

hostVeth, err := netlink.LinkByName(hostInterface.Name)
if err != nil {
return err
}
if hostVeth.Attrs().OperState == netlink.OperUp {
break
}

if idx == len(retries)-1 {
return fmt.Errorf("bridge port in error state: %s", hostVeth.Attrs().OperState)
}
}

if n.IsGW {
var firstV4Addr net.IP
var vlanInterface *current.Interface
Expand Down Expand Up @@ -601,6 +583,29 @@ func cmdAdd(args *skel.CmdArgs) error {
}
}

var hostVeth netlink.Link

// check bridge port state
retries := []int{0, 50, 500, 1000, 1000}
for idx, sleep := range retries {
time.Sleep(time.Duration(sleep) * time.Millisecond)

hostVeth, err = netlink.LinkByName(hostInterface.Name)
if err != nil {
return err
}
if hostVeth.Attrs().OperState == netlink.OperUp {
break
}

if idx == len(retries)-1 {
return fmt.Errorf("bridge port in error state: %s", hostVeth.Attrs().OperState)
}
}

// In certain circumstances, the host-side of the veth may change addrs
hostInterface.Mac = hostVeth.Attrs().HardwareAddr.String()

// Refetch the bridge since its MAC address may change when the first
// veth is added or after its IP address is set
br, err = bridgeByName(n.BrName)
Expand Down

0 comments on commit c4d24e8

Please sign in to comment.