> On 9 March 2020, at 04:11, Michael Tuexen <michael.tue...@lurchi.franken.de> 
> wrote:
> 
>> On 9. Mar 2020, at 11:55, Doug Hardie <bc...@lafn.org> wrote:
>> 
>>> 
>>>> On 9. Mar 2020, at 11:01, Doug Hardie <bc...@lafn.org> wrote:
>>>> 
>>>>> I am trying to get sctp_sendmsgx to work and not having a lot of success. 
>>>>>  I have not been able to find any examples on the web of using it.  I 
>>>>> have a client using sctp_sendmsg working fine.  I need to make use of the 
>>>>> multihoming feature which requires sctp_sendmsgx.    I changed the call 
>>>>> to sctp_sendmsgx, and changed the address count to 2.  However, all I get 
>>>>> is an EINVAL response.  Looking through the code there are at least 2 
>>>>> different possible causes, but I can't distinguish between them. I do 
>>>>> have two address structures in the address field.  Are there any examples 
>>>>> of how to build a client with sctp_sendmsgx?
>>>> 
>>>> I am now making some progress.  If you are using the sctp_sendmsg function 
>>>> the sa_len or sin_len field is not used.  However, sctp_sendx does use it. 
>>>>  Leaving it at zero causes
>>> Yepp, filling out the sa_len field is important.
>>>> the problem.  sendx now sends a connection init to the remote host.  There 
>>>> is no server running there yet.  It hangs for quite some time and doesn't 
>>>> try the multihome address.  I seem to recall reading something about that 
>>>> so will investigate that tomorrow. 
>>> What do you see on the wire? I would expect INIT chunks to be sent to the 
>>> two addresses you provided.
>> 
>> If I have both network connections working, there is an INIT chunk on the 
>> primary network followed by a ABORT chunk response.  Then the client sits 
>> waiting for a response which 
> When the INIT is received, the association is dead. Are you using a 
> one-to-many style socket (SOCK_SEQPACKET as the second parameter to socket())?
> Then you would need subscribe to notifications to get an indication that the 
> peer is not there. If you would use a one-to-one style
> socket (using SOCK_STREAM as the second argument of socket()), you could use 
> the implicit or explicit connection setup and use
> select() to figure out, that the peer has rejected the association.
>> never comes.  If I disconnect the primary network cable, then after about 5 
>> seconds of starting the client, I get the INIT and ABORT chunks on the 
>> secondary network.  I haven't 
> The INIT retransmission timer is 3 seconds in 12.1, I guess. You can change 
> it using
> https://tools.ietf.org/html/rfc6458#section-8.1.1
>> figured out how to control the time, or how to make it switch to the 
>> secondary when the network connection is there, but the server is not 
>> responding.
> SCTP does failover automatically. Please note that receiving an ABORT is a 
> (final) response from the peer and no retransmissions
> will happen. Retransmissions only happen, when there is no response.
>> 
>>> 
>>> Please note that sctp_sendx() is deprecated (like sctp_sendmsg()). Please 
>>> consider using sctp_sendv().
>>> See https://tools.ietf.org/html/rfc6458#section-9.12
>> 
>> Thats quite interesting.  This must have occurred after the Steven's book 
>> came out.  There is no man entry for sctp_sendv in FBSD 12.1.  However, I do 
>> see it in sctp_sys_calls.c 
> Yes, the RFC was finalised after the book chapters were written, I think.
>> so I will have to figure it out from there.  Likewise there is no indication 
>> those calls are depreciated in the man pages.
> That is a good point. The man pages need some work. The BSD stack should be 
> pretty much supporting
> the API described in the RFC. If something doesn't work as described in the 
> RFC, I consider it a bug.

Thanks a lot.  This is quite helpful.  I was using a one to many client.  I'll 
have to rethink that.  

-- Doug


_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to