summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Dedecker2015-04-16 13:08:18 +0000
committerHans Dedecker2015-04-16 13:08:18 +0000
commitb508f93679d5e05e5d0940439afbf7acbf53ee03 (patch)
treeeb1aa093f0fd33c74bc2adc5881025c752b67969
parente74055ba8f43c551cbdcad68ea9aed08a97d6bcd (diff)
downloadrouting-b508f93679d5e05e5d0940439afbf7acbf53ee03.tar.gz
nat46: Delete 464xlat device when pause is interrupted by SIGTERM
-rw-r--r--nat46/src/464xlatcfg.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/nat46/src/464xlatcfg.c b/nat46/src/464xlatcfg.c
index dfce9d7..1d9466e 100644
--- a/nat46/src/464xlatcfg.c
+++ b/nat46/src/464xlatcfg.c
@@ -23,6 +23,10 @@
#include <stdio.h>
#include <netdb.h>
+static void sighandler(__attribute__((unused)) int signal)
+{
+}
+
int main(int argc, const char *argv[])
{
char buf[INET6_ADDRSTRLEN], prefix[INET6_ADDRSTRLEN + 4];
@@ -48,6 +52,8 @@ int main(int argc, const char *argv[])
if (!argv[3] || !argv[4] || !(fp = fopen(buf, "wx")))
return 1;
+ signal(SIGTERM, sighandler);
+
prefix[sizeof(prefix) - 1] = 0;
strncpy(prefix, argv[3], sizeof(prefix) - 1);
@@ -108,6 +114,12 @@ int main(int argc, const char *argv[])
chdir("/");
setsid();
pause();
+
+ nat46 = fopen("/proc/net/nat46/control", "w");
+ if (nat46) {
+ fprintf(nat46, "del %s\n", argv[1]);
+ fclose(nat46);
+ }
} else {
fprintf(fp, "%d\n", pid);
}