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 <t...@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 _______________________________________________ Babel-users mailing list Babel-users@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/babel-users