Configuring SCTP Support for SIP

RFC 4168, The Stream Control Transfer Protocol (SCTP) as a Transport for the Session Initiation Protocol (SIP), specifies the requirements for SCTP usage as a layer 4 transport for SIP. Use the following steps to:

  • configure SCTP as the layer 4 transport for a SIP interface
  • create an SCTP-based SIP port
  • associate phy-interfaces/network interfaces with SIP realms
  • identify adjacent SIP servers that are accessible via SCTP
  • set SCTP timers and counters (optional)

Configuring an SCTP SIP Port

SIP ports are created as part of the SIP Interface configuration process.

  1. From superuser mode, use the following command sequence to access sip-port configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# session-router
    ORACLE(session-router)# sip-interface
    ORACLE(sip-interface)# sip-ports
    ORACLE(sip-port)#
  2. Use the address parameter to provide the IPv4 or IPv6 address of the network interface that supports the SIP port.

    This is the primary address of a the local multi-homed SCTP endpoint.

    ORACLE(sip-port)# address 172.16.10.76
    ORACLE(sip-port)#
  3. Retain the default value, 5060 (the well-known SIP port) for the port parameter.
    ORACLE(sip-port)# port 5060
    ORACLE(sip-port)#
  4. Use the transport-protocol parameter to identify the layer 4 protocol.

    Supported values are UDP, TCP, TLS, and SCTP.

    Select SCTP.

    ORACLE(sip-port)# transport-protocol sctp
    ORACLE(sip-port)#
  5. Use the multi-homed-addrs parameter to specify one or more local secondary addresses of the SCTP endpoint.

    Multi-homed addresses must be of the same type (IPv4 or IPv6) as that specified by the address parameter. Like the address parameter, these addresses identify SD network interfaces.

    To specify multiple addresses, bracket an address list with parentheses.

    ORACLE(sip-port)# multi-homed-addrs 182.16.10.76
    ORACLE(sip-port)#
    ORACLE(sip-port)# multi-homed-addrs (182.16.10.76 192.16.10.76 196.15.32.108)
    ORACLE(sip-port)#
  6. Remaining parameters can be safely ignored.
  7. Use done, exit, and verify-config to complete configuration of this SCTP-based SIP port.
    ORACLE(sip-port)# done
    ORACLE(sip-interface)# exit
    ORACLE(session-router)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#

Configuring the Realm

After configuring a SIP port which identifies primary and secondary multi-homed transport addresses, you identify the network interfaces that support the primary address and secondary addresses to the realm assigned during SIP Interface configuration.

  1. From superuser mode, use the following command sequence to access realm-config configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# media-manager
    ORACLE(media-manager)# realm-config
    ORACLE(realm-config)#
  2. Use the select command to access the target realm.
  3. Use the network-interfaces command to identify the network interfaces that support the SCTP primary and secondary addresses.

    Network interfaces are identified by their name.

    Enter a list of network interface names using parentheses as list brackets. The order of interface names is not significant.

    ORACLE(realm-config)# network-interfaces (mo1 M10)
    ORACLE(realm-config)#
  4. Use done, exit, and verify-config to complete realm configuration.
    ORACLE(realm-config)# done
    ORACLE(media-manager)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#

Configuring Session Agents

After configuring the realm, you identify adjacent SIP servers who will be accessed via the SCTP protocol.

  1. From superuser mode, use the following command sequence to access session-agent configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# session-router
    ORACLE(session-router)# session-agent
    ORACLE(session-agent)#
  2. Use the select command to access the target session-agent.
  3. Use the transport-method parameter to select the layer 4 transport protocol.

    Select staticSCTP for SCTP transport

    ORACLE(session-agent)# transport-method staticSCTP
    ORACLE(session-agent)#
  4. Set the reuse-connections parameter to none.

    Select staticSCTP for SCTP transport

    ORACLE(session-agent)# reuse-connections none
    ORACLE(session-agent)#
  5. Use done, exit, and verify-config to complete session agent configuration.
    ORACLE(session-agent)# done
    ORACLE(session-router)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#
  6. Repeat Steps 1 through 5 as necessary to configure additional session agents who will be accessed via SCTP transport.

Setting SCTP Timers and Counters

Setting SCTP timers and counters is optional. All configurable timers and counters provide default values that conform to recommended values as specified in RFC 4960, Stream Control Transmission Protocol.

Management of Retransmission Timer, section 6.3 of RFC 4960 describes the calculation of a Retransmission Timeout (RTO) by the SCTP process. This calculation involves three SCTP protocol parameters: RTO.Initial, RTO.Min, and RTO.Max. Suggested SCTP Protocol Parameter Values section 15 of RFC 4960 lists recommended values for these parameters.

The following shows the equivalence of recommended values and ACLI defaults.

RTO.Initial = 3 seconds sctp-rto-initial = 3000 ms (default value)

RTO.Min = 1 second sctp-rto-min = 1000 ms (default value)

RTO.Max = 60 seconds sctp-rto-max = 60000 ms (default value)

Path Heartbeat, section 8.3 of RFC 4960 describes the calculation of a Heartbeat Interval by the SCTP process. This calculation involves the current calculated RTO and a single SCTP protocol parameter — HB.Interval.

The following shows the equivalence of recommended the value and ACLI default.

HB.Interval = 30 seconds sctp-hb-interval = 3000 ms (default value)

Acknowledgement on Reception of DATA Chunks, section 6.2 of RFC 4960 describes requirements for the timely processing and acknowledgement of DATA chunks. This section requires that received DATA chunks must be acknowledged within 500 milliseconds, and recommends that DATA chunks should be acknowledged with 200 milliseconds. The interval between DATA chunk reception and acknowledgement is specific by the ACLI sctp-sack-timeout parameter, which provides a default value of 200 milliseconds and a maximum value of 500 milliseconds.

Transmission of DATA Chunks, section 6.1 of RFC 4960 describes requirements for the transmission of DATA chunks. To avoid network congestion the RFC recommends a limitation on the volume of data transmitted at one time. The limitation is expressed in terms of DATA chunks, not in terms of SCTP packets.

The maximum number of DATA chunks that can be transmitted at one time is specified by the ACLI sctp-max-burst parameter, which provides a default value of 4 chunks, the limit recommended by the RFC.

Setting the RTO

An SCTP endpoint uses a retransmission timer to ensure data delivery in the absence of any feedback from its peer. RFC 4960 refers to the timer itself as T3-rtx and to the timer duration as RTO (retransmission timeout).

When an endpoint's peer is multi-homed, the endpoint calculates a separate RTO for each IP address affiliated with the peer. The calculation of RTO in SCTP is similar to the way TCP calculates its retransmission timer. RTO fluctuates over time in response to actual network conditions. To calculate the current RTO, an endpoint maintains two state variables per destination IP address — the SRTT (smoothed round-trip time) variable, and the RTTVAR (round-trip time variation) variable.

Use the following procedure to assign values used in RTO calculation.

  1. From superuser mode, use the following command sequence to access network-parameters configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# system
    ORACLE(system)# network-parameters
    ORACLE(network-parameters)#
  2. Use the sctp-rto-initial parameter to assign an initial timer duration.

    Allowable values are integers within the range 0 through 4294967295 that specify the initial duration in milliseconds. In the absence of an explicitly configured integer value, sctp-rto-initial defaults to 3000 milliseconds (3 seconds, the recommended default value from RFC 4960).

    As described in Section 6.3 of RFC 4960, the value specified by sctp-rto-initial is assigned to the SCTP protocol parameter RTO.Initial, which provides a default RTO until actual calculations have derived a fluctuating duration based on network usage. The value specified by the sctp-rto-initial parameter seeds these calculations.

    ORACLE(network-parameters)# sctp-rto-initial 3000
    ORACLE(network-parameters)#
  3. Use the sctp-rto-min and sctp-rto-max parameters to assign an RTO floor and ceiling.

    Allowable values are integers within the range 0 through 4294967295 that specify the minimum and maximum durations in milliseconds. In the absence of an explicitly configured integer value, sctp-rto-min defaults to 1000 ms (1 second, the recommended default value from RFC 4960), and sctp-rto-max defaults to 60000 ms (60 seconds, the recommended default value from RFC 4960.)

    As described in Section 6.3 of RFC 4960, the values specified by sctp-rto-min and sctp-rto-max are assigned to the SCTP protocol parameters, RTO.min and RTO.max that limit RTO calculations. If a calculated RTO duration is less than RTO.min, the parameter value is used instead of the calculated value; likewise, if a calculated RTO duration is greater than RTO.max, the parameter value is used instead of the calculated value.

    ORACLE(network-parameters)# sctp-rto-min 1000
    ORACLE(network-parameters)# sctp-rto-max 60000
    ORACLE(network-parameters)#
  4. Use done, exit, and verify-config to complete RTO configuration.
    ORACLE(network-parameters)# done
    ORACLE(system)# exit
    ORACLE(configure)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#

Setting the Heartbeat Interval

Both single-homed and multi-homed SCTP endpoints test the reachability of associates by sending periodic HEARTBEAT chunks to UNCONFIRMED or idle transport addresses.

Use the following procedure to assign values used in Heartbeat Interval calculation.

  1. From superuser mode, use the following command sequence to access network-parameters configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# system
    ORACLE(system)# network-parameters
    ORACLE(network-parameters)#
  2. Use the sctp-hb-interval parameter to assign an initial Heartbeat Interval duration.

    Allowable values are integers within the range 0 through 4294967295 that specify the initial Heartbeat Interval in milliseconds. In the absence of an explicitly configured integer value, sctp-hb-interval defaults to 30000 milliseconds (30 seconds, the recommended default value from RFC 4960).

    As described in Section 8.3 of RFC 4960, the value specified by sctp-hb-interval is assigned to the SCTP protocol parameter HB.Interval, which provides a default interval until actual calculations have derived a fluctuating interval based on network usage. The value specified by the sctp-hb-interval parameter is used during these calculations.

    ORACLE(network-parameters)# sctp-hb-interval 30000
    ORACLE(network-parameters)#
  3. Use done, exit, and verify-config to complete Heartbeat Interval configuration.
    ORACLE(network-parameters)# done
    ORACLE(system)# exit
    ORACLE(configure)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE #

Setting the SACK Delay Timer

An SCTP Selective Acknowledgement (SACK) is sent to the peer endpoint to acknowledge received DATA chunks and to inform the peer endpoint of gaps in the received subsequences of DATA chunks. Section 6.2 of RFC 4960 sets a specific requirement for a SACK Delay timer that specifies the maximum interval between the reception of an SCTP packet containing one or more DATA chunks and the transmission of a SACK to the packet originator.

Use the following procedure to set the SACK Delay timer.

  1. From superuser mode, use the following command sequence to access network-parameters configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# system
    ORACLE(system)# network-parameters
    ORACLE(network-parameters)#
  2. Use the sctp-sack-timeout parameter to assign a value to the SACK Delay timer.

    Allowable values are integers within the range 0 through 500 which specify the maximum delay (in milliseconds) between reception of a SCTP packet containing one or more Data chunks and the transmission of a SACK to the packet source. The value 0 indicates that a SACK is generated immediately upon DATA chunk reception

    In the absence of an explicitly configured integer value, sctp-sack-timeout defaults to 200 ms (the recommended default value from RFC 4960).

    ORACLE(network-parameters)# sctp-sack-timeout 200
    ORACLE(network-parameters)#
  3. Use done, exit, and verify-config to complete configuration of the SACK Delay timer.
    ORACLE(network-parameters)# done
    ORACLE(system)# exit
    ORACLE(configure)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#

Limiting DATA Bursts

Section 6.1 of RFC 4960 describes the SCTP protocol parameter, Max.Burst, used to limit the number of DATA chunks that are transmitted at one time.

Use the following procedure to assign a value to the SCTP protocol parameter, Max.Burst.

  1. From superuser mode, use the following command sequence to access network-parameters configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# system
    ORACLE(system)# network-parameters
    ORACLE(network-parameters)#
  2. Use the sctp-max-burst parameter to assign a value to the SCTP protocol parameter, Max.Burst.

    Allowable values are integers within the range 0 through 4294967295 that specify the maximum number of DATA chunks that will be sent at one time. In the absence of an explicitly configured integer value, sctp-max-burst defaults to 4 (DATA chunks, the recommended default value from RFC 4960).

    ORACLE(network-parameters)# sctp-max-burst 4
    ORACLE(network-parameters)#
  3. Use done, exit, and verify-config to complete configuration of DATA burst limitations.
    ORACLE(network-parameters)# done
    ORACLE(system)# exit
    ORACLE(configure)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#

Setting Endpoint Failure Detection

As described in Monitoring, Failure Detection and Recovery, a single-homed SCTP endpoint maintains a count of the total number of consecutive failed (unacknowledged) retransmissions to its peer. Likewise, a multi-homed SCTP endpoint maintains a series of similar, dedicated counts for all of its destination transport addresses. If the value of these counts exceeds the limit indicated by the SCTP protocol parameter Association.Max.Retrans, the endpoint considers the peer unreachable and stops transmitting any additional data to it, causing the association to enter the CLOSED state.

The endpoint resets the counter when (1) a DATA chunk sent to that peer endpoint is acknowledged by a SACK, or (2) a HEARTBEAT ACK is received from the peer endpoint.

Use the following procedure to configure endpoint failure detection.

  1. From superuser mode, use the following command sequence to access network-parameters configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# system
    ORACLE(system)# network-parameters
    ORACLE(network-parameters)#
  2. Use the sctp-assoc-max-retrans to assign a value to the SCTP protocol parameter Association.Max.Retrans.

    Allowable values are integers within the range 0 through 4294967295 which specify the maximum number of transmission requests. In the absence of an explicitly configured integer value, sctp-assoc-max-retrans defaults to 10 (transmission re-tries, the recommended default value from RFC 4960).

    ORACLE(network-parameters)# sctp-assoc-max-retrans 10
    ORACLE(network-parameters)#
  3. Use done, exit, and verify-config to complete endpoint failure detection configuration.
    ORACLE(network-parameters)# done
    ORACLE(system)# exit
    ORACLE(configure)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#

Setting Path Failure Detection

As described in Monitoring, Failure Detection and Recovery, when its peer endpoint is multi-homed, an SCTP endpoint maintains a count for each of the peer’s destination transport addresses.

Each time the T3-rtx timer expires on any address, or when a HEARTBEAT sent to an idle address is not acknowledged within an RTO, the count for that specific address is incremented. If the value of a specific address count exceeds the SCTP protocol parameter Path.Max.Retrans, the endpoint marks that destination transport address as inactive.

The endpoint resets the counter when (1) a DATA chunk sent to that peer endpoint is acknowledged by a SACK, or (2) a HEARTBEAT ACK is received from the peer endpoint.

When the primary path is marked inactive (due to excessive retransmissions, for instance), the sender can automatically transmit new packets to an alternate destination address if one exists and is active. If more than one alternate address is active when the primary path is marked inactive, a single transport address is chosen and used as the new destination transport address.

Use the following procedure to configure path failure detection.

  1. From superuser mode, use the following command sequence to access network-parameters configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# system
    ORACLE(system)# network-parameters
    ORACLE(network-parameters)#
  2. Use the sctp-path-max-retrans parameter to assign a value to the SCTP protocol parameter Path.Max.Retrans.

    Allowable values are integers within the range 0 through 4294967295 that specify the maximum number of RTOs and unacknowledged HEARTBEATS. In the absence of an explicitly configured integer value, sctp-path-max-retrans defaults to 5 (RTO and/or HEARTBEAT errors per transport address, the recommended default value from RFC 4960).

    When configuring endpoint and path failure detection, ensure that the value of the sctp-assoc-max-retrans parameter is smaller than the sum of the sctp-path-max-retrans values for all the remote peer’s destination addresses. Otherwise, all the destination addresses can become inactive (unable to receive traffic) while the endpoint still considers the peer endpoint reachable.

    ORACLE(network-parameters)# sctp-path-max-retrans 5
    ORACLE(network-parameters)#
  3. Use done, exit, and verify-config to complete path failure detection configuration.
    ORACLE(network-parameters)# done
    ORACLE(system)# exit
    ORACLE(configure)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE#

Specifying the Delivery Mode

As described in Delivery Modes, SCTP support two delivery modes, ordered and unordered.

  1. From superuser mode, use the following command sequence to access network-parameters configuration mode.
    ORACLE# configure terminal
    ORACLE(configure)# system
    ORACLE(system)# network-parameters
    ORACLE(network-parameters)#
  2. Use the sctp-send-mode parameter to select the preferred delivery mode.

    Choose ordered or unordered.

    ORACLE(network-parameters)# sctp-send-mode unordered
    ORACLE(network-parameters)#
  3. Use done, exit, and verify-config to complete delivery mode configuration.
    ORACLE(network-parameters)# done
    ORACLE(system)# exit
    ORACLE(configure)# exit
    ORACLE(configure)# exit
    ORACLE# verify-config
    ---------------------------------------------------------------------
    Verification successful! No errors nor warnings in the configuration
    ORACLE #

Example Configurations

The following ACLI command sequences summarize required SCTP port configuration, and the configuration of required supporting elements.

  • PHY interfaces
  • Network interfaces
  • SIP ports
  • realms
  • session agents

Sequences show only configuration parameters essential for SCTP operations; other parameters can retain default values, or assigned other values specific to local network requirements.

Phy Interface Configuration

The first ACLI command sequence configures a phy-interface named m10, that will support an SCTP primary address; the second sequence configures a phy-interface named m01 that will support a secondary SCTP address.

ORACLE# configure terminal
ORACLE(configure)# system
ORACLE(system)# phy-interface
ORACLE(phy-interface)# operation-type media
ORACLE(phy-interface)# port 0
ORACLE(phy-interface)# slot 1
ORACLE(phy-interface)# name m10
ORACLE(phy-interface)#
...
...
...
ORACLE(phy-interface)#
ORACLE# configure terminal
ORACLE(configure)# system
ORACLE(system)# phy-interface
ORACLE(phy-interface)# operation-type media
ORACLE(phy-interface)# port 1
ORACLE(phy-interface)# slot 0
ORACLE(phy-interface)# name m01
ORACLE(phy-interface)#
...
...
...
ORACLE(phy-interface)#

Network Interface Configuration

These ACLI command sequences configure two network-interfaces. The first sequence configures a network-interface named m10, thus associating the network-interface with the phy-interface of the same name. The ACLI ip-address command assigns the IPv4 address 172.16.10.76 to the network-interface. In a similar fashion, the second command sequence associates the m01 network and phy-interfaces, and assigns an IPv4 address of 182.16.10.76.

ORACLE# configure terminal
ORACLE(configure)# system
ORACLE(system)# network-interface
ORACLE(network-interface)# name m10
ORACLE(network-interface)# ip-address 172.16.10.76
...
...
...
ORACLE(network-interface)#
ORACLE# configure terminal
ORACLE(configure)# system
ORACLE(system)# network-interface
ORACLE(network-interface)# name m01
ORACLE(network-interface)# ip-address 182.16.10.76
...
...
...
ORACLE(network-interface)#

SIP Port Configuration

This ACLI command sequence configures a SIP port for SCTP operations. It specifies the use of SCTP as the transport layer protocol, and assigns the existing network interface address, 172.16.10.76, as the SCTP primary address. Additionally, it identifies three other existing network addresses (182.16.10.76, 192.16.10.76, and 196.15.32.108) as SCTP secondary addresses.

ORACLE# configure terminal
ORACLE(configure)# session-router
ORACLE(session-router)# sip-interface
ORACLE(sip-interface)# sip-ports
ORACLE(sip-port)# address 172.16.10.76
ORACLE(sip-port)# transport-protocol sctp
ORACLE(sip-port)# multi-homed-addrs (182.16.10.76 192.16.10.76 196.15.32.108)
...
...
...
ORACLE(sip-port)#

Realm Configuration

These ACLI command sequences configure a realm for SCTP operations. The first ACLI sequence assigns a named realm, in this example core-172, to a SIP interface during the interface configuration process. The second sequence accesses the target realm and uses the network-interfaces command to associate the named SCTP network interfaces with the realm.

ORACLE# configure terminal
ORACLE(configure)# session-router
ORACLE(session-router)# sip-interface
ORACLE(sip-interface)# realm-id core-172
...
...
...
ORACLE(sip-interface)#
ORACLE# configure terminal
ORACLE(configure)# media-manager
ORACLE(media-manager)# realm-config
ORACLE(realm-config)# select
identifier: core-172
1. core-172 ...
selection: 1
ORACLE(realm-config)# network-interfaces (m01 m10 ...)
...
...
...
ORACLE(ream-config)#

Session Agent Configuration

The final ACLI command sequence enables an SCTP-based transport connection between the Oracle® Enterprise Session Border Controller and an adjacent network element.

ORACLE# configure terminal
ORACLE(configure)# session-router
ORACLE(session-router)# session-agent
ORACLE(session-agent)# select
<hostname>: core-172S1
1. core-172S1 ...
selection: 1
ORACLE(session-agent)#
ORACLE(session-agent)# transport-method staticSCTP
ORACLE(session-agent)# reuse-connections none
...
...
...
ORACLE(session-agent)#