netns: add support for specifying network namespace by path

This commit is contained in:
ginuerzh 2024-07-08 10:59:03 +08:00
parent 13c9e3ba97
commit 949c98adc0
2 changed files with 23 additions and 6 deletions

View File

@ -175,9 +175,15 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
}
defer netns.Set(originNs)
ns, err := netns.GetFromName(netnsIn)
var ns netns.NsHandle
if strings.HasPrefix(netnsIn, "/") {
ns, err = netns.GetFromPath(netnsIn)
} else {
ns, err = netns.GetFromName(netnsIn)
}
if err != nil {
return nil, fmt.Errorf("netns.GetFromName(%s): %v", netnsIn, err)
return nil, fmt.Errorf("netns.Get(%s): %v", netnsIn, err)
}
defer ns.Close()

View File

@ -5,6 +5,7 @@ import (
"fmt"
"net"
"runtime"
"strings"
"syscall"
"github.com/vishvananda/netns"
@ -48,9 +49,14 @@ func (lc *ListenConfig) Listen(ctx context.Context, network, address string) (ne
}
defer netns.Set(originNs)
ns, err := netns.GetFromName(lc.Netns)
var ns netns.NsHandle
if strings.HasPrefix(lc.Netns, "/") {
ns, err = netns.GetFromPath(lc.Netns)
} else {
ns, err = netns.GetFromName(lc.Netns)
}
if err != nil {
return nil, fmt.Errorf("netns.GetFromName(%s): %v", lc.Netns, err)
return nil, fmt.Errorf("netns.Get(%s): %v", lc.Netns, err)
}
defer ns.Close()
@ -73,9 +79,14 @@ func (lc *ListenConfig) ListenPacket(ctx context.Context, network, address strin
}
defer netns.Set(originNs)
ns, err := netns.GetFromName(lc.Netns)
var ns netns.NsHandle
if strings.HasPrefix(lc.Netns, "/") {
ns, err = netns.GetFromPath(lc.Netns)
} else {
ns, err = netns.GetFromName(lc.Netns)
}
if err != nil {
return nil, fmt.Errorf("netns.GetFromName(%s): %v", lc.Netns, err)
return nil, fmt.Errorf("netns.Get(%s): %v", lc.Netns, err)
}
defer ns.Close()