u32 vrf_id;
u8 src_address[16];
u8 dst_address[16];
+ };
+
+autoreply define sctp_config {
+ u32 client_index;
+ u32 context;
+ u8 never_delay_sack;
+ u8 never_bundle;
};
\ No newline at end of file
pool_get (tm->listener_pool, listener);
memset (listener, 0, sizeof (*listener));
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].subconn_idx =
- MAIN_SCTP_SUB_CONN_IDX;
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_c_index =
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].subconn_idx =
+ SCTP_PRIMARY_PATH_IDX;
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].c_c_index =
listener - tm->listener_pool;
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.lcl_port = tep->port;
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.lcl_port = tep->port;
/* If we are provided a sw_if_index, bind using one of its IPs */
if (ip_is_zero (&tep->ip, 1) && tep->sw_if_index != ENDPOINT_INVALID_INDEX)
tep->is_ip4)))
ip_set (&tep->ip, iface_ip, tep->is_ip4);
}
- ip_copy (&listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.lcl_ip,
+ ip_copy (&listener->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.lcl_ip,
&tep->ip, tep->is_ip4);
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].PMTU =
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].PMTU =
vnet_sw_interface_get_mtu (vnet_get_main (), tep->sw_if_index, VLIB_TX);
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.is_ip4 = tep->is_ip4;
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.proto =
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.is_ip4 = tep->is_ip4;
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.proto =
TRANSPORT_PROTO_SCTP;
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_s_index = session_index;
- listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.fib_index =
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].c_s_index = session_index;
+ listener->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.fib_index =
tep->fib_index;
listener->state = SCTP_STATE_CLOSED;
sctp_connection_timers_init (listener);
- return listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_c_index;
+ return listener->sub_conn[SCTP_PRIMARY_PATH_IDX].c_c_index;
}
u32
ASSERT (subconn_idx < MAX_SCTP_CONNECTIONS);
sctp_conn->sub_conn[subconn_idx].connection.c_index =
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.c_index;
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.c_index;
sctp_conn->sub_conn[subconn_idx].connection.thread_index = thread_index;
sctp_conn->sub_conn[subconn_idx].subconn_idx = subconn_idx;
return SCTP_ERROR_NONE;
}
+u8
+sctp_configure (sctp_user_configuration_t config)
+{
+ sctp_main_t *sctp_main = vnet_get_sctp_main ();
+
+ u32 thread_idx = vlib_get_thread_index ();
+
+ sctp_main->connections[thread_idx]->conn_config.never_delay_sack =
+ config.never_delay_sack;
+ sctp_main->connections[thread_idx]->conn_config.never_bundle =
+ config.never_bundle;
+
+ return 0;
+}
+
sctp_connection_t *
sctp_connection_new (u8 thread_index)
{
pool_get (sctp_main->connections[thread_index], sctp_conn);
memset (sctp_conn, 0, sizeof (*sctp_conn));
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].subconn_idx =
- MAIN_SCTP_SUB_CONN_IDX;
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_c_index =
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].subconn_idx =
+ SCTP_PRIMARY_PATH_IDX;
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_c_index =
sctp_conn - sctp_main->connections[thread_index];
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_thread_index = thread_index;
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_thread_index = thread_index;
sctp_conn->local_tag = 0;
return sctp_conn;
ASSERT (vlib_get_thread_index () == 0);
pool_get (tm->half_open_connections, sctp_conn);
memset (sctp_conn, 0, sizeof (*sctp_conn));
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_c_index =
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_c_index =
sctp_conn - tm->half_open_connections;
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].subconn_idx =
- MAIN_SCTP_SUB_CONN_IDX;
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].subconn_idx =
+ SCTP_PRIMARY_PATH_IDX;
return sctp_conn;
}
uword thread_id;
int rv;
- u8 idx = MAIN_SCTP_SUB_CONN_IDX;
+ u8 idx = SCTP_PRIMARY_PATH_IDX;
/*
* Allocate local endpoint
sctp_conn->sub_conn[i].connection.lcl_port);
int thread_index =
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.thread_index;
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.thread_index;
/* Make sure all timers are cleared */
sctp_connection_timers_reset (sctp_conn);
sctp_connection_close (sctp_connection_t * sctp_conn)
{
SCTP_DBG ("Closing connection %u...",
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.c_index);
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.c_index);
sctp_conn->state = SCTP_STATE_SHUTDOWN_PENDING;
sctp_connection_get (conn_index, thread_index);
if (PREDICT_TRUE (sctp_conn != NULL))
- return &sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection;
+ return &sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection;
return NULL;
}
sctp_main_t *tm = vnet_get_sctp_main ();
sctp_connection_t *sctp_conn;
sctp_conn = pool_elt_at_index (tm->listener_pool, listener_index);
- return &sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection;
+ return &sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection;
}
u8 *
/* Start cleanup. App wasn't notified yet so use delete notify as
* opposed to delete to cleanup session layer state. */
stream_session_delete_notify (&sctp_conn->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].connection);
+ [SCTP_PRIMARY_PATH_IDX].connection);
sctp_connection_timers_reset (sctp_conn);
sctp_half_open_session_get_transport (u32 conn_index)
{
sctp_connection_t *sctp_conn = sctp_half_open_connection_get (conn_index);
- return &sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection;
+ return &sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection;
}
u8 *
#define IS_U_BIT_SET(var) ((var) & (1<<2))
#define MAX_SCTP_CONNECTIONS 8
-#define MAIN_SCTP_SUB_CONN_IDX 0
+#define SCTP_PRIMARY_PATH_IDX 0
#if (VLIB_BUFFER_TRACE_TRAJECTORY)
#define sctp_trajectory_add_start(b, start) \
*/
#define SUGGESTED_COOKIE_LIFE_SPAN_INCREMENT 1000
+typedef struct _sctp_user_configuration
+{
+ u8 never_delay_sack;
+ u8 never_bundle;
+
+} sctp_user_configuration_t;
+
typedef struct _sctp_connection
{
sctp_sub_connection_t sub_conn[MAX_SCTP_CONNECTIONS]; /**< Common transport data. First! */
+ sctp_user_configuration_t conn_config; /**< Allows tuning of some SCTP behaviors */
u8 state; /**< SCTP state as per sctp_state_t */
u16 flags; /**< Chunk flag (see sctp_chunks_common_hdr_t) */
sctp_sub_connection_del_ip6 (ip6_address_t * lcl_addr,
ip6_address_t * rmt_addr);
+u8 sctp_configure (sctp_user_configuration_t config);
+
void sctp_connection_close (sctp_connection_t * sctp_conn);
void sctp_connection_cleanup (sctp_connection_t * sctp_conn);
void sctp_connection_del (sctp_connection_t * sctp_conn);
clib_spinlock_lock_if_init (&sctp_main.half_open_lock);
if (!pool_is_free_index (sctp_main.half_open_connections, conn_index))
tc = pool_elt_at_index (sctp_main.half_open_connections, conn_index);
- tc->sub_conn[MAIN_SCTP_SUB_CONN_IDX].subconn_idx = MAIN_SCTP_SUB_CONN_IDX;
+ tc->sub_conn[SCTP_PRIMARY_PATH_IDX].subconn_idx = SCTP_PRIMARY_PATH_IDX;
clib_spinlock_unlock_if_init (&sctp_main.half_open_lock);
return tc;
}
sctp_main_t *sctp_main = vnet_get_sctp_main ();
clib_spinlock_lock_if_init (&sctp_main->half_open_lock);
pool_put_index (sctp_main->half_open_connections,
- tc->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_c_index);
+ tc->sub_conn[SCTP_PRIMARY_PATH_IDX].c_c_index);
if (CLIB_DEBUG)
memset (tc, 0xFA, sizeof (*tc));
clib_spinlock_unlock_if_init (&sctp_main->half_open_lock);
sctp_half_open_connection_cleanup (sctp_connection_t * tc)
{
/* Make sure this is the owning thread */
- if (tc->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_thread_index !=
+ if (tc->sub_conn[SCTP_PRIMARY_PATH_IDX].c_thread_index !=
vlib_get_thread_index ())
return 1;
- sctp_timer_reset (tc, MAIN_SCTP_SUB_CONN_IDX, SCTP_TIMER_T1_INIT);
+ sctp_timer_reset (tc, SCTP_PRIMARY_PATH_IDX, SCTP_TIMER_T1_INIT);
sctp_half_open_connection_del (tc);
return 0;
}
always_inline u8
sctp_data_subconn_select (sctp_connection_t * sctp_conn)
{
- u32 sub = MAIN_SCTP_SUB_CONN_IDX;
- u8 i, cwnd = sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].cwnd;
+ u32 sub = SCTP_PRIMARY_PATH_IDX;
+ u8 i, cwnd = sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].cwnd;
for (i = 1; i < MAX_SCTP_CONNECTIONS; i++)
{
if (sctp_conn->sub_conn[i].state == SCTP_SUBCONN_STATE_DOWN)
return i;
}
clib_warning ("Did not find a sub-connection; defaulting to %u",
- MAIN_SCTP_SUB_CONN_IDX);
- return MAIN_SCTP_SUB_CONN_IDX;
+ SCTP_PRIMARY_PATH_IDX);
+ return SCTP_PRIMARY_PATH_IDX;
}
always_inline u8
return i;
}
clib_warning ("Did not find a sub-connection; defaulting to %u",
- MAIN_SCTP_SUB_CONN_IDX);
- return MAIN_SCTP_SUB_CONN_IDX;
+ SCTP_PRIMARY_PATH_IDX);
+ return SCTP_PRIMARY_PATH_IDX;
}
/**
update_smallest_pmtu_idx (sctp_connection_t * sctp_conn)
{
u8 i;
- u8 smallest_pmtu_index = MAIN_SCTP_SUB_CONN_IDX;
+ u8 smallest_pmtu_index = SCTP_PRIMARY_PATH_IDX;
for (i = 1; i < MAX_SCTP_CONNECTIONS; i++)
{
#define foreach_sctp_api_msg \
_(SCTP_ADD_SRC_DST_CONNECTION, sctp_add_src_dst_connection) \
-_(SCTP_DEL_SRC_DST_CONNECTION, sctp_del_src_dst_connection)
+_(SCTP_DEL_SRC_DST_CONNECTION, sctp_del_src_dst_connection) \
+_(SCTP_CONFIG, sctp_config)
static void
vl_api_sctp_add_src_dst_connection_t_handler
REPLY_MACRO (VL_API_SCTP_ADD_SRC_DST_CONNECTION_REPLY);
}
+static void
+vl_api_sctp_config_t_handler (vl_api_sctp_config_t * mp)
+{
+ sctp_user_configuration_t config;
+ vl_api_sctp_config_reply_t *rmp;
+ int rv;
+
+ config.never_delay_sack = mp->never_delay_sack;
+ config.never_bundle = mp->never_bundle;
+ rv = sctp_configure (config);
+
+ REPLY_MACRO (VL_API_SCTP_CONFIG_REPLY);
+}
+
#define vl_msg_name_crc_list
#include <vnet/sctp/sctp.api.h>
#undef vl_msg_name_crc_list
case SCTP_STATE_COOKIE_WAIT:
SCTP_ADV_DBG ("Received INIT chunk while in COOKIE_WAIT state");
sctp_prepare_initack_chunk_for_collision (sctp_conn,
- MAIN_SCTP_SUB_CONN_IDX,
+ SCTP_PRIMARY_PATH_IDX,
b0, ip4_addr, ip6_addr);
return SCTP_ERROR_NONE;
case SCTP_STATE_COOKIE_ECHOED:
SCTP_ADV_DBG ("Received INIT chunk while in COOKIE_ECHOED state");
if (sctp_conn->forming_association_changed == 0)
sctp_prepare_initack_chunk_for_collision (sctp_conn,
- MAIN_SCTP_SUB_CONN_IDX,
+ SCTP_PRIMARY_PATH_IDX,
b0, ip4_addr, ip6_addr);
else
sctp_prepare_abort_for_collision (sctp_conn,
- MAIN_SCTP_SUB_CONN_IDX, b0,
+ SCTP_PRIMARY_PATH_IDX, b0,
ip4_addr, ip6_addr);
return SCTP_ERROR_NONE;
}
sctp_sub_connection_add_ip4 (vlib_get_main (),
&sctp_conn->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].connection.
+ [SCTP_PRIMARY_PATH_IDX].connection.
lcl_ip.ip4, &ipv4->address);
break;
sctp_sub_connection_add_ip6 (vlib_get_main (),
&sctp_conn->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].connection.
+ [SCTP_PRIMARY_PATH_IDX].connection.
lcl_ip.ip6, &ipv6->address);
break;
}
/* Reuse buffer to make init-ack and send */
- sctp_prepare_initack_chunk (sctp_conn, MAIN_SCTP_SUB_CONN_IDX, b0, ip4_addr,
+ sctp_prepare_initack_chunk (sctp_conn, SCTP_PRIMARY_PATH_IDX, b0, ip4_addr,
ip6_addr);
return SCTP_ERROR_NONE;
}
sctp_sub_connection_add_ip4 (vlib_get_main (),
&sctp_conn->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].connection.
+ [SCTP_PRIMARY_PATH_IDX].connection.
lcl_ip.ip4, &ipv4->address);
break;
sctp_sub_connection_add_ip6 (vlib_get_main (),
&sctp_conn->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].connection.
+ [SCTP_PRIMARY_PATH_IDX].connection.
lcl_ip.ip6, &ipv6->address);
break;
always_inline u8
sctp_is_sack_delayable (sctp_connection_t * sctp_conn, u8 idx, u8 is_gapping)
{
+ if (sctp_conn->conn_config.never_delay_sack)
+ {
+ SCTP_CONN_TRACKING_DBG ("sctp_conn->conn_config.never_delay_sack = ON");
+ return 0;
+ }
+
/* Section 4.4 of the RFC4960 */
if (sctp_conn->state == SCTP_STATE_SHUTDOWN_SENT)
{
{
SCTP_CONN_TRACKING_DBG
("GAPPING: CONN_INDEX = %u, sctp_conn->next_tsn_expected = %u, tsn = %u, diff = %u",
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.c_index,
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.c_index,
sctp_conn->next_tsn_expected, tsn,
sctp_conn->next_tsn_expected - tsn);
* - STOP T2_SHUTDOWN timer
* - SEND SHUTDOWN_COMPLETE chunk
*/
- sctp_timer_reset (sctp_conn, MAIN_SCTP_SUB_CONN_IDX,
- SCTP_TIMER_T2_SHUTDOWN);
+ sctp_timer_reset (sctp_conn, SCTP_PRIMARY_PATH_IDX, SCTP_TIMER_T2_SHUTDOWN);
sctp_send_shutdown_complete (sctp_conn, idx, b0);
child_conn =
sctp_lookup_connection (sctp_listener->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].c_fib_index, b0,
+ [SCTP_PRIMARY_PATH_IDX].c_fib_index, b0,
my_thread_index, is_ip4);
if (PREDICT_FALSE (child_conn->state != SCTP_STATE_CLOSED))
{
SCTP_DBG
("conn_index = %u: child_conn->state != SCTP_STATE_CLOSED.... STATE=%s",
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].
connection.c_index,
sctp_state_to_string (child_conn->state));
error0 = SCTP_ERROR_CREATE_EXISTS;
/* Create child session and send SYN-ACK */
child_conn = sctp_connection_new (my_thread_index);
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].subconn_idx =
- MAIN_SCTP_SUB_CONN_IDX;
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_lcl_port =
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].subconn_idx =
+ SCTP_PRIMARY_PATH_IDX;
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_lcl_port =
sctp_hdr->dst_port;
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_rmt_port =
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_rmt_port =
sctp_hdr->src_port;
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_is_ip4 = is_ip4;
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.proto =
- sctp_listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection.proto;
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].PMTU =
- sctp_listener->sub_conn[MAIN_SCTP_SUB_CONN_IDX].PMTU;
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_is_ip4 = is_ip4;
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.proto =
+ sctp_listener->sub_conn[SCTP_PRIMARY_PATH_IDX].connection.proto;
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].PMTU =
+ sctp_listener->sub_conn[SCTP_PRIMARY_PATH_IDX].PMTU;
child_conn->state = SCTP_STATE_CLOSED;
if (is_ip4)
{
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_lcl_ip4.as_u32 =
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_lcl_ip4.as_u32 =
ip4_hdr->dst_address.as_u32;
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_rmt_ip4.as_u32 =
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].c_rmt_ip4.as_u32 =
ip4_hdr->src_address.as_u32;
}
else
{
clib_memcpy (&child_conn->
- sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_lcl_ip6,
+ sub_conn[SCTP_PRIMARY_PATH_IDX].c_lcl_ip6,
&ip6_hdr->dst_address, sizeof (ip6_address_t));
clib_memcpy (&child_conn->
- sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_rmt_ip6,
+ sub_conn[SCTP_PRIMARY_PATH_IDX].c_rmt_ip6,
&ip6_hdr->src_address, sizeof (ip6_address_t));
}
{
SCTP_DBG
("conn_index = %u: chunk_type != INIT... chunk_type=%s",
- child_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].
+ child_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].
connection.c_index, sctp_chunk_to_string (chunk_type));
error0 = SCTP_ERROR_UNKOWN_CHUNK;
{
if (stream_session_accept
(&child_conn->
- sub_conn[MAIN_SCTP_SUB_CONN_IDX].connection,
+ sub_conn[SCTP_PRIMARY_PATH_IDX].connection,
sctp_listener->
- sub_conn[MAIN_SCTP_SUB_CONN_IDX].c_s_index, 0))
+ sub_conn[SCTP_PRIMARY_PATH_IDX].c_s_index, 0))
{
clib_warning ("session accept fail");
sctp_connection_cleanup (child_conn);
case OPERATION_ERROR:
error0 =
sctp_handle_operation_err (sctp_hdr, child_conn,
- MAIN_SCTP_SUB_CONN_IDX, b0,
- &next0);
+ SCTP_PRIMARY_PATH_IDX, b0, &next0);
break;
}
clib_warning
("Received an unrecognized chunk; sending back OPERATION_ERROR chunk");
- sctp_prepare_operation_error (sctp_conn, MAIN_SCTP_SUB_CONN_IDX,
+ sctp_prepare_operation_error (sctp_conn, SCTP_PRIMARY_PATH_IDX,
b0, UNRECOGNIZED_CHUNK_TYPE);
error0 = SCTP_ERROR_UNKOWN_CHUNK;
SCTP_DBG_STATE_MACHINE
("S_INDEX = %u, C_INDEX = %u, TRANS_CONN = %p, SCTP_CONN = %p, CURRENT_CONNECTION_STATE = %s,"
"CHUNK_TYPE_RECEIVED = %s " "NEXT_PHASE = %s",
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].
connection.s_index,
- sctp_conn->sub_conn[MAIN_SCTP_SUB_CONN_IDX].
+ sctp_conn->sub_conn[SCTP_PRIMARY_PATH_IDX].
connection.c_index, trans_conn, sctp_conn,
sctp_state_to_string (sctp_conn->state),
sctp_chunk_to_string (chunk_type), phase_to_string (next0));
clib_warning ("Reached MAX_INIT_RETRANS times. Aborting connection.");
session_stream_connect_notify (&sctp_conn->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].connection, 1);
+ [SCTP_PRIMARY_PATH_IDX].connection, 1);
sctp_connection_timers_reset (sctp_conn);
return;
b = vlib_get_buffer (vm, bi);
- u8 idx = MAIN_SCTP_SUB_CONN_IDX;
+ u8 idx = SCTP_PRIMARY_PATH_IDX;
sctp_init_buffer (vm, b);
sctp_prepare_cookie_echo_chunk (sctp_conn, idx, b, 0);
if (PREDICT_FALSE (sctp_get_free_buffer_index (tm, &bi)))
return;
- u8 idx = MAIN_SCTP_SUB_CONN_IDX;
+ u8 idx = SCTP_PRIMARY_PATH_IDX;
b = vlib_get_buffer (vm, bi);
sctp_init_buffer (vm, b);
clib_warning ("Reached MAX_INIT_RETRANS times. Aborting connection.");
session_stream_connect_notify (&sctp_conn->sub_conn
- [MAIN_SCTP_SUB_CONN_IDX].connection, 1);
+ [SCTP_PRIMARY_PATH_IDX].connection, 1);
sctp_connection_timers_reset (sctp_conn);
return;
b = vlib_get_buffer (vm, bi);
- u8 idx = MAIN_SCTP_SUB_CONN_IDX;
+ u8 idx = SCTP_PRIMARY_PATH_IDX;
sctp_init_buffer (vm, b);
sctp_prepare_init_chunk (sctp_conn, idx, b);