]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip netns: Create /var/run/netns dir when do 'ip netns monitor'
authorvadimk <vadim4j@gmail.com>
Sun, 31 Aug 2014 19:45:29 +0000 (22:45 +0300)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 29 Sep 2014 15:53:31 +0000 (08:53 -0700)
netns monitor fails when there is no /var/run/netns dir
which might be created later while monitoring.

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
ip/ipnetns.c

index 7f829088f18d05d449c9aec865eb7433af5e65c5..90a496f7ad5acf3c841fab7035945053da282765 100644 (file)
@@ -383,6 +383,20 @@ static int netns_delete(int argc, char **argv)
        return 0;
 }
 
+static int create_netns_dir(void)
+{
+       /* Create the base netns directory if it doesn't exist */
+       if (mkdir(NETNS_RUN_DIR, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)) {
+               if (errno != EEXIST) {
+                       fprintf(stderr, "mkdir %s failed: %s\n",
+                               NETNS_RUN_DIR, strerror(errno));
+                       return -1;
+               }
+       }
+
+       return 0;
+}
+
 static int netns_add(int argc, char **argv)
 {
        /* This function creates a new network namespace and
@@ -406,14 +420,8 @@ static int netns_add(int argc, char **argv)
 
        snprintf(netns_path, sizeof(netns_path), "%s/%s", NETNS_RUN_DIR, name);
 
-       /* Create the base netns directory if it doesn't exist */
-       if (mkdir(NETNS_RUN_DIR, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)) {
-               if (errno != EEXIST) {
-                       fprintf(stderr, "mkdir %s failed: %s\n",
-                               NETNS_RUN_DIR, strerror(errno));
-                       return -1;
-               }
-       }
+       if (create_netns_dir())
+               return -1;
 
        /* Make it possible for network namespace mounts to propagate between
         * mount namespaces.  This makes it likely that a unmounting a network
@@ -476,6 +484,10 @@ static int netns_monitor(int argc, char **argv)
                        strerror(errno));
                return -1;
        }
+
+       if (create_netns_dir())
+               return -1;
+
        if (inotify_add_watch(fd, NETNS_RUN_DIR, IN_CREATE | IN_DELETE) < 0) {
                fprintf(stderr, "inotify_add_watch failed: %s\n",
                        strerror(errno));