Fix namespacing
This commit is contained in:
parent
88ad00ae93
commit
9bdaf13797
101
main.go
101
main.go
@ -14,7 +14,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
PluginName = "mycelium-cni"
|
||||
PluginName = "mycelium-cni"
|
||||
MyceliumInterface = "mycelium"
|
||||
)
|
||||
|
||||
@ -194,52 +194,73 @@ func configureContainerInterface(containerNS netns.NsHandle, ifName string, cont
|
||||
if err := netns.Set(containerNS); err != nil {
|
||||
return err
|
||||
}
|
||||
// Get the interface
|
||||
link, err := netlink.LinkByName(ifName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Get the interface
|
||||
link, err := netlink.LinkByName(ifName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Bring interface up
|
||||
if err := netlink.LinkSetUp(link); err != nil {
|
||||
return err
|
||||
}
|
||||
// Bring interface up
|
||||
if err := netlink.LinkSetUp(link); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Add IP address
|
||||
addr := &netlink.Addr{
|
||||
IPNet: &net.IPNet{
|
||||
IP: containerIP,
|
||||
Mask: net.CIDRMask(64, 128),
|
||||
// Add IP address
|
||||
addr := &netlink.Addr{
|
||||
IPNet: &net.IPNet{
|
||||
IP: containerIP,
|
||||
Mask: net.CIDRMask(64, 128),
|
||||
},
|
||||
}
|
||||
if err := netlink.AddrAdd(link, addr); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Switch to main namespace to get host veth address
|
||||
if err := netns.Set(originalNS); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Get host veth link-local address
|
||||
hostVeth, err := netlink.LinkByName(hostVethName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
hostAddrs, err := netlink.AddrList(hostVeth, netlink.FAMILY_V6)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var hostLLAddr net.IP
|
||||
for _, addr := range hostAddrs {
|
||||
if addr.IP.IsLinkLocalUnicast() {
|
||||
hostLLAddr = addr.IP
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Switch back to container namespace to add route
|
||||
if err := netns.Set(containerNS); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if hostLLAddr != nil {
|
||||
// Add route to Mycelium network via host veth
|
||||
route := &netlink.Route{
|
||||
Dst: &net.IPNet{
|
||||
IP: net.ParseIP("400::"),
|
||||
Mask: net.CIDRMask(7, 128),
|
||||
},
|
||||
Gw: hostLLAddr,
|
||||
LinkIndex: link.Attrs().Index,
|
||||
}
|
||||
if err := netlink.AddrAdd(link, addr); err != nil {
|
||||
if err := netlink.RouteAdd(route); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Get host veth link-local address for routing
|
||||
hostVeth, err := netlink.LinkByName(hostVethName)
|
||||
if err == nil {
|
||||
hostAddrs, err := netlink.AddrList(hostVeth, netlink.FAMILY_V6)
|
||||
if err == nil {
|
||||
for _, addr := range hostAddrs {
|
||||
if addr.IP.IsLinkLocalUnicast() {
|
||||
// Add route to Mycelium network via host veth
|
||||
route := &netlink.Route{
|
||||
Dst: &net.IPNet{
|
||||
IP: net.ParseIP("400::"),
|
||||
Mask: net.CIDRMask(7, 128),
|
||||
},
|
||||
Gw: addr.IP,
|
||||
LinkIndex: link.Attrs().Index,
|
||||
}
|
||||
netlink.RouteAdd(route)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func configureHostInterface(hostVeth netlink.Link, containerIP net.IP) error {
|
||||
|
Loading…
Reference in New Issue
Block a user