[Babel-users] [PATCH v3 2/2] Add configuration flag to skip initial kernel setup.

Toke Høiland-Jørgensen toke at toke.dk
Thu Aug 13 00:26:01 UTC 2015


This adds a configuration flag to skip kernel (sysctl) setup on daemon
startup. This can be useful if running in, e.g., a container environment
where setting sysctls are not allowed.

Signed-off-by: Toke Høiland-Jørgensen <toke at toke.dk>
---
 babeld.c         | 1 +
 babeld.h         | 1 +
 babeld.man       | 5 +++++
 configuration.c  | 3 +++
 kernel_netlink.c | 3 +++
 kernel_socket.c  | 2 ++
 6 files changed, 15 insertions(+)

diff --git a/babeld.c b/babeld.c
index 943f042..58613db 100644
--- a/babeld.c
+++ b/babeld.c
@@ -67,6 +67,7 @@ int default_wired_hello_interval = -1;
 int resend_delay = -1;
 int random_id = 0;
 int do_daemonise = 0;
+int skip_kernel_setup = 0;
 const char *logfile = NULL,
     *pidfile = "/var/run/babeld.pid",
     *state_file = "/var/lib/babel-state";
diff --git a/babeld.h b/babeld.h
index 92ce9b5..3532649 100644
--- a/babeld.h
+++ b/babeld.h
@@ -86,6 +86,7 @@ extern time_t reboot_time;
 extern int default_wireless_hello_interval, default_wired_hello_interval;
 extern int resend_delay;
 extern int random_id;
+extern int skip_kernel_setup;
 extern int do_daemonise;
 extern const char *logfile, *pidfile, *state_file;
 extern int link_detect;
diff --git a/babeld.man b/babeld.man
index ec600c2..54f27fc 100644
--- a/babeld.man
+++ b/babeld.man
@@ -253,6 +253,11 @@ This specifies whether to daemonize at startup, and is equivalent to
 the command-line option
 .BR \-D .
 .TP
+.BR skip-kernel-setup " {" true | false }
+If this flag is set, no kernel (sysctl) setup is performed on startup. This can
+be useful when running in environments where system permissions prevent setting
+kernel parameters, for instance inside a Linux container.
+.TP
 .BI state-file " filename"
 This specifies the name of the file used for preserving long-term
 information between invocations of the
diff --git a/configuration.c b/configuration.c
index 6a9c09d..52de595 100644
--- a/configuration.c
+++ b/configuration.c
@@ -691,6 +691,7 @@ parse_option(int c, gnc_t gnc, void *closure, char *token)
               strcmp(token, "link-detect") == 0 ||
               strcmp(token, "random-id") == 0 ||
               strcmp(token, "daemonise") == 0 ||
+              strcmp(token, "skip-kernel-setup") == 0 ||
               strcmp(token, "ipv6-subtrees") == 0 ||
               strcmp(token, "reflect-kernel-metric") == 0) {
         int b;
@@ -706,6 +707,8 @@ parse_option(int c, gnc_t gnc, void *closure, char *token)
             random_id = b;
         else if(strcmp(token, "daemonise") == 0)
             do_daemonise = b;
+        else if(strcmp(token, "skip-kernel-setup") == 0)
+            skip_kernel_setup = b;
         else if(strcmp(token, "ipv6-subtrees") == 0)
             has_ipv6_subtrees = b;
         else if(strcmp(token, "reflect-kernel-metric") == 0)
diff --git a/kernel_netlink.c b/kernel_netlink.c
index 208c408..1b7f145 100644
--- a/kernel_netlink.c
+++ b/kernel_netlink.c
@@ -514,6 +514,7 @@ kernel_setup(int setup)
         }
         nl_setup = 1;
 
+        if(skip_kernel_setup) return 1;
 
         for(i=0; i<NUM_SYSCTLS; i++) {
             s = &sysctl_settings[i];
@@ -541,6 +542,8 @@ kernel_setup(int setup)
         nl_command.sock = -1;
         nl_setup = 0;
 
+        if(skip_kernel_setup) return 1;
+
         for(i=0; i<NUM_SYSCTLS; i++) {
             s = &sysctl_settings[i];
             if(s->was && s->was != s->want) {
diff --git a/kernel_socket.c b/kernel_socket.c
index 24658d3..af7c458 100644
--- a/kernel_socket.c
+++ b/kernel_socket.c
@@ -214,6 +214,8 @@ kernel_setup(int setup)
     int mib[4];
     size_t datasize;
 
+    if(skip_kernel_setup) return 1;
+
     mib[0] = CTL_NET;
     mib[1] = AF_INET6;
     seq = time(NULL);
-- 
2.5.0



More information about the Babel-users mailing list