Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad990dbe authored by Andy Gospodarek's avatar Andy Gospodarek Committed by David S. Miller
Browse files

samples/bpf: run cleanup routines when receiving SIGTERM



Shahid Habib noticed that when xdp1 was killed from a different console the xdp
program was not cleaned-up properly in the kernel and it continued to forward
traffic.

Most of the applications in samples/bpf cleanup properly, but only when getting
SIGINT.  Since kill defaults to using SIGTERM, add support to cleanup when the
application receives either SIGINT or SIGTERM.

Signed-off-by: default avatarAndy Gospodarek <andy@greyhouse.net>
Reported-by: default avatarShahid Habib <shahid.habib@broadcom.com>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d2be3667
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -306,7 +306,9 @@ int main(int argc, char *argv[])
	prog_attach_iptables(argv[2]);
	if (cfg_test_traffic) {
		if (signal(SIGINT, finish) == SIG_ERR)
			error(1, errno, "register handler failed");
			error(1, errno, "register SIGINT handler failed");
		if (signal(SIGTERM, finish) == SIG_ERR)
			error(1, errno, "register SIGTERM handler failed");
		while (!test_finish) {
			print_table();
			printf("\n");
+1 −0
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ int main(int argc, char **argv)
	setrlimit(RLIMIT_MEMLOCK, &r);

	signal(SIGINT, int_exit);
	signal(SIGTERM, int_exit);

	if (load_kallsyms()) {
		printf("failed to process /proc/kallsyms\n");
+1 −0
Original line number Diff line number Diff line
@@ -180,6 +180,7 @@ int main(int argc, char **argv)
		return 1;
	}
	signal(SIGINT, int_exit);
	signal(SIGTERM, int_exit);

	/* do sampling */
	printf("Sampling at %d Hertz for %d seconds. Ctrl-C also ends.\n",
+1 −0
Original line number Diff line number Diff line
@@ -192,6 +192,7 @@ int main(int argc, char **argv)
	setrlimit(RLIMIT_MEMLOCK, &r);

	signal(SIGINT, int_exit);
	signal(SIGTERM, int_exit);

	if (load_kallsyms()) {
		printf("failed to process /proc/kallsyms\n");
+1 −0
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ int main(int ac, char **argv)
	}

	signal(SIGINT, int_exit);
	signal(SIGTERM, int_exit);

	/* start 'ping' in the background to have some kfree_skb events */
	f = popen("ping -c5 localhost", "r");
Loading