summaryrefslogtreecommitdiff
path: root/libpod/networking_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'libpod/networking_linux.go')
-rw-r--r--libpod/networking_linux.go28
1 files changed, 27 insertions, 1 deletions
diff --git a/libpod/networking_linux.go b/libpod/networking_linux.go
index e5f935e30..77ab97910 100644
--- a/libpod/networking_linux.go
+++ b/libpod/networking_linux.go
@@ -249,9 +249,35 @@ func (r *Runtime) teardownNetNS(ctr *Container) error {
return nil
}
+func getContainerNetNS(ctr *Container) (string, error) {
+ if ctr.state.NetNS != nil {
+ return ctr.state.NetNS.Path(), nil
+ }
+ if ctr.config.NetNsCtr != "" {
+ c, err := ctr.runtime.GetContainer(ctr.config.NetNsCtr)
+ if err != nil {
+ return "", err
+ }
+ if err = c.syncContainer(); err != nil {
+ return "", err
+ }
+ return c.state.NetNS.Path(), nil
+ }
+ return "", nil
+}
+
func getContainerNetIO(ctr *Container) (*netlink.LinkStatistics, error) {
var netStats *netlink.LinkStatistics
- err := ns.WithNetNSPath(ctr.state.NetNS.Path(), func(_ ns.NetNS) error {
+ netNSPath, netPathErr := getContainerNetNS(ctr)
+ if netPathErr != nil {
+ return nil, netPathErr
+ }
+ if netNSPath == "" {
+ // If netNSPath is empty, it was set as none, and no netNS was set up
+ // this is a valid state and thus return no error, nor any statistics
+ return nil, nil
+ }
+ err := ns.WithNetNSPath(netNSPath, func(_ ns.NetNS) error {
link, err := netlink.LinkByName(ocicni.DefaultInterfaceName)
if err != nil {
return err