// SetLinkNetInNs configures network settings of the link in network namespace specified by PID. func (l *Link) SetLinkNetInNs(nspid int, ip net.IP, network *net.IPNet, gw *net.IP) error { origNs, _ := NetNsHandle(os.Getpid()) defer syscall.Close(int(origNs)) defer system.Setns(origNs, syscall.CLONE_NEWNET) if err := SetNetNsToPid(nspid); err != nil { return fmt.Errorf("Setting network namespace failed: %s", err) } if err := netlink.NetworkLinkAddIp(l.NetInterface(), ip, network); err != nil { return fmt.Errorf("Unable to set IP: %s in pid: %d network namespace", ip.String(), nspid) } if err := netlink.NetworkLinkUp(l.ifc); err != nil { return fmt.Errorf("Unable to bring %s interface UP: %s", l.ifc.Name, nspid) } if gw != nil { if err := netlink.AddDefaultGw(gw.String(), l.NetInterface().Name); err != nil { return fmt.Errorf("Unable to set Default gateway: %s in pid: %d network namespace", gw.String(), nspid) } } return nil }
// SetLinkIp configures the link's IP address. // It is equivalent of running: ip address add ${address}/${mask} dev ${interface name} func (l *Link) SetLinkIp(ip net.IP, network *net.IPNet) error { return netlink.NetworkLinkAddIp(l.NetInterface(), ip, network) }
// SetPeerLinkIp configures peer link's IP address func (veth *VethPair) SetPeerLinkIp(ip net.IP, nw *net.IPNet) error { return netlink.NetworkLinkAddIp(veth.peerIfc, ip, nw) }