Commit c08f4a9b authored by Julien Muchembled's avatar Julien Muchembled

New -F option not to enable forwarding at startup

To be pushed upstream.
parent 1ba29b3e
...@@ -101,7 +101,7 @@ int ...@@ -101,7 +101,7 @@ int
main(int argc, char **argv) main(int argc, char **argv)
{ {
struct sockaddr_in6 sin6; struct sockaddr_in6 sin6;
int rc, fd, i, opt; int rc, fd, i, opt, setup = 2;
time_t expiry_time, source_expiry_time, kernel_dump_time; time_t expiry_time, source_expiry_time, kernel_dump_time;
const char **config_files = NULL; const char **config_files = NULL;
int num_config_files = 0; int num_config_files = 0;
...@@ -125,7 +125,7 @@ main(int argc, char **argv) ...@@ -125,7 +125,7 @@ main(int argc, char **argv)
change_smoothing_half_life(4); change_smoothing_half_life(4);
while(1) { while(1) {
opt = getopt(argc, argv, "m:p:h:H:i:k:A:sruS:d:g:lwz:M:t:T:c:C:DL:I:"); opt = getopt(argc, argv, "m:p:h:H:i:k:A:sruS:d:g:lwz:M:t:T:c:C:DL:I:F");
if(opt < 0) if(opt < 0)
break; break;
...@@ -260,6 +260,9 @@ main(int argc, char **argv) ...@@ -260,6 +260,9 @@ main(int argc, char **argv)
case 'I': case 'I':
pidfile = optarg; pidfile = optarg;
break; break;
case 'F':
setup = 1;
break;
default: default:
goto usage; goto usage;
} }
...@@ -364,7 +367,7 @@ main(int argc, char **argv) ...@@ -364,7 +367,7 @@ main(int argc, char **argv)
close(pfd); close(pfd);
} }
rc = kernel_setup(1); rc = kernel_setup(setup);
if(rc < 0) { if(rc < 0) {
fprintf(stderr, "kernel_setup failed.\n"); fprintf(stderr, "kernel_setup failed.\n");
goto fail_pid; goto fail_pid;
...@@ -818,7 +821,7 @@ main(int argc, char **argv) ...@@ -818,7 +821,7 @@ main(int argc, char **argv)
" " " "
"[-k metric] [-A metric] [-s] [-l] [-w] [-r] [-u] [-g port]\n" "[-k metric] [-A metric] [-s] [-l] [-w] [-r] [-u] [-g port]\n"
" " " "
"[-t table] [-T table] [-c file] [-C statement]\n" "[-F] [-t table] [-T table] [-c file] [-C statement]\n"
" " " "
"[-d level] [-D] [-L logfile] [-I pidfile]\n" "[-d level] [-D] [-L logfile] [-I pidfile]\n"
" " " "
......
...@@ -99,6 +99,11 @@ Do not flush unfeasible (useless) routes. This is useful in order to ...@@ -99,6 +99,11 @@ Do not flush unfeasible (useless) routes. This is useful in order to
announce more information to a front-end (see announce more information to a front-end (see
.BR \-g ). .BR \-g ).
.TP .TP
.B \-F
Assume forwarding is already set, or not wanted. By not touching
net.*.conf.all.forwarding at startup, it is also useful to prevent the
kernel from removing a default IPv6 route provided by autoconfiguration.
.TP
.BI \-d " level" .BI \-d " level"
Debug level. A value of 1 requests a routing table dump at every Debug level. A value of 1 requests a routing table dump at every
iteration through the daemon's main loop. A value of 2 additionally iteration through the daemon's main loop. A value of 2 additionally
......
...@@ -502,32 +502,33 @@ kernel_setup(int setup) ...@@ -502,32 +502,33 @@ kernel_setup(int setup)
} }
nl_setup = 1; nl_setup = 1;
old_forwarding = read_proc("/proc/sys/net/ipv6/conf/all/forwarding"); if(setup > 1) {
if(old_forwarding < 0) { old_forwarding = read_proc("/proc/sys/net/ipv6/conf/all/forwarding");
perror("Couldn't read forwarding knob."); if(old_forwarding < 0) {
return -1; perror("Couldn't read forwarding knob.");
} return -1;
}
rc = write_proc("/proc/sys/net/ipv6/conf/all/forwarding", 1); rc = write_proc("/proc/sys/net/ipv6/conf/all/forwarding", 1);
if(rc < 0) { if(rc < 0) {
perror("Couldn't write forwarding knob."); perror("Couldn't write forwarding knob.");
return -1; return -1;
} }
old_ipv4_forwarding = old_ipv4_forwarding =
read_proc("/proc/sys/net/ipv4/conf/all/forwarding"); read_proc("/proc/sys/net/ipv4/conf/all/forwarding");
if(old_ipv4_forwarding < 0) { if(old_ipv4_forwarding < 0) {
perror("Couldn't read IPv4 forwarding knob."); perror("Couldn't read IPv4 forwarding knob.");
return -1; return -1;
} }
rc = write_proc("/proc/sys/net/ipv4/conf/all/forwarding", 1); rc = write_proc("/proc/sys/net/ipv4/conf/all/forwarding", 1);
if(rc < 0) { if(rc < 0) {
perror("Couldn't write IPv4 forwarding knob."); perror("Couldn't write IPv4 forwarding knob.");
return -1; return -1;
}
} }
old_accept_redirects = old_accept_redirects =
read_proc("/proc/sys/net/ipv6/conf/all/accept_redirects"); read_proc("/proc/sys/net/ipv6/conf/all/accept_redirects");
if(old_accept_redirects < 0) { if(old_accept_redirects < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment