A query regarding sctp_bindx api in SCTP

Peter Lei (peterlei) peterlei at cisco.com
Thu Sep 6 07:32:44 PDT 2007


Randall Stewart wrote:
> sazzadur rahman wrote:
>> Hello,
>> I am using sctp patch for freebsd6.1. For dynamic address
>> configuration, I
>> am calling sctp_bindx() API after successfull bind() and connect() API's.
>> Although sctp_bindx() API successfully returns 0, the debug message
>> shows:
>>
>> addr_mgmt_assoc: added to pending list...
>> asconf_queue_add: appended asconf ADD_IP_ADDRESS...
>>
>> And I didn't see any ASCONF chunk sent to the peer in the tcpdump.
>> Hence, I
>> am confused why it should be in the pendling list instead of immediate
>> send
>> to peer?
> 
> Hmm.. I would like to see a packet trace of this as well..
> 
> A couple of thoughts.
> 
> a) The 6.x code is a bit out of date.. I need to update
>    and get a new patch out for you.. I know Peter did some
>    work on the ASCONF code recently.. so there may be some
>    fixes that have not been propagated to 6.x.. which could
>    be a problem (added Peter for that reason even though I
>    know he subscribes.. not sure how often he reads net).

I don't recall if there was something in the timeframe of 6.1
where bindx() broke or not... there were a number of bugs fixed
surrounding bindx() though for 7.0/-current for the new address
list handling and change to use the iterator work thread.

> b) Whenever an address gets added like this, then the address will
>    go into a pending point in the assoc. Since it can't be used
>    yet i.e. the ASCONF-ACK must be returned BEFORE the address
>    is part of the assoc. I am also not sure of the state of your
>    association at this point. I will try testing this... since it
>    is most likely in a front state, this may also be a problem.
>    The ASCONF cannot be sent until after we reach ESTABLISHED... not
>    sure we have tested this scenario.

Any queued asconf's would go out after hitting the established
state...

There was a bug in the 7.0 code where the asconf would not get
queued at all in the early front state (COOKIE-WAIT) because
the 'peer supports addip' flag had not been set yet.

> c) Normally I would think you should do all the bindx BEFORE the
>    connect. When you do subset binding (which you are doing here
>    since you are NOT bound-all) then what you are saying is that
>    YOU the application wish to manage the addresses.. no automatic
>    ASCONF will be done for you. When you do the bindx() it is supposed
>    to kick off the ASCONF.. but again.. this may be an issue
>    since you are in a front state... I will test this scenario
>    with the latest 7.0 code and see if I can recreate it.

This works fine on 7.0.

If Randy can update the patch for 6.1, we might be able to better
assist.

--peter


> R
> 
>>
>> In draft-ietf-tsvwg-addip-sctp-22.txt: page 20, A3, I have found that
>> "If an
>> ASCONF chunk is outstanding, then the ASCONF chunk should be queued for
>> later transmission and no further action should be taken until the
>> previous
>> ASCONF is acknowledged or a timeout occurs." But as I am calling
>> sctp_bindx() for the first time, there should not be any previous ASCONF
>> existing.
>>
>> Does anyone have any idea what I am missing here?
>> I would appriciate any help in this regard.
>>
>> Best Regards,
>> Md. Sazzadur Rahman,
>> Graduate Student,
>> School of Computer Science,
>> University of Oklahoma,
>> Norman, USA
>>
>> ---------------------------code segment I have used---------------------
>> //socket
>>         s = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
>>
>> //bind
>>         memset(&myAddr, 0, sizeof myAddr);
>>         myAddr.sin_family = AF_INET;
>>         myAddr.sin_port = htons(5060);
>>         myAddr.sin_addr.s_addr = inet_addr("129.15.78.125");
>>         if (bind(s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0) {
>>                 goto close;
>>         }
>> //connect
>>         memset(&farAddr, 0, sizeof farAddr);
>>         farAddr.sin_family = AF_INET;
>>         farAddr.sin_port = htons(6060);
>>         farAddr.sin_addr.s_addr = inet_addr( "129.15.78.114" );
>>         int iRet = connect(s, (struct sockaddr *)&farAddr, sizeof
>> farAddr);
>>
>> //sctp_bindx
>>         struct sockaddr_in my2ndAddr;
>>         memset(&my2ndAddr, 0, sizeof my2ndAddr);
>>         my2ndAddr.sin_len = sizeof my2ndAddr;
>>         my2ndAddr.sin_family = AF_INET;
>>         my2ndAddr.sin_port = htons(5060);
>>         my2ndAddr.sin_addr.s_addr = inet_addr("129.15.78.126");
>>
>>         iRet = sctp_bindx(s,(struct
>> sockaddr*)&my2ndAddr,1,SCTP_BINDX_ADD_ADDR);
>>
>> ------------------------------------------
>> _______________________________________________
>> freebsd-net at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-net
>> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
>>
> 
> 

-- 
Peter Lei
IP Engineering Tech Center
Cisco Systems, Inc.
office: (773) 695-8201
mobile: (847) 830-8869
peterlei at cisco.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3241 bytes
Desc: S/MIME Cryptographic Signature
Url : http://lists.freebsd.org/pipermail/freebsd-net/attachments/20070906/6335602c/smime.bin


More information about the freebsd-net mailing list