diff options
| author | Hans Dedecker | 2015-04-16 13:08:18 +0000 |
|---|---|---|
| committer | Hans Dedecker | 2015-04-16 13:08:18 +0000 |
| commit | b508f93679d5e05e5d0940439afbf7acbf53ee03 (patch) | |
| tree | eb1aa093f0fd33c74bc2adc5881025c752b67969 | |
| parent | e74055ba8f43c551cbdcad68ea9aed08a97d6bcd (diff) | |
| download | routing-b508f93679d5e05e5d0940439afbf7acbf53ee03.tar.gz | |
nat46: Delete 464xlat device when pause is interrupted by SIGTERM
| -rw-r--r-- | nat46/src/464xlatcfg.c | 12 |
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); } |