Skip to content
Snippets Groups Projects
Commit edeeadae authored by hoelscher's avatar hoelscher
Browse files

merge with master

parents e9adbe8a 8695eccf
No related branches found
No related tags found
No related merge requests found
...@@ -210,6 +210,11 @@ sack_freq return SACK_FREQ; ...@@ -210,6 +210,11 @@ sack_freq return SACK_FREQ;
srto_initial return SRTO_INITIAL; srto_initial return SRTO_INITIAL;
srto_max return SRTO_MAX; srto_max return SRTO_MAX;
srto_min return SRTO_MIN; srto_min return SRTO_MIN;
sasoc_asocmaxrxt return SASOC_ASOCMAXRXT;
sasoc_number_peer_destinations return SASOC_NUMBER_PEER_DESTINATIONS;
sasoc_peer_rwnd return SASOC_PEER_RWND;
sasoc_local_rwnd return SASOC_LOCAL_RWND;
sasoc_cookie_life return SASOC_COOKIE_LIFE;
sinit_num_ostreams return SINIT_NUM_OSTREAMS; sinit_num_ostreams return SINIT_NUM_OSTREAMS;
sinit_max_instreams return SINIT_MAX_INSTREAMS; sinit_max_instreams return SINIT_MAX_INSTREAMS;
sinit_max_attempts return SINIT_MAX_ATTEMPTS; sinit_max_attempts return SINIT_MAX_ATTEMPTS;
......
...@@ -535,6 +535,8 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, ...@@ -535,6 +535,8 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string,
%token <reserved> STALENESS CHK PARAM UNRECOGNIZED_PARAMETERS %token <reserved> STALENESS CHK PARAM UNRECOGNIZED_PARAMETERS
%token <reserved> SPP_ADDRESS SPP_HBINTERVAL SPP_PATHMAXRXT SPP_PATHMTU %token <reserved> SPP_ADDRESS SPP_HBINTERVAL SPP_PATHMAXRXT SPP_PATHMTU
%token <reserved> SPP_FLAGS SPP_IPV6_FLOWLABEL_ SPP_DSCP_ %token <reserved> SPP_FLAGS SPP_IPV6_FLOWLABEL_ SPP_DSCP_
%token <reserved> SASOC_ASOCMAXRXT SASOC_NUMBER_PEER_DESTINATIONS SASOC_PEER_RWND
%token <reserved> SASOC_LOCAL_RWND SASOC_COOKIE_LIFE
%token <floating> FLOAT %token <floating> FLOAT
%token <integer> INTEGER HEX_INTEGER %token <integer> INTEGER HEX_INTEGER
%token <string> WORD STRING BACK_QUOTED CODE IPV4_ADDR IPV6_ADDR %token <string> WORD STRING BACK_QUOTED CODE IPV4_ADDR IPV6_ADDR
...@@ -581,6 +583,8 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, ...@@ -581,6 +583,8 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string,
%type <expression> sctp_paddrparams spp_address spp_hbinterval spp_pathmtu spp_pathmaxrxt %type <expression> sctp_paddrparams spp_address spp_hbinterval spp_pathmtu spp_pathmaxrxt
%type <expression> spp_flags spp_ipv6_flowlabel spp_dscp %type <expression> spp_flags spp_ipv6_flowlabel spp_dscp
%type <expression> spinfo_address spinfo_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu %type <expression> spinfo_address spinfo_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu
%type <expression> sasoc_asocmaxrxt sasoc_number_peer_destinations sasoc_peer_rwnd
%type <expression> sasoc_local_rwnd sasoc_cookie_life sctp_assocparams
%type <errno_info> opt_errno %type <errno_info> opt_errno
%type <chunk_list> sctp_chunk_list_spec %type <chunk_list> sctp_chunk_list_spec
%type <chunk_list_item> sctp_chunk_spec %type <chunk_list_item> sctp_chunk_spec
...@@ -2363,6 +2367,9 @@ expression ...@@ -2363,6 +2367,9 @@ expression
| sctp_paddrparams { | sctp_paddrparams {
$$ = $1; $$ = $1;
} }
| sctp_assocparams {
$$ = $1;
}
; ;
decimal_integer decimal_integer
...@@ -2892,6 +2899,72 @@ sctp_paddrparams ...@@ -2892,6 +2899,72 @@ sctp_paddrparams
} }
; ;
sasoc_asocmaxrxt
: SASOC_ASOCMAXRXT '=' INTEGER {
if (!is_valid_u16($3)) {
semantic_error("sasoc_asocmaxrxt out of range");
}
$$ = new_integer_expression($3, "%hu");
}
| SASOC_ASOCMAXRXT '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
sasoc_number_peer_destinations
: SASOC_NUMBER_PEER_DESTINATIONS '=' INTEGER {
if (!is_valid_u16($3)) {
semantic_error("sasoc_number_peer_destinations out of range");
}
$$ = new_integer_expression($3, "%hu");
}
| SASOC_NUMBER_PEER_DESTINATIONS '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
sasoc_peer_rwnd
: SASOC_PEER_RWND '=' INTEGER {
if (!is_valid_u32($3)) {
semantic_error("sasoc_peer_rwnd out of range");
}
$$ = new_integer_expression($3, "%u");
}
| SASOC_PEER_RWND '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
sasoc_local_rwnd
: SASOC_LOCAL_RWND '=' INTEGER {
if (!is_valid_u32($3)) {
semantic_error("sasoc_local_rwnd out of range");
}
$$ = new_integer_expression($3, "%u");
}
| SASOC_LOCAL_RWND '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
sasoc_cookie_life
: SASOC_COOKIE_LIFE '=' INTEGER {
if (!is_valid_u32($3)) {
semantic_error("sasoc_cookie_life out of range");
}
$$ = new_integer_expression($3, "%u");
}
| SASOC_COOKIE_LIFE '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
sctp_assocparams
: '{' sasoc_asocmaxrxt ',' sasoc_number_peer_destinations ',' sasoc_peer_rwnd ',' sasoc_local_rwnd ',' sasoc_cookie_life '}' {
#ifdef SCTP_ASSOCINFO
$$ = new_expression(EXPR_SCTP_ASSOCPARAMS);
$$->value.sctp_assocparams = calloc(1, sizeof(struct sctp_assocparams_expr));
$$->value.sctp_assocparams->sasoc_asocmaxrxt = $2;
$$->value.sctp_assocparams->sasoc_number_peer_destinations = $4;
$$->value.sctp_assocparams->sasoc_peer_rwnd = $6;
$$->value.sctp_assocparams->sasoc_local_rwnd = $8;
$$->value.sctp_assocparams->sasoc_cookie_life = $10;
#elif
$$ = NULL;
#endif
}
;
opt_errno opt_errno
: { $$ = NULL; } : { $$ = NULL; }
| WORD note { | WORD note {
......
...@@ -2154,6 +2154,76 @@ static int check_sctp_stream_value(struct sctp_stream_value_expr *expr, ...@@ -2154,6 +2154,76 @@ static int check_sctp_stream_value(struct sctp_stream_value_expr *expr,
} }
#endif #endif
#ifdef SCTP_ASSOCINFO
static int check_sctp_assocparams(struct sctp_assocparams_expr *expr,
struct sctp_assocparams *sctp_assocparams,
char **error)
{
if (expr->sasoc_asocmaxrxt->type != EXPR_ELLIPSIS) {
u16 sasoc_asocmaxrxt;
if (get_u16(expr->sasoc_asocmaxrxt, &sasoc_asocmaxrxt, error)) {
return STATUS_ERR;
}
if (sctp_assocparams->sasoc_asocmaxrxt != sasoc_asocmaxrxt) {
asprintf(error, "Bad getsockopt sctp_assocparams.sasoc_asocmaxrxt: expected: %hu actual: %hu",
sasoc_asocmaxrxt, sctp_assocparams->sasoc_asocmaxrxt);
return STATUS_ERR;
}
}
if (expr->sasoc_number_peer_destinations->type != EXPR_ELLIPSIS) {
u16 sasoc_number_peer_destinations;
if (get_u16(expr->sasoc_number_peer_destinations, &sasoc_number_peer_destinations, error)) {
return STATUS_ERR;
}
if (sctp_assocparams->sasoc_number_peer_destinations != sasoc_number_peer_destinations) {
asprintf(error, "Bad getsockopt sctp_assocparams.sasoc_number_peer_destinations: expected: %hu actual: %hu",
sasoc_number_peer_destinations, sctp_assocparams->sasoc_number_peer_destinations);
return STATUS_ERR;
}
}
if (expr->sasoc_peer_rwnd->type != EXPR_ELLIPSIS) {
u32 sasoc_peer_rwnd;
if (get_u32(expr->sasoc_peer_rwnd, &sasoc_peer_rwnd, error)) {
return STATUS_ERR;
}
if (sctp_assocparams->sasoc_peer_rwnd != sasoc_peer_rwnd) {
asprintf(error, "Bad getsockopt sctp_assocparams.sasoc_peer_rwnd: expected: %u actual: %u",
sasoc_peer_rwnd, sctp_assocparams->sasoc_peer_rwnd);
return STATUS_ERR;
}
}
if (expr->sasoc_local_rwnd->type != EXPR_ELLIPSIS) {
u32 sasoc_local_rwnd;
if (get_u32(expr->sasoc_local_rwnd, &sasoc_local_rwnd, error)) {
return STATUS_ERR;
}
if (sctp_assocparams->sasoc_local_rwnd != sasoc_local_rwnd) {
asprintf(error, "Bad getsockopt sctp_assocparams.sasoc_local_rwnd: expected: %u actual: %u",
sasoc_local_rwnd, sctp_assocparams->sasoc_local_rwnd);
return STATUS_ERR;
}
}
if (expr->sasoc_cookie_life->type != EXPR_ELLIPSIS) {
u32 sasoc_cookie_life;
if (get_u32(expr->sasoc_cookie_life, &sasoc_cookie_life, error)) {
return STATUS_ERR;
}
if (sctp_assocparams->sasoc_cookie_life != sasoc_cookie_life) {
asprintf(error, "Bad getsockopt sctp_assocparams.sasoc_cookie_life: expected: %u actual: %u",
sasoc_cookie_life, sctp_assocparams->sasoc_cookie_life);
return STATUS_ERR;
}
}
return STATUS_OK;
}
#endif
static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
struct expression_list *args, char **error) struct expression_list *args, char **error)
{ {
...@@ -2189,6 +2259,12 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2189,6 +2259,12 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
live_optlen = (socklen_t)sizeof(struct sctp_rtoinfo); live_optlen = (socklen_t)sizeof(struct sctp_rtoinfo);
((struct sctp_rtoinfo*)live_optval)->srto_assoc_id = 0; ((struct sctp_rtoinfo*)live_optval)->srto_assoc_id = 0;
#endif #endif
#ifdef SCTP_ASSOCINFO
} else if (val_expression->type == EXPR_SCTP_ASSOCPARAMS) {
live_optval = malloc(sizeof(struct sctp_assocparams));
live_optlen = (socklen_t)sizeof(struct sctp_assocparams);
((struct sctp_assocparams*) live_optval)->sasoc_assoc_id = 0;
#endif
#ifdef SCTP_INITMSG #ifdef SCTP_INITMSG
} else if (val_expression->type == EXPR_SCTP_INITMSG) { } else if (val_expression->type == EXPR_SCTP_INITMSG) {
live_optval = malloc(sizeof(struct sctp_initmsg)); live_optval = malloc(sizeof(struct sctp_initmsg));
...@@ -2240,7 +2316,7 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2240,7 +2316,7 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
if (expr_params->spp_address->type == EXPR_ELLIPSIS) { if (expr_params->spp_address->type == EXPR_ELLIPSIS) {
socklen_t len_addr = sizeof(live_params->spp_address); socklen_t len_addr = sizeof(live_params->spp_address);
if (getpeername(live_fd, (struct sockaddr*) &live_params->spp_address, &len_addr)) { if (getpeername(live_fd, (struct sockaddr*) &live_params->spp_address, &len_addr)) {
asprintf(error, "Bad setsockopt, bad get primary peer address"); asprintf(error, "Bad getsockopt, bad get primary peer address");
free(live_params); free(live_params);
return STATUS_ERR; return STATUS_ERR;
} }
...@@ -2249,7 +2325,7 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2249,7 +2325,7 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
} else if (expr_params->spp_address->type == EXPR_SOCKET_ADDRESS_IPV6) { } else if (expr_params->spp_address->type == EXPR_SOCKET_ADDRESS_IPV6) {
memcpy(&live_params->spp_address, expr_params->spp_address->value.socket_address_ipv6, sizeof(struct sockaddr_in6)); memcpy(&live_params->spp_address, expr_params->spp_address->value.socket_address_ipv6, sizeof(struct sockaddr_in6));
} else { } else {
asprintf(error, "Bad setsockopt, bad get input for spp_address"); asprintf(error, "Bad getsockopt, bad get input for spp_address");
free(live_params); free(live_params);
return STATUS_ERR; return STATUS_ERR;
} }
...@@ -2306,6 +2382,13 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2306,6 +2382,13 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
return STATUS_ERR; return STATUS_ERR;
} }
#endif #endif
#ifdef SCTP_ASSOCINFO
} else if (val_expression->type == EXPR_SCTP_ASSOCPARAMS) {
if (check_sctp_assocparams(val_expression->value.sctp_assocparams, live_optval, error)) {
free(live_optval);
return STATUS_ERR;
}
#endif
#ifdef SCTP_INITMSG #ifdef SCTP_INITMSG
} else if (val_expression->type == EXPR_SCTP_INITMSG) { } else if (val_expression->type == EXPR_SCTP_INITMSG) {
if (check_sctp_initmsg(val_expression->value.sctp_initmsg, live_optval, error)) { if (check_sctp_initmsg(val_expression->value.sctp_initmsg, live_optval, error)) {
...@@ -2377,6 +2460,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2377,6 +2460,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
#ifdef SCTP_RTOINFO #ifdef SCTP_RTOINFO
struct sctp_rtoinfo rtoinfo; struct sctp_rtoinfo rtoinfo;
#endif #endif
#ifdef SCTP_ASSOCINFO
struct sctp_assocparams assocparams;
#endif
#ifdef SCTP_INITMSG #ifdef SCTP_INITMSG
struct sctp_initmsg initmsg; struct sctp_initmsg initmsg;
#endif #endif
...@@ -2453,6 +2539,32 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2453,6 +2539,32 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
optval = &rtoinfo; optval = &rtoinfo;
break; break;
#endif #endif
#ifdef SCTP_ASSOCINFO
case EXPR_SCTP_ASSOCPARAMS:
assocparams.sasoc_assoc_id = 0;
if (get_u16(val_expression->value.sctp_assocparams->sasoc_asocmaxrxt,
&assocparams.sasoc_asocmaxrxt, error)) {
return STATUS_ERR;
}
if (get_u16(val_expression->value.sctp_assocparams->sasoc_number_peer_destinations,
&assocparams.sasoc_number_peer_destinations, error)) {
return STATUS_ERR;
}
if (get_u32(val_expression->value.sctp_assocparams->sasoc_peer_rwnd,
&assocparams.sasoc_peer_rwnd, error)) {
return STATUS_ERR;
}
if (get_u32(val_expression->value.sctp_assocparams->sasoc_local_rwnd,
&assocparams.sasoc_local_rwnd, error)) {
return STATUS_ERR;
}
if (get_u32(val_expression->value.sctp_assocparams->sasoc_cookie_life,
&assocparams.sasoc_cookie_life, error)) {
return STATUS_ERR;
}
optval = &assocparams;
break;
#endif
#ifdef SCTP_INITMSG #ifdef SCTP_INITMSG
case EXPR_SCTP_INITMSG: case EXPR_SCTP_INITMSG:
if (get_u16(val_expression->value.sctp_initmsg->sinit_num_ostreams, if (get_u16(val_expression->value.sctp_initmsg->sinit_num_ostreams,
......
...@@ -85,7 +85,10 @@ struct expression_type_entry expression_type_table[] = { ...@@ -85,7 +85,10 @@ struct expression_type_entry expression_type_table[] = {
{ EXPR_SCTP_PEER_ADDR_PARAMS, "sctp_peer_addr_params"}, { EXPR_SCTP_PEER_ADDR_PARAMS, "sctp_peer_addr_params"},
#endif #endif
#ifdef SCTP_SS_VALUE #ifdef SCTP_SS_VALUE
{ EXPR_SCTP_STREAM_VALUE, "sctp_stream_value"}, { EXPR_SCTP_STREAM_VALUE, "sctp_stream_value"},
#endif
#ifdef SCTP_ASSOCINFO
{ EXPR_SCTP_ASSOCPARAMS, "sctp_assocparams"},
#endif #endif
{ NUM_EXPR_TYPES, NULL} { NUM_EXPR_TYPES, NULL}
}; };
...@@ -368,6 +371,15 @@ void free_expression(struct expression *expression) ...@@ -368,6 +371,15 @@ void free_expression(struct expression *expression)
free_expression(expression->value.sctp_stream_value->stream_id); free_expression(expression->value.sctp_stream_value->stream_id);
free_expression(expression->value.sctp_stream_value->stream_value); free_expression(expression->value.sctp_stream_value->stream_value);
break; break;
#endif
#ifdef SCTP_ASSOCINFO
case EXPR_SCTP_ASSOCPARAMS:
free_expression(expression->value.sctp_assocparams->sasoc_asocmaxrxt);
free_expression(expression->value.sctp_assocparams->sasoc_number_peer_destinations);
free_expression(expression->value.sctp_assocparams->sasoc_peer_rwnd);
free_expression(expression->value.sctp_assocparams->sasoc_local_rwnd);
free_expression(expression->value.sctp_assocparams->sasoc_cookie_life);
break;
#endif #endif
case EXPR_WORD: case EXPR_WORD:
assert(expression->value.string); assert(expression->value.string);
...@@ -857,6 +869,48 @@ static int evaluate_sctp_stream_value_expression(struct expression *in, ...@@ -857,6 +869,48 @@ static int evaluate_sctp_stream_value_expression(struct expression *in,
} }
#endif #endif
#ifdef SCTP_ASSOCINFO
static int evaluate_sctp_accocparams_expression(struct expression *in,
struct expression *out,
char **error)
{
struct sctp_assocparams_expr *in_params;
struct sctp_assocparams_expr *out_params;
assert(in->type == EXPR_SCTP_ASSOCPARAMS);
assert(in->value.sctp_assocparams);
assert(out->type == EXPR_SCTP_ASSOCPARAMS);
out->value.sctp_assocparams = calloc(1, sizeof(struct sctp_assocparams_expr));
in_params = in->value.sctp_assocparams;
out_params = out->value.sctp_assocparams;
if (evaluate(in_params->sasoc_asocmaxrxt,
&out_params->sasoc_asocmaxrxt,
error))
return STATUS_ERR;
if (evaluate(in_params->sasoc_number_peer_destinations,
&out_params->sasoc_number_peer_destinations,
error))
return STATUS_ERR;
if (evaluate(in_params->sasoc_peer_rwnd,
&out_params->sasoc_peer_rwnd,
error))
return STATUS_ERR;
if (evaluate(in_params->sasoc_local_rwnd,
&out_params->sasoc_local_rwnd,
error))
return STATUS_ERR;
if (evaluate(in_params->sasoc_cookie_life,
&out_params->sasoc_cookie_life,
error))
return STATUS_ERR;
return STATUS_OK;
}
#endif
static int evaluate(struct expression *in, static int evaluate(struct expression *in,
struct expression **out_ptr, char **error) struct expression **out_ptr, char **error)
{ {
...@@ -885,6 +939,11 @@ static int evaluate(struct expression *in, ...@@ -885,6 +939,11 @@ static int evaluate(struct expression *in,
evaluate_sctp_rtoinfo_expression(in, out, error); evaluate_sctp_rtoinfo_expression(in, out, error);
break; break;
#endif #endif
#ifdef SCTP_ASSOCINFO
case EXPR_SCTP_ASSOCPARAMS:
evaluate_sctp_accocparams_expression(in, out, error);
break;
#endif
#ifdef SCTP_INITMSG #ifdef SCTP_INITMSG
case EXPR_SCTP_INITMSG: case EXPR_SCTP_INITMSG:
evaluate_sctp_initmsg_expression(in, out, error); evaluate_sctp_initmsg_expression(in, out, error);
......
...@@ -67,6 +67,9 @@ enum expression_t { ...@@ -67,6 +67,9 @@ enum expression_t {
#endif #endif
#ifdef SCTP_PEER_ADDR_PARAMS #ifdef SCTP_PEER_ADDR_PARAMS
EXPR_SCTP_PEER_ADDR_PARAMS, /* struct for sctp_paddrparams for SCTP_PEER_ADDR_PARAMS*/ EXPR_SCTP_PEER_ADDR_PARAMS, /* struct for sctp_paddrparams for SCTP_PEER_ADDR_PARAMS*/
#endif
#ifdef SCTP_ASSOCINFO
EXPR_SCTP_ASSOCPARAMS, /* struct sctp_assocparams for SCTP_ASSOCINFO */
#endif #endif
NUM_EXPR_TYPES, NUM_EXPR_TYPES,
}; };
...@@ -108,6 +111,9 @@ struct expression { ...@@ -108,6 +111,9 @@ struct expression {
#endif #endif
#ifdef SCTP_SS_VALUE #ifdef SCTP_SS_VALUE
struct sctp_stream_value_expr *sctp_stream_value; struct sctp_stream_value_expr *sctp_stream_value;
#endif
#ifdef SCTP_ASSOCINFO
struct sctp_assocparams_expr *sctp_assocparams;
#endif #endif
} value; } value;
const char *format; /* the printf format for printing the value */ const char *format; /* the printf format for printing the value */
...@@ -164,7 +170,6 @@ struct sctp_rtoinfo_expr { ...@@ -164,7 +170,6 @@ struct sctp_rtoinfo_expr {
}; };
#endif #endif
#ifdef SCTP_INITMSG #ifdef SCTP_INITMSG
/* Parse tree for a sctp_initmsg struct in a [gs]etsockopt syscall. */ /* Parse tree for a sctp_initmsg struct in a [gs]etsockopt syscall. */
struct sctp_initmsg_expr { struct sctp_initmsg_expr {
...@@ -232,6 +237,17 @@ struct sctp_paddrparams_expr { ...@@ -232,6 +237,17 @@ struct sctp_paddrparams_expr {
struct expression *spp_dscp; struct expression *spp_dscp;
}; };
#ifdef SCTP_ASSOCINFO
/* Parse tree for sctp_assocparams struct in [gs]etsockopt syscall. */
struct sctp_assocparams_expr {
struct expression *sasoc_asocmaxrxt;
struct expression *sasoc_number_peer_destinations;
struct expression *sasoc_peer_rwnd;
struct expression *sasoc_local_rwnd;
struct expression *sasoc_cookie_life;
};
#endif
/* The errno-related info from strace to summarize a system call error */ /* The errno-related info from strace to summarize a system call error */
struct errno_spec { struct errno_spec {
const char *errno_macro; /* errno symbol (C macro name) */ const char *errno_macro; /* errno symbol (C macro name) */
......
...@@ -80,6 +80,7 @@ struct int_symbol platform_symbols_table[] = { ...@@ -80,6 +80,7 @@ struct int_symbol platform_symbols_table[] = {
/* /usr/include/netinet/sctp.h and /usr/include/netinet/sctp_uio.h */ /* /usr/include/netinet/sctp.h and /usr/include/netinet/sctp_uio.h */
{ SCTP_RTOINFO, "SCTP_RTOINFO" }, { SCTP_RTOINFO, "SCTP_RTOINFO" },
{ SCTP_ASSOCINFO, "SCTP_ASSOCINFO" },
{ SCTP_INITMSG, "SCTP_INITMSG" }, { SCTP_INITMSG, "SCTP_INITMSG" },
{ SCTP_NODELAY, "SCTP_NODELAY" }, { SCTP_NODELAY, "SCTP_NODELAY" },
{ SCTP_MAXSEG, "SCTP_MAXSEG" }, { SCTP_MAXSEG, "SCTP_MAXSEG" },
......
...@@ -101,6 +101,7 @@ struct int_symbol platform_symbols_table[] = { ...@@ -101,6 +101,7 @@ struct int_symbol platform_symbols_table[] = {
#endif #endif
{ SCTP_RTOINFO, "SCTP_RTOINFO" }, { SCTP_RTOINFO, "SCTP_RTOINFO" },
{ SCTP_ASSOCINFO, "SCTP_ASSOCINFO" },
{ SCTP_INITMSG, "SCTP_INITMSG" }, { SCTP_INITMSG, "SCTP_INITMSG" },
{ SCTP_NODELAY, "SCTP_NODELAY" }, { SCTP_NODELAY, "SCTP_NODELAY" },
{ SCTP_MAXSEG, "SCTP_MAXSEG" }, { SCTP_MAXSEG, "SCTP_MAXSEG" },
......
...@@ -96,6 +96,12 @@ spp_hbinterval=300, spp_pathmaxrxt=..., spp_pathmtu=1468, spp_flags=521, spp_ipv ...@@ -96,6 +96,12 @@ spp_hbinterval=300, spp_pathmaxrxt=..., spp_pathmtu=1468, spp_flags=521, spp_ipv
+0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, sinit_max_instreams=..., sinit_max_attempts=2, sinit_max_init_timeo=30}, [8]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, sinit_max_instreams=..., sinit_max_attempts=2, sinit_max_init_timeo=30}, [8]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, sinit_max_instreams=2, sinit_max_attempts=..., sinit_max_init_timeo=30}, [8]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, sinit_max_instreams=2, sinit_max_attempts=..., sinit_max_init_timeo=30}, [8]) = 0
+0 setsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=3, sasoc_peer_rwnd=1800, sasoc_local_rwnd=2000, sasoc_cookie_life=40000}, 20) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=1, sasoc_peer_rwnd=1500, sasoc_local_rwnd=1864135, sasoc_cookie_life=40000}, [20]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=..., sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., sasoc_local_rwnd=..., sasoc_cookie_life=40000}, [20]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., sasoc_local_rwnd=..., sasoc_cookie_life=40000}, [20]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., sasoc_local_rwnd=..., sasoc_cookie_life=...}, [20]) = 0
+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=1}, 12) = 0 +0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=1}, 12) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=1}, [12]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=1}, [12]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=..., sack_freq=1}, [12]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=..., sack_freq=1}, [12]) = 0
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment