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,
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 {
return err
}
- if err = plugin.ConfigureIface(ifName, pr); err != nil {
- return err
- }
-
hostVethName = hostVeth.Attrs().Name
return nil
})
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)
}
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 {
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 {
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() {