From 54ff81cc40ad1aa71372359f17cbf64c322c5e67 Mon Sep 17 00:00:00 2001 From: Bastian Stender Date: Tue, 23 Jan 2018 10:50:40 +0100 Subject: [PATCH] testj1939: add omit bind option This option is needed for j1939 socket functionality test. Connects wihout bind should not work. Signed-off-by: Bastian Stender Signed-off-by: Oleksij Rempel --- testj1939.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/testj1939.c b/testj1939.c index e6a2554..f285620 100644 --- a/testj1939.c +++ b/testj1939.c @@ -39,6 +39,7 @@ static const char help_msg[] = " -c Issue connect()\n" " -p=PRIO Set priority to PRIO\n" " -b Do normal bind with SA+1 and rebind with actual SA\n" + " -o Omit bind\n" " -n Emit 64bit NAMEs in output\n" " -w[TIME] Return after TIME (default 1) seconds\n" "\n" @@ -47,7 +48,7 @@ static const char help_msg[] = "\n" ; -static const char optstring[] = "?vbs::rep:cnw::"; +static const char optstring[] = "?vbos::rep:cnw::"; static void parse_canaddr(char *spec, struct sockaddr_can *paddr) { @@ -111,6 +112,7 @@ int main(int argc, char *argv[]) int valid_peername = 0; int todo_send = 0, todo_recv = 0, todo_echo = 0, todo_prio = -1; int todo_connect = 0, todo_names = 0, todo_wait = 0, todo_rebind = 0; + int no_bind = 0; /* argument parsing */ while ((opt = getopt(argc, argv, optstring)) != -1) @@ -139,6 +141,9 @@ int main(int argc, char *argv[]) case 'b': todo_rebind = 1; break; + case 'o': + no_bind = 1; + break; case 'w': schedule_oneshot_itimer(strtod(optarg ?: "1", NULL)); signal(SIGALRM, onsigalrm); @@ -183,21 +188,24 @@ int main(int argc, char *argv[]) error(1, errno, "set priority %i", todo_prio); } - if (verbose) - fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&sockname), sizeof(sockname)); - ret = bind(sock, (void *)&sockname, sizeof(sockname)); - if (ret < 0) - error(1, errno, "bind()"); - - if (todo_rebind) { - /* rebind with actual SA */ - sockname.can_addr.j1939.addr--; + if (!no_bind) { if (verbose) fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&sockname), sizeof(sockname)); ret = bind(sock, (void *)&sockname, sizeof(sockname)); if (ret < 0) - error(1, errno, "re-bind()"); + error(1, errno, "bind()"); + + if (todo_rebind) { + /* rebind with actual SA */ + sockname.can_addr.j1939.addr--; + + if (verbose) + fprintf(stderr, "- bind(, %s, %zi);\n", libj1939_addr2str(&sockname), sizeof(sockname)); + ret = bind(sock, (void *)&sockname, sizeof(sockname)); + if (ret < 0) + error(1, errno, "re-bind()"); + } } if (todo_connect) {