From 293eca3127b682fc9364e8f5d70b4eef77a77f4d Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Mon, 15 Oct 2012 15:45:57 +0400 Subject: [PATCH] sk: Support SO_NO_CHECK option Signed-off-by: Pavel Emelyanov --- protobuf/sk-opts.proto | 1 + sockets.c | 9 +++++++++ test/zdtm/live/static/sock_opts00.c | 3 ++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/protobuf/sk-opts.proto b/protobuf/sk-opts.proto index ebf61a759..4b98e3273 100644 --- a/protobuf/sk-opts.proto +++ b/protobuf/sk-opts.proto @@ -14,4 +14,5 @@ message sk_opts_entry { optional bool so_passcred = 11; optional bool so_passsec = 12; optional bool so_dontroute = 13; + optional bool so_no_check = 14; } diff --git a/sockets.c b/sockets.c index c1e4cc37e..9ffe7455b 100644 --- a/sockets.c +++ b/sockets.c @@ -105,6 +105,11 @@ int restore_socket_opts(int sk, SkOptsEntry *soe) pr_debug("\tset dontroute for socket\n"); ret |= restore_opt(sk, SOL_SOCKET, SO_DONTROUTE, &val); } + if (soe->has_so_no_check && soe->so_no_check) { + val = 1; + pr_debug("\tset no_check for socket\n"); + ret |= restore_opt(sk, SOL_SOCKET, SO_NO_CHECK, &val); + } tv.tv_sec = soe->so_snd_tmo_sec; tv.tv_usec = soe->so_snd_tmo_usec; @@ -175,6 +180,10 @@ int dump_socket_opts(int sk, SkOptsEntry *soe) soe->has_so_dontroute = true; soe->so_dontroute = val ? true : false; + ret |= dump_opt(sk, SOL_SOCKET, SO_NO_CHECK, &val); + soe->has_so_no_check = true; + soe->so_no_check = val ? true : false; + return ret; } diff --git a/test/zdtm/live/static/sock_opts00.c b/test/zdtm/live/static/sock_opts00.c index 5df515b36..c360aa93e 100644 --- a/test/zdtm/live/static/sock_opts00.c +++ b/test/zdtm/live/static/sock_opts00.c @@ -12,7 +12,7 @@ const char *test_author = "Pavel Emelyanov "; #define TEST_PORT 59687 #define TEST_ADDR INADDR_ANY -#define NOPTS 6 +#define NOPTS 7 int main(int argc, char ** argv) { @@ -25,6 +25,7 @@ int main(int argc, char ** argv) vname[3] = SO_PASSCRED; vname[4] = SO_PASSSEC; vname[5] = SO_DONTROUTE; + vname[6] = SO_NO_CHECK; test_init(argc, argv);