func cmdAdd(args *skel.CmdArgs) error { conf := NetConf{} if err := json.Unmarshal(args.StdinData, &conf); err != nil { return fmt.Errorf("failed to load netconf: %v", err) } // run the IPAM plugin and get back the config to apply result, err := plugin.ExecAdd(conf.IPAM.Type, args.StdinData) if err != nil { return err } if result.IP4 == nil { return errors.New("IPAM plugin returned missing IPv4 config") } hostVethName, err := setupContainerVeth(args.Netns, args.IfName, conf.MTU, result) if err != nil { return err } if err = setupHostVeth(hostVethName, result.IP4); err != nil { return err } if conf.IPMasq { h := sha512.Sum512([]byte(args.Netns)) chain := fmt.Sprintf("CNI-%s-%x", conf.Name, h[:8]) if err = ip.SetupIPMasq(&result.IP4.IP, chain); err != nil { return err } } return plugin.PrintResult(result) }
func cmdAdd(args *skel.CmdArgs) error { n, err := loadConf(args.StdinData) if err != nil { return err } netns, err := os.Open(args.Netns) if err != nil { return fmt.Errorf("failed to open netns %q: %v", netns, err) } defer netns.Close() tmpName, err := ip.RandomVethName() if err != nil { return err } if err = createIpvlan(n, tmpName, netns); 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 { return err } if result.IP4 == nil { return errors.New("IPAM plugin returned missing IPv4 config") } 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 { return err } if n.IPMasq { chain := "CNI-" + n.Name if err = ip.SetupIPMasq(ip.Network(&result.IP4.IP), chain); err != nil { return err } } return plugin.PrintResult(result) }
func cmdAdd(args *skel.CmdArgs) error { n, err := loadNetConf(args.StdinData) if 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 { return err } if result.IP4 == nil { return errors.New("IPAM plugin returned missing IPv4 config") } if result.IP4.Gateway == nil && n.IsGW { result.IP4.Gateway = calcGatewayIP(&result.IP4.IP) } br, err := setupBridge(n, result.IP4) if err != nil { return err } if err = setupVeth(args.Netns, br, args.IfName, n.MTU, result); err != nil { return err } if n.IPMasq { chain := "CNI-" + n.Name if err = ip.SetupIPMasq(ip.Network(&result.IP4.IP), chain); err != nil { return err } } return plugin.PrintResult(result) }
func cmdAdd(args *skel.CmdArgs) error { ipamConf, err := LoadIPAMConfig(args.StdinData) if err != nil { return err } store, err := disk.New(ipamConf.Name) if err != nil { return err } defer store.Close() allocator, err := NewIPAllocator(ipamConf, store) if err != nil { return err } var ipConf *plugin.IPConfig switch ipamConf.Type { case "host-local": ipConf, err = allocator.Get(args.Netns) case "host-local-ptp": ipConf, err = allocator.GetPtP(args.Netns) default: return errors.New("Unsupported IPAM plugin type") } if err != nil { return err } return plugin.PrintResult(&plugin.Result{ IP4: ipConf, }) }