func cmdAdd(args *skel.CmdArgs) error { tuningConf := TuningConf{} if err := json.Unmarshal(args.StdinData, &tuningConf); err != nil { return fmt.Errorf("failed to load netconf: %v", err) } // The directory /proc/sys/net is per network namespace. Enter in the // network namespace before writing on it. err := ns.WithNetNSPath(args.Netns, false, func(hostNS *os.File) error { for key, value := range tuningConf.SysCtl { fileName := filepath.Join("/proc/sys", strings.Replace(key, ".", "/", -1)) fileName = filepath.Clean(fileName) // Refuse to modify sysctl parameters that don't belong // to the network subsystem. if !strings.HasPrefix(fileName, "/proc/sys/net/") { return fmt.Errorf("invalid net sysctl key: %q", key) } content := []byte(value) err := ioutil.WriteFile(fileName, content, 0644) if err != nil { return err } } return nil }) if err != nil { return err } result := types.Result{} return result.Print() }
func cmdAdd(args *skel.CmdArgs) error { result := types.Result{} if err := rpcCall("DHCP.Allocate", args, &result); err != nil { return err } return result.Print() }
// Allocate acquires an IP from a DHCP server for a specified container. // The acquired lease will be maintained until Release() is called. func (d *DHCP) Allocate(args *skel.CmdArgs, result *types.Result) error { conf := types.NetConf{} if err := json.Unmarshal(args.StdinData, &conf); err != nil { return fmt.Errorf("error parsing netconf: %v", err) } clientID := args.ContainerID + "/" + conf.Name l, err := AcquireLease(clientID, args.Netns, args.IfName) if err != nil { return err } ipn, err := l.IPNet() if err != nil { l.Stop() return err } d.setLease(args.ContainerID, conf.Name, l) result.IP4 = &types.IPConfig{ IP: *ipn, Gateway: l.Gateway(), Routes: l.Routes(), } return nil }
func cmdAdd(args *skel.CmdArgs) error { args.IfName = "lo" // ignore config, this only works for loopback err := ns.WithNetNSPath(args.Netns, false, func(hostNS *os.File) error { link, err := netlink.LinkByName(args.IfName) if err != nil { return err // not tested } err = netlink.LinkSetUp(link) if err != nil { return err // not tested } return nil }) if err != nil { return err // not tested } result := types.Result{} return result.Print() }