On Wed, Oct 30, 2013 at 04:24:08PM +0100, Daniel Borkmann wrote: > On 10/27/2013 04:11 AM, Hangbin Liu wrote: > >Hi Daniel, > > > >When I run sctp_status test and set max_stream >= 10, the client will > >fail with "sendmsg: Invalid argument". Would you like to help have a > >look at this? > > > ># ./sctp_status -H 127.0.0.1 -P 9998 -h 127.0.0.1 -p 9999 -s -d 2 -M 20 > >remote:addr=127.0.0.1, port=distinct, family=2 > >local:addr=127.0.0.1, port=distinct32, family=2 > > > >Starting tests... > > socket(SOCK_STREAM, IPPROTO_SCTP) -> sk=3 > > bind(sk=3, [a:127.0.0.1,p:distinct32]) -- attempt 1/10 > > connect(sk=3) > >Client: Sending packets.(1/10) > > sendmsg(sk=3, assoc=0) 17768 bytes. > > SNDRCV(stream=1 flags=0x1 ppid=846930886) > > sendmsg(sk=3, assoc=0) 6250 bytes. > > SNDRCV(stream=2 flags=0x1 ppid=1714636915) > > sendmsg(sk=3, assoc=0) 23634 bytes. > > SNDRCV(stream=3 flags=0x1 ppid=424238335) > > sendmsg(sk=3, assoc=0) 5195 bytes. > > SNDRCV(stream=4 flags=0x1 ppid=1649760492) > > sendmsg(sk=3, assoc=0) 7978 bytes. > > SNDRCV(stream=5 flags=0x1 ppid=1189641421) > > sendmsg(sk=3, assoc=0) 22715 bytes. > > SNDRCV(stream=6 flags=0x1 ppid=1350490027) > > sendmsg(sk=3, assoc=0) 16883 bytes. > > SNDRCV(stream=7 flags=0x1 ppid=1102520059) > > sendmsg(sk=3, assoc=0) 10724 bytes. > > SNDRCV(stream=8 flags=0x1 ppid=1967513926) > > sendmsg(sk=3, assoc=0) 125 bytes. > > SNDRCV(stream=9 flags=0x1 ppid=1540383426) > > sendmsg(sk=3, assoc=0) 2133 bytes. > > SNDRCV(stream=10 flags=0x1 ppid=1303455736) > > > > *** sendmsg: Invalid argument *** > > Hangbin, the below fix should do it (it worked for you up to that point as > that is the default number of streams) ... will push that _at latest_ on Ah, I see, thanks for this patch > Sunday night as I'll be mostly on travel the next days. > > Well, looking at the code, at some point in time these tools need a fresh > start in general; those were probably just quickly clobbered together from > the very early days of lksctp. :) Yes, It looks like this tool was written for SCTP conformance testing > > diff --git a/src/apps/sctp_status.c b/src/apps/sctp_status.c > index 3a05dc4..5bb48ef 100644 > --- a/src/apps/sctp_status.c > +++ b/src/apps/sctp_status.c > @@ -675,11 +675,11 @@ int next_stream(int state, int pattern) > { > switch (pattern){ > case STREAM_PATTERN_RANDOM: > - state = rand() % (max_stream + 1); > + state = rand() % max_stream; > break; > case STREAM_PATTERN_SEQUENTIAL: > state = state + 1; > - if (state > max_stream) > + if (state >= max_stream) > state = 0; > break; > } > @@ -723,7 +723,7 @@ void client(int sk) { > } /* client() */ > > void start_test(int role) { > - int sk, pid; > + int sk, pid, ret; > int i = 0; > > DEBUG_PRINT(DEBUG_NONE, "\nStarting tests...\n"); > @@ -745,6 +745,22 @@ void start_test(int role) { > listen_r(sk, 1); > accept_r(sk); > } else { > + if (max_stream > 0) { > + struct sctp_initmsg initmsg; > + > + memset(&initmsg, 0, sizeof(initmsg)); > + initmsg.sinit_num_ostreams = max_stream; > + initmsg.sinit_max_instreams = max_stream; > + initmsg.sinit_max_attempts = 3; > + > + ret = setsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, > + &initmsg, sizeof(initmsg)); > + if (ret < 0) { > + perror("setsockopt(SCTP_INITMSG)"); > + exit(0); > + } > + } > + > connect_r(sk, (struct sockaddr *)&s_rem, r_len); > } > -- Thanks & Best Regards Hangbin Liu <liuhangbin@xxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html