X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=blobdiff_plain;f=src%2Fplugins%2Fsctp%2Fsctp.h;fp=src%2Fvnet%2Fsctp%2Fsctp.h;h=a99b01c1c0a41de865ea9500200409ee2ca20f67;hp=5cbe8d63fc90c98b2c47ef61a2e846b709e3d7ea;hb=3ffe6cadf;hpb=1cfcb78940580c8e3645fca0419d32f9286e942d diff --git a/src/vnet/sctp/sctp.h b/src/plugins/sctp/sctp.h similarity index 95% rename from src/vnet/sctp/sctp.h rename to src/plugins/sctp/sctp.h index 5cbe8d63fc9..a99b01c1c0a 100644 --- a/src/vnet/sctp/sctp.h +++ b/src/plugins/sctp/sctp.h @@ -17,18 +17,44 @@ #include #include -#include -#include +#include +#include #include #include +/* SCTP buffer opaque definition */ +typedef struct +{ + struct + { + u32 connection_index; + u16 sid; /**< Stream ID */ + u16 ssn; /**< Stream Sequence Number */ + u32 tsn; /**< Transmission Sequence Number */ + u16 hdr_offset; /**< offset relative to ip hdr */ + u16 data_offset; /**< offset relative to ip hdr */ + u16 data_len; /**< data len */ + u8 subconn_idx; /**< index of the sub_connection being used */ + u8 flags; + } sctp; +} sctp_buffer_opaque_t; + +STATIC_ASSERT (sizeof (sctp_buffer_opaque_t) <= + STRUCT_SIZE_OF (vnet_buffer_opaque_t, unused), + "sctp_buffer_opaque_t too large for vnet_buffer_opaque_t"); + +#define sctp_buffer_opaque(b) \ + ((sctp_buffer_opaque_t *)((u8 *)((b)->opaque) + \ +STRUCT_OFFSET_OF (vnet_buffer_opaque_t, unused))) + + /* SCTP timers */ #define foreach_sctp_timer \ - _(T1_INIT, "T1_INIT") \ - _(T1_COOKIE, "T1_COOKIE") \ + _(T1_INIT, "T1_INIT") \ + _(T1_COOKIE, "T1_COOKIE") \ _(T2_SHUTDOWN, "T2_SHUTDOWN") \ - _(T3_RXTX, "T3_RXTX") \ - _(T4_HEARTBEAT, "T4_HB") \ + _(T3_RXTX, "T3_RXTX") \ + _(T4_HEARTBEAT, "T4_HB") \ _(T5_SHUTDOWN_GUARD, "T5_SHUTDOWN_GUARD") typedef enum _sctp_timers @@ -65,7 +91,7 @@ sctp_timer_to_string (u8 timer_id) typedef enum _sctp_error { #define sctp_error(n,s) SCTP_ERROR_##n, -#include +#include #undef sctp_error SCTP_N_ERROR, } sctp_error_t; @@ -306,6 +332,7 @@ u8 *format_sctp_connection (u8 * s, va_list * args); u8 *format_sctp_scoreboard (u8 * s, va_list * args); u8 *format_sctp_header (u8 * s, va_list * args); u8 *format_sctp_tx_trace (u8 * s, va_list * args); +unformat_function_t unformat_pg_sctp_header; clib_error_t *sctp_init (vlib_main_t * vm); void sctp_connection_timers_init (sctp_connection_t * sctp_conn); @@ -533,6 +560,8 @@ typedef struct _sctp_main u32 sctp4_established_phase_node_index; u32 sctp6_established_phase_node_index; + + u16 msg_id_base; } sctp_main_t; extern sctp_main_t sctp_main; @@ -552,10 +581,11 @@ sctp_buffer_hdr (vlib_buffer_t * b) { ASSERT ((signed) b->current_data >= (signed) -VLIB_BUFFER_PRE_DATA_SIZE); return (sctp_header_t *) (b->data + b->current_data - + vnet_buffer (b)->sctp.hdr_offset); + + sctp_buffer_opaque (b)->sctp.hdr_offset); } clib_error_t *vnet_sctp_enable_disable (vlib_main_t * vm, u8 is_en); +clib_error_t *sctp_plugin_api_hookup (vlib_main_t * vm); always_inline sctp_connection_t * sctp_half_open_connection_get (u32 conn_index)