clatd - wait for SIGTERM before terminating
Example log from tests:
...
04-01 04:12:22.246 4699 4699 I clatd : Starting clat version 1.4 on netdd54bd mark=0xfffdd plat=2001:db8:cafe:f00d:1:2:: v4=192.0.0.4 v6=2001:db8:1:2:841b:2681:290a:d5d8
04-01 04:12:22.247 4699 4699 I clatd : Using ring buffer with 656 frames (1048576 bytes) at 0xe9883000
04-01 04:12:22.248 4699 4699 W clatd : ipv4 mtu is 1472
04-01 04:12:22.248 4699 4699 I clatd : Using IPv4 address 192.0.0.4 on v4-netdd54bd
04-01 04:12:22.268 322 322 E ClatdController: clatd pid=4699 already started on netdd54bd
04-01 04:12:22.270 4699 4699 I clatd : Using IPv6 address 2001:db8:1:2:841b:2681:290a:d5d8 on netdd54bd
04-01 04:12:22.404 4699 4699 I clatd : Shutting down clat on netdd54bd
04-01 04:12:22.427 4699 4699 I clatd : Clatd on netdd54bd already received SIGTERM
...
Bug: 181601458
Test: atest, TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: If6458fb4fd1d611992774e9ae5ec324162ab0629
diff --git a/main.c b/main.c
index bfcad48..52e22ac 100644
--- a/main.c
+++ b/main.c
@@ -148,5 +148,16 @@
logmsg(ANDROID_LOG_INFO, "Shutting down clat on %s", uplink_interface);
del_anycast_address(tunnel.write_fd6, &Global_Clatd_Config.ipv6_local_subnet);
+ close(tunnel.write_fd6);
+ close(tunnel.read_fd6);
+ close(tunnel.fd4);
+
+ if (running) {
+ logmsg(ANDROID_LOG_INFO, "Clatd on %s waiting for SIGTERM", uplink_interface);
+ while (running) sleep(60);
+ logmsg(ANDROID_LOG_INFO, "Clatd on %s received SIGTERM", uplink_interface);
+ } else {
+ logmsg(ANDROID_LOG_INFO, "Clatd on %s already received SIGTERM", uplink_interface);
+ }
return 0;
}