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 <bst@pengutronix.de>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
pull/101/head
Bastian Stender 2018-01-23 10:50:40 +01:00 committed by Oleksij Rempel
parent 1ba9b86451
commit 54ff81cc40
1 changed files with 19 additions and 11 deletions

View File

@ -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) {