func modeFromString(s string) (netlink.IPVlanMode, error) {
switch s {
- case "":
- return netlink.IPVLAN_MODE_L2, nil
- case "l2":
+ case "", "l2":
return netlink.IPVLAN_MODE_L2, nil
case "l3":
return netlink.IPVLAN_MODE_L3, nil
return fmt.Errorf("failed to lookup master %q: %v", conf.Master, err)
}
+ // due to kernel bug we have to create with tmpname or it might
+ // collide with the name on the host and error out
+ tmpName, err := ip.RandomVethName()
+ if err != nil {
+ return err
+ }
+
mv := &netlink.IPVlan{
LinkAttrs: netlink.LinkAttrs{
MTU: conf.MTU,
return fmt.Errorf("failed to create ipvlan: %v", err)
}
- return err
+ return ns.WithNetNS(netns, func(_ *os.File) error {
+ err := renameLink(tmpName, ifName)
+ if err != nil {
+ return fmt.Errorf("failed to rename ipvlan to %q: %v", ifName, err)
+ }
+ return nil
+ })
}
func cmdAdd(args *skel.CmdArgs) error {
}
defer netns.Close()
- tmpName, err := ip.RandomVethName()
- if err != nil {
- return err
- }
-
- if err = createIpvlan(n, tmpName, netns); err != nil {
+ if err = createIpvlan(n, args.IfName, netns); err != nil {
return err
}
}
err = ns.WithNetNS(netns, func(_ *os.File) error {
- err := renameLink(tmpName, args.IfName)
- if err != nil {
- return fmt.Errorf("failed to rename ipvlan to %q: %v", args.IfName, err)
- }
-
return plugin.ConfigureIface(args.IfName, result)
})
if err != nil {
func modeFromString(s string) (netlink.MacvlanMode, error) {
switch s {
- case "":
+ case "", "bridge":
return netlink.MACVLAN_MODE_BRIDGE, nil
case "private":
return netlink.MACVLAN_MODE_PRIVATE, nil
case "vepa":
return netlink.MACVLAN_MODE_VEPA, nil
- case "bridge":
- return netlink.MACVLAN_MODE_BRIDGE, nil
case "passthru":
return netlink.MACVLAN_MODE_PASSTHRU, nil
default:
return fmt.Errorf("failed to lookup master %q: %v", conf.Master, err)
}
+ // due to kernel bug we have to create with tmpname or it might
+ // collide with the name on the host and error out
+ tmpName, err := ip.RandomVethName()
+ if err != nil {
+ return err
+ }
+
mv := &netlink.Macvlan{
LinkAttrs: netlink.LinkAttrs{
MTU: conf.MTU,
- Name: ifName,
+ Name: tmpName,
ParentIndex: m.Attrs().Index,
Namespace: netlink.NsFd(int(netns.Fd())),
},
return fmt.Errorf("failed to create macvlan: %v", err)
}
- return err
+ return ns.WithNetNS(netns, func(_ *os.File) error {
+ err := renameLink(tmpName, ifName)
+ if err != nil {
+ return fmt.Errorf("failed to rename macvlan to %q: %v", ifName, err)
+ }
+ return nil
+ })
}
func cmdAdd(args *skel.CmdArgs) error {
}
defer netns.Close()
- tmpName, err := ip.RandomVethName()
- if err != nil {
- return err
- }
-
- if err = createMacvlan(n, tmpName, netns); err != nil {
+ if err = createMacvlan(n, args.IfName, netns); err != nil {
return err
}
}
err = ns.WithNetNS(netns, func(_ *os.File) error {
- err := renameLink(tmpName, args.IfName)
- if err != nil {
- return fmt.Errorf("failed to rename macvlan to %q: %v", args.IfName, err)
- }
-
return plugin.ConfigureIface(args.IfName, result)
})
if err != nil {