From: Vlad Y. <vla...@hp...> - 2008-12-16 14:48:49
|
Peter Hanecak wrote: > Hello, > > I'm trying to trigger SCTP ASSOC CHANGE(SCTP_RESTART) notification on my > server application which is using SCTP socket API. Im trying to do that > on RHEL 5.1 . The idea is to test the server application whether it > correctly handles the reboot of the client machine (those reboots > ussualy create new association instead of triggering restart > notification thus is not a practical way to test the case). > > I'm trying to do that by initiating new SCTP association and capturing > the INIT and COOKIE_ECHO messages my test client is sending to the > server application. Then I simply replay those packets again. > > So far I've been unable to trigger this restart event notification. > > > 1) identical duplicates: > > If I replay INIT and COOKIE_ECHO packet unchanged, server replies with > INIT_ACK (after INIT) and then COOKIE_ACK (after COOKIE_ECHO) but server > application does not receive any notification for existing association. > And no new association is created instead. > > I would expect the yes, no new association is created but that my server > would get "restart" notification from the socket API. No, a restart is trigger with a different verification tag. > > > 2) modified duplicates: > > If I replay modified INIT (different Initiate tag then first INIT), I > get INIT_ACK from server. Then I replay COOKIE_ACK (using value of > Initiat tag from INIT_ACK to modify Verification tag in duplicate > COOKIE_ECHO. But I get no COOKIE_ACK from the server. And server > application gets no notification nor is there any message from the kernel. > > I would expect ... well, do not know. :) > > > On the other hand, I am able to trigger SCTP ASSOC > CHANGE(SCTP_COMM_LOST) by sending ABORT. You might want to take a look at the SCTP test tool. You can get the code from http://sctp.fh-muenster.de/sctp-testtool.html The idea behind restart is that one end terminated the connection, while the other end did not. Another way you can simulate the restart would be this: 1. On the client, set SO_LINGER with l_onoff set to 1 and l_linger set to 0. This will tigger an ABORT on close(). 2. on the client, set ip_table rule to discard an outgoing ABORT. 3. On the client, after you close the socket, reconnect it with the same ports and addresses as before. The above should generate a RESTART notification. -vlad > > Additinal information: > > # modinfo sctp > filename: /lib/modules/2.6.18-53.el5/kernel/net/sctp/sctp.ko > license: GPL > description: Support for the SCTP protocol (RFC2960) > author: Linux Kernel SCTP developers > <lks...@li...> > alias: net-pf-2-proto-132 > srcversion: EA347AE19CDDAFFDB5A3CA4 > depends: ipv6 > vermagic: 2.6.18-53.el5 SMP mod_unload gcc-4.1 > module_sig: > 883f35047d39e6836e299a424cb51a112843109e2f64fc6bac16274c9c7feb16ea1f6d43374e6c09f669fbf51166c2dd1e3a393c60983d3444134c0 > > > So the question is: How precisely do I trigger SCTP association restart > notification in my server application? Or is there some testing tool you > use for this (and if so, where can I get it and how to use it)? > > Btw, I did found this: > > http://sourceforge.net/mailarchive/message.php?msg_id=4767E7DB.4090203%40hp.com > > "The system reboots yet again and the third INIT is send with the source > port of 32768. In this case, the ports and addresses are the same, so > this treated as association restart. In this case, the server will > re-initialize and re-use the existing association. This is expected > behavior." > > This should be what I simulate with [1] except that my server > application des not get the restart notification from the socket API. > > > Thank you in advance for any feedback. > > Sincerely > > Peter > |