Menu

Home

Sridhar Samudrala

Stream Control Transmission Protocol (SCTP) is a reliable, message-oriented, multihomed transport protocol. Developed by the IETF SIGTRAN working group to transport SS7 over IP, it is now the third general-purpose transport developed by the IETF.


Project Members:


Discussion

  • Rajesh Ghildiyal

    Hi SCTP Experts,

    I am facing a strange issue with SCTP handshake when multihoming(2 IPs configured) is enabled. When a SCTP client is connected with multihomed SCTP server, INIT_ACK(from server) is not having both IPs, hence SCTP connection is not multihomed i.e not highly available. Due to that when server's primary IP is down, SCTP connection is disconnected.

    This issue happens when specific set of IPs are configured in SCTP multihomed server i.e 1.0.0.1(a service ip configured as primary ip) and public IP is cofigured as secondary IP. However, when the order of IP configuration is reversed i.e public ip as primary and service ip as secondary, SCTP handshake contains both IPs in INIT_ACK.

    I don't see any issue with server not listening on both IPs in any of above scenarios. Both the scenarios, server is binding and listeining on both IPs.

    Please help me to resolve this issue.

     
  • Rajesh Ghildiyal

    Hi SCTP Experts,

    I am trying to use socket options SCTP_PRIMARY_ADDR to make one of local address of SCTP association as primary and SCTP_SET_PEER_PRIMARY_ADDR to request SCTP server to make one of it's address as primary for SCTP future communication.

    struct sctp_setprim setPrimary;
    memset((void *)&setPrimary, 0, sizeof(struct sctp_setprim));
    setPrimary.ssp_assoc_id = 0;
    struct sockaddr_in *in_addr;
    in_addr = (struct sockaddr_in *)&setPrimary.ssp_addr;
    in_addr->sin_port = htons(localPort);
    in_addr->sin_family = AF_INET;
    in_addr->sin_addr.s_addr = localIps[0].Int32NetworkOrder();
    int rc = setsockopt(m_s, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, &setPrimary, sizeof(struct sctp_setprim));
    
    For above snippet of code, I see socket error "Invalid argument". I don't know the reason behind this error. I have verified ip address.
    
    Also for SCTP_SET_PEER_PRIMARY_ADDR, below code snippet is added.
    
    struct sctp_setpeerprim setPeerPrimary;
    memset((void *)&setPeerPrimary, 0, sizeof(struct sctp_setpeerprim));
    setPeerPrimary.sspp_assoc_id = 0;
    struct sockaddr_in *in_addr;
    in_addr = (struct sockaddr_in *)&setPeerPrimary.sspp_addr;
    in_addr->sin_port = htons(remotePort);
    in_addr->sin_family = AF_INET;
    in_addr->sin_addr.s_addr = remoteIps[0].Int32NetworkOrder();
    int rc = setsockopt(m_s, IPPROTO_SCTP, SCTP_SET_PEER_PRIMARY_ADDR, &setPeerPrimary, sizeof(struct sctp_setpeerprim));
    
    For this code block, I see error "Operation not permitted". And again, I'm clueless about this error reason.
    
    Am I doing something really wrong or my sctp library isn't supporting above socket options?
    
    Please help.
    
     

    Last edit: Rajesh Ghildiyal 2020-01-08
  • Omar AIT AMRANE

    Omar AIT AMRANE - 2022-07-04

    Dear experts

    Is there a way after association failure to retrieve UNSENT to peers and UNACKNOWLEDGED by peers Data Chunks ?
    I am using RHEL8.4 and sockets are set in NON BLOCKING mode.

    Thank you for your help

     

Log in to post a comment.