nat46: Delete 464xlat device when pause is interrupted by SIGTERM
This commit is contained in:
parent
e74055ba8f
commit
b508f93679
1 changed files with 12 additions and 0 deletions
|
@ -23,6 +23,10 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
|
||||||
|
static void sighandler(__attribute__((unused)) int signal)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, const char *argv[])
|
int main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
char buf[INET6_ADDRSTRLEN], prefix[INET6_ADDRSTRLEN + 4];
|
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")))
|
if (!argv[3] || !argv[4] || !(fp = fopen(buf, "wx")))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
signal(SIGTERM, sighandler);
|
||||||
|
|
||||||
prefix[sizeof(prefix) - 1] = 0;
|
prefix[sizeof(prefix) - 1] = 0;
|
||||||
strncpy(prefix, argv[3], sizeof(prefix) - 1);
|
strncpy(prefix, argv[3], sizeof(prefix) - 1);
|
||||||
|
|
||||||
|
@ -108,6 +114,12 @@ int main(int argc, const char *argv[])
|
||||||
chdir("/");
|
chdir("/");
|
||||||
setsid();
|
setsid();
|
||||||
pause();
|
pause();
|
||||||
|
|
||||||
|
nat46 = fopen("/proc/net/nat46/control", "w");
|
||||||
|
if (nat46) {
|
||||||
|
fprintf(nat46, "del %s\n", argv[1]);
|
||||||
|
fclose(nat46);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf(fp, "%d\n", pid);
|
fprintf(fp, "%d\n", pid);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue