From: Vlad Y. <vya...@gm...> - 2012-10-21 19:29:04
|
On Oct 21, 2012, at 2:39 PM, Michael Tuexen <Mic...@lu...> wrote: > On Oct 21, 2012, at 8:00 PM, Neil Horman wrote: > >> On Sun, Oct 21, 2012 at 12:38:50PM +0200, Michael Tuexen wrote: >>> On Oct 21, 2012, at 10:16 AM, Zhu Bicen wrote: >>> >>>> Thanks Michael. >>>> It looks issue in UNP code, or portability problem. >>>> >>>> I found the option SCTP_GET_PEER_ADDR_INFO can work(get the valid asssociation id) >>>> but not SCTP_PEER_ADDR_PARAMS. and later i can use the association id to get the number of out streams. >>> In FreeBSD both work. I don't see a reason why SCTP_PEER_ADDR_PARAMS shouldn't support it. >> For what its worth it apparers that sctp_getsockopt_peer_addr_params presumes >> that spp_assoc_id is a passed in value, which it will use to look up information >> about the requested peer address. I.e. it expects that you first call >> sctp_get_peer_addr_info to retrieve the needed association id. Nominally if you >> pass in a zero for your assoc id, you will get a EINVAL return from >> SCTP_PEER_ADDR_PARAMS, as it will not match the association id returned by the >> address lookup. The exception to that rule is if you are using a SOCK_STREAM >> socket, in which case, only one transport is available to the socket, which is >> what will be returned. The function will not howver copy in the association id >> to the sctp_paddrparams structure, as it assume the user has already filled that >> field out. This seems (by my reading) to be in line with whats expected in >> section 8.1.12 of RFC 6458, although, at least in the case of stream sockets, >> that it certainly wouldn't hurt to fill in the association id like we do with >> PEER_ADDR_INFO. >> >> Thoughts? > For one-to-one style sockets the assoc id is not relevant. For one-to-many > style sockets we try the socket and the assoc_id first to find the > association. If that does not work, we try to find the association > based on the socket and the address provided. We do this for > SCTP_GET_PEER_ADDR_INFO and SCTP_PEER_ADDR_PARAMS. (We means FreeBSD...). > I agree, this behavior is not stated explicitly in the socket API RFC, > but I think both should behave the same for consistency. > So it might be a solution if Linux can do the same. Haven't tested what > Solaris does. Then we could file an error on the socket API RFC to > make things clear. > I agree that we could do a lookup for a GET operation, but a set operation needs to specify associd if it is needed. I just checked the spec and it is totally silent on the matter. On the other hand, description for SCTP_GET_PEER_ADDR_INFO is very clear as to what should happen and even mentions that the call can be used as a mapping from address to associd. The more I think about it, the more I think that we need only 1 way to do it. Seems that the wrong option was chosen by the library implementation in this case. -vlad > Best regards > Michael >> Neil >> >>>> >>>> Thanks! >>>> >>>> I got following info from Sockets API Extensions for Stream Control Transmission Protocol (SCTP) draft-ietf-tsvwg-sctpsocket-09.txt: >>> Just a hint: The ID version is very old, so use RFC 6458 instead. >>> >>> Best regards >>> Michael >>>> >>>> 7.2.2 Peer Address Information (SCTP_GET_PEER_ADDR_INFO) >>>> Applications can retrieve information about a specific peer address >>>> of an association, including its reachability state, congestion >>>> window, and retransmission timer values. This information is >>>> read-only. The following structure is used to access this >>>> information: >>>> struct sctp_paddrinfo { >>>> sctp_assoc_t spinfo_assoc_id; >>>> struct sockaddr_storage spinfo_address; >>>> int32_t spinfo_state; >>>> uint32_t spinfo_cwnd; >>>> uint32_t spinfo_srtt; >>>> uint32_t spinfo_rto; >>>> uint32_t spinfo_mtu; >>>> }; >>>> >>>> On Sun, Oct 21, 2012 at 3:42 PM, Michael Tuexen <Mic...@lu...> wrote: >>>> On Oct 21, 2012, at 8:09 AM, Zhu Bicen wrote: >>>> >>>>> Thanks Neil so much. >>>>> >>>>> I find the returned association id is ZERO. >>>>> Following info also found on Unix Network Programming Volume 1 3rd edition: >>>>> The function(sctp_address_to_associd) returns the association ID to the >>>>> caller. Note that if the call fails, the earlier clearing of the structure >>>>> will assure our caller of getting a 0 as the returned association ID. *An >>>>> association ID of 0 is not **allowed and is used to indicate no association >>>>> by the SCTP implementation as well.*i >>>>> >>>>> The implementation of sctp_address_to_associd is like below, the input >>>>> argument i also checked >>>>> the sa, and salen is valid, the sctp_opt_info also return success. >>>>> the client data(sent by sctp_sendmsg) has been received by this server >>>>> program. Then the socket has been worked, but why it's has an invalid >>>>> association id, Which situation can lead to this(a zero association id)? >>>>> >>>>> >>>>> >>>>> sctp_assoc_t >>>>> sctp_address_to_associd(int sock_fd, struct sockaddr *sa, socklen_t salen) >>>>> { >>>>> struct sctp_paddrparams sp; >>>>> int siz; >>>>> >>>>> siz = sizeof(struct sctp_paddrparams); >>>>> bzero(&sp,siz); >>>>> memcpy(&sp.spp_address,sa,salen); >>>>> int ret = sctp_opt_info(sock_fd,0, >>>>> SCTP_PEER_ADDR_PARAMS, &sp, &siz); >>>>> if (ret != 0){ >>>>> printf("sctp_opt_info fatal, ret = %d\n", ret); >>>>> exit(1); >>>>> } >>>>> return(sp.spp_assoc_id); >>>>> } >>>> Could it be that Linux does not look up the association by address >>>> if the association is not found by assoc_id when processing the >>>> getsockopt() of SCTP_PEER_ADDR_PARAMS? At least FreeBSD does this >>>> and the UNP code was written using FreeBSD... >>>> >>>> Best regards >>>> Michael >>>>> >>>>> Thanks! >>>>> >>>>> >>>>> On Sun, Oct 21, 2012 at 10:22 AM, Neil Horman <nh...@tu...> wrote: >>>>> >>>>>> On Sat, Oct 20, 2012 at 11:24:05PM +0800, Zhu Bicen wrote: >>>>>>> Hello, all, >>>>>>> >>>>>>> There is a problem when trying the first SCTP example(10.2 SCTP >>>>>>> One-to-Many-Style Streaming Echo Server sctpserv01.c ) on Unix Network >>>>>>> Programming. >>>>>>> >>>>>>> The issue is the the call to sctp_get_no_strms fail due to getsockopt >>>>>>> error: Invalid argument. >>>>>>> >>>>>>> I tried this also on Debian 6, and CentOs 6.3, both have the same issue. >>>>>>> the sctp related toos and lib all installed by apt-get, i didn't build >>>>>>> these manually. >>>>>>> >>>>>>> Linux debian 2.6.32-5-686 #1 SMP Sun Sep 23 09:49:36 UTC 2012 i686 >>>>>> GNU/Linux >>>>>>> >>>>>>> Has anyone met this issue before? >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>> Theres only 2 reasons that calling that socket options returns EINVAL, if >>>>>> you >>>>>> don't pass in at least sizeof(struct sctp_status) bytes of data, or if your >>>>>> association id is invalid. Since its pretty clear your passing in enough >>>>>> of a >>>>>> buffer, I imagine the sctp_address_to_associd is returning an association >>>>>> id >>>>>> thats invalid. What does your implementation of that function look like? >>>>>> >>>>>> Also, a nit, you probably don't want to pass IPPROTO_SCTP as your socket >>>>>> level >>>>>> arugment. SOL_SCTP is the right define to pass. Both are defined to be >>>>>> the >>>>>> same value in linux, so its not a big deal, but you probably want to use >>>>>> the >>>>>> latter value to make your code portable. >>>>>> >>>>>> Neil >>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Best Regards >>>>> Bicen Zhu >>>>> ------------------------------------------------------------------------------ >>>>> Everyone hates slow websites. So do we. >>>>> Make your web apps faster with AppDynamics >>>>> Download AppDynamics Lite for free today: >>>>> http://p.sf.net/sfu/appdyn_sfd2d_oct >>>>> _______________________________________________ >>>>> Lksctp-developers mailing list >>>>> Lks...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/lksctp-developers >>>>> >>>> >>>> >>>> >>>> >>>> -- >>>> Best Regards >>>> Bicen Zhu >>> >>> >> > > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_sfd2d_oct > _______________________________________________ > Lksctp-developers mailing list > Lks...@li... > https://lists.sourceforge.net/lists/listinfo/lksctp-developers |