66 lines
1.4 KiB
Diff
66 lines
1.4 KiB
Diff
diff --git a/amprd.c b/amprd.c
|
|
index 4eee8d2..5a3eb99 100644
|
|
--- a/amprd.c
|
|
+++ b/amprd.c
|
|
@@ -68,6 +68,7 @@
|
|
#include "commons.h"
|
|
|
|
#define MAXPAYLOAD (2048)
|
|
+#define PIDFILE "/var/run/amprd.pid"
|
|
|
|
char *passwd = NULL;
|
|
int debug = FALSE;
|
|
@@ -83,6 +84,7 @@ uint32_t general_ampr_gw;
|
|
|
|
uint32_t myips[MYIPSIZE];
|
|
|
|
+void (*sigterm_defhnd)(int);
|
|
|
|
void on_alarm(int sig)
|
|
{
|
|
@@ -146,6 +148,16 @@ void on_hup(int sig)
|
|
verbose = FALSE;
|
|
}
|
|
|
|
+void on_term(int sig)
|
|
+{
|
|
+ signal(SIGTERM, SIG_IGN);
|
|
+
|
|
+ unlink(PIDFILE);
|
|
+
|
|
+ signal(SIGTERM, sigterm_defhnd);
|
|
+ raise(SIGTERM);
|
|
+}
|
|
+
|
|
uint32_t getip(const char *dev)
|
|
{
|
|
struct ifreq ifr;
|
|
@@ -260,6 +272,7 @@ int main(int argc, char**argv)
|
|
struct pollfd *pollfd;
|
|
int i, j, payload, best, mask, bmask;
|
|
Tunnel *tunnel;
|
|
+ FILE *pidfile;
|
|
|
|
char *ip = malloc(MAXPAYLOAD + 18); /* eth header + tcp/ip frame + checksum */
|
|
char *rcv = malloc(MAXPAYLOAD + 20); /* ip header + tcp/ip frame */
|
|
@@ -343,7 +356,6 @@ int main(int argc, char**argv)
|
|
sa.sa_handler = on_hup;
|
|
sigaction(SIGHUP, &sa, 0);
|
|
|
|
-
|
|
if (FALSE == debug)
|
|
{
|
|
pid_t fork_res = -1;
|
|
@@ -361,6 +373,12 @@ int main(int argc, char**argv)
|
|
}
|
|
}
|
|
|
|
+ sa.sa_handler = on_term;
|
|
+ sigaction(SIGTERM, &sa, 0);
|
|
+ pidfile = fopen(PIDFILE, "w");
|
|
+ fprintf(pidfile, "%d\n", (int)getpid());
|
|
+ fclose(pidfile);
|
|
+
|
|
pollfd = malloc(sizeof(struct pollfd) * (numtunnels + 1));
|
|
|
|
pollfd[0].fd = raw_socket;
|