fix bridge to call IPAM after link creation

This commit is contained in:
Eugene Yakubovich 2015-05-19 11:53:41 -07:00
parent 01298363ad
commit 0c3baa8ff0

View File

@ -94,7 +94,7 @@ func bridgeByName(name string) (*netlink.Bridge, error) {
return br, nil
}
func ensureBridge(brName string, mtu int, ipn *net.IPNet) (*netlink.Bridge, error) {
func ensureBridge(brName string, mtu int) (*netlink.Bridge, error) {
br := &netlink.Bridge{
LinkAttrs: netlink.LinkAttrs{
Name: brName,
@ -118,14 +118,10 @@ func ensureBridge(brName string, mtu int, ipn *net.IPNet) (*netlink.Bridge, erro
return nil, err
}
if ipn != nil {
return br, ensureBridgeAddr(br, ipn)
}
return br, nil
}
func setupVeth(netns string, br *netlink.Bridge, ifName string, mtu int, pr *plugin.Result) error {
func setupVeth(netns string, br *netlink.Bridge, ifName string, mtu int) error {
var hostVethName string
err := ns.WithNetNSPath(netns, func(hostNS *os.File) error {
@ -135,10 +131,6 @@ func setupVeth(netns string, br *netlink.Bridge, ifName string, mtu int, pr *plu
return err
}
if err = plugin.ConfigureIface(ifName, pr); err != nil {
return err
}
hostVethName = hostVeth.Attrs().Name
return nil
})
@ -165,17 +157,9 @@ func calcGatewayIP(ipn *net.IPNet) net.IP {
return ip.NextIP(nid)
}
func setupBridge(n *NetConf, ipConf *plugin.IPConfig) (*netlink.Bridge, error) {
var gwn *net.IPNet
if n.IsGW {
gwn = &net.IPNet{
IP: ipConf.Gateway,
Mask: ipConf.IP.Mask,
}
}
func setupBridge(n *NetConf) (*netlink.Bridge, error) {
// create bridge if necessary
br, err := ensureBridge(n.BrName, n.MTU, gwn)
br, err := ensureBridge(n.BrName, n.MTU)
if err != nil {
return nil, fmt.Errorf("failed to create bridge %q: %v", n.BrName, err)
}
@ -189,6 +173,15 @@ func cmdAdd(args *skel.CmdArgs) error {
return err
}
br, err := setupBridge(n)
if err != nil {
return err
}
if err = setupVeth(args.Netns, br, args.IfName, n.MTU); err != nil {
return err
}
// run the IPAM plugin and get back the config to apply
result, err := plugin.ExecAdd(n.IPAM.Type, args.StdinData)
if err != nil {
@ -203,13 +196,22 @@ func cmdAdd(args *skel.CmdArgs) error {
result.IP4.Gateway = calcGatewayIP(&result.IP4.IP)
}
br, err := setupBridge(n, result.IP4)
err = ns.WithNetNSPath(args.Netns, func(hostNS *os.File) error {
return plugin.ConfigureIface(args.IfName, result)
})
if err != nil {
return err
}
if err = setupVeth(args.Netns, br, args.IfName, n.MTU, result); err != nil {
return err
if n.IsGW {
gwn := &net.IPNet{
IP: result.IP4.Gateway,
Mask: result.IP4.IP.Mask,
}
if err = ensureBridgeAddr(br, gwn); err != nil {
return err
}
}
if n.IPMasq {
@ -228,14 +230,14 @@ func cmdDel(args *skel.CmdArgs) error {
return err
}
err = ns.WithNetNSPath(args.Netns, func(hostNS *os.File) error {
return ip.DelLinkByName(args.IfName)
})
err = plugin.ExecDel(n.IPAM.Type, args.StdinData)
if err != nil {
return err
}
return plugin.ExecDel(n.IPAM.Type, args.StdinData)
return ns.WithNetNSPath(args.Netns, func(hostNS *os.File) error {
return ip.DelLinkByName(args.IfName)
})
}
func main() {