Add network set interface in namespace by pid

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
This commit is contained in:
Michael Crosby 2014-02-08 10:03:16 -08:00
parent a5bf8abb77
commit 708c7be9d2

View file

@ -419,6 +419,38 @@ func NetworkSetMaster(iface, master *net.Interface) error {
return s.HandleAck(wb.Seq) return s.HandleAck(wb.Seq)
} }
func NetworkSetNsPid(iface *net.Interface, nspid int) error {
s, err := getNetlinkSocket()
if err != nil {
return err
}
defer s.Close()
wb := newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
msg := newIfInfomsg(syscall.AF_UNSPEC)
msg.Type = syscall.RTM_SETLINK
msg.Flags = syscall.NLM_F_REQUEST
msg.Index = int32(iface.Index)
msg.Change = 0xFFFFFFFF
wb.AddData(msg)
var (
b = make([]byte, 4)
native = nativeEndian()
)
native.PutUint32(b, uint32(nspid))
data := newRtAttr(syscall.IFLA_NET_NS_PID, b)
wb.AddData(data)
if err := s.Send(wb); err != nil {
return err
}
return s.HandleAck(wb.Seq)
}
// Add an Ip address to an interface. This is identical to: // Add an Ip address to an interface. This is identical to:
// ip addr add $ip/$ipNet dev $iface // ip addr add $ip/$ipNet dev $iface
func NetworkLinkAddIp(iface *net.Interface, ip net.IP, ipNet *net.IPNet) error { func NetworkLinkAddIp(iface *net.Interface, ip net.IP, ipNet *net.IPNet) error {