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

Add all fields of SCTP_PADDRPARAMS

parent 96b0d588
No related branches found
No related tags found
No related merge requests found
...@@ -229,6 +229,9 @@ spp_address return SPP_ADDRESS; ...@@ -229,6 +229,9 @@ spp_address return SPP_ADDRESS;
spp_hbinterval return SPP_HBINTERVAL; spp_hbinterval return SPP_HBINTERVAL;
spp_pathmaxrxt return SPP_PATHMAXRXT; spp_pathmaxrxt return SPP_PATHMAXRXT;
spp_pathmtu return SPP_PATHMTU; spp_pathmtu return SPP_PATHMTU;
spp_flags return SPP_FLAGS;
spp_ipv6_flowlabel return SPPIPV6FLOWLABEL;
spp_dscp return SPPDSCP;
CHUNK return CHUNK; CHUNK return CHUNK;
DATA return DATA; DATA return DATA;
INIT return INIT; INIT return INIT;
......
...@@ -530,7 +530,8 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, ...@@ -530,7 +530,8 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string,
%token <reserved> COOKIE_RECEIVED_WHILE_SHUTDOWN RESTART_WITH_NEW_ADDRESSES %token <reserved> COOKIE_RECEIVED_WHILE_SHUTDOWN RESTART_WITH_NEW_ADDRESSES
%token <reserved> USER_INITIATED_ABORT PROTOCOL_VIOLATION %token <reserved> USER_INITIATED_ABORT PROTOCOL_VIOLATION
%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 SPPIPV6FLOWLABEL SPPDSCP
%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
...@@ -573,6 +574,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, ...@@ -573,6 +574,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string,
%type <expression> sctp_initmsg sctp_assocval sctp_sackinfo %type <expression> sctp_initmsg sctp_assocval sctp_sackinfo
%type <expression> sctp_rtoinfo srto_initial srto_max srto_min sctp_paddrinfo %type <expression> sctp_rtoinfo srto_initial srto_max srto_min sctp_paddrinfo
%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> spinfo_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu %type <expression> spinfo_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu
%type <errno_info> opt_errno %type <errno_info> opt_errno
%type <chunk_list> sctp_chunk_list_spec %type <chunk_list> sctp_chunk_list_spec
...@@ -2585,7 +2587,8 @@ spp_hbinterval ...@@ -2585,7 +2587,8 @@ spp_hbinterval
if (!is_valid_u32($3)) { if (!is_valid_u32($3)) {
semantic_error("spp_hbinterval out of range"); semantic_error("spp_hbinterval out of range");
} }
$$ = new_integer_expression($3, "%u"); } $$ = new_integer_expression($3, "%u");
}
| SPP_HBINTERVAL '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } | SPP_HBINTERVAL '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
; ;
...@@ -2594,7 +2597,8 @@ spp_pathmtu ...@@ -2594,7 +2597,8 @@ spp_pathmtu
if (!is_valid_u32($3)) { if (!is_valid_u32($3)) {
semantic_error("spp_pathmtu out of range"); semantic_error("spp_pathmtu out of range");
} }
$$ = new_integer_expression($3, "%u"); } $$ = new_integer_expression($3, "%u");
}
| SPP_PATHMTU '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } | SPP_PATHMTU '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
; ;
...@@ -2603,18 +2607,47 @@ spp_pathmaxrxt ...@@ -2603,18 +2607,47 @@ spp_pathmaxrxt
if (!is_valid_u16($3)) { if (!is_valid_u16($3)) {
semantic_error("spp_pathmaxrxt out of range"); semantic_error("spp_pathmaxrxt out of range");
} }
$$ = new_integer_expression($3, "%hu"); } $$ = new_integer_expression($3, "%hu");
}
| SPP_PATHMAXRXT '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } | SPP_PATHMAXRXT '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
; ;
spp_flags
: SPP_FLAGS '=' expression { $$ = $3; }
;
spp_ipv6_flowlabel
: SPPIPV6FLOWLABEL '=' INTEGER {
if (!is_valid_u32($3)) {
semantic_error("spp_ipv6_flowlabel out of range");
}
$$ = new_integer_expression($3, "%u");
}
| SPPIPV6FLOWLABEL '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
spp_dscp
: SPPDSCP '=' INTEGER {
if (!is_valid_u8($3)) {
semantic_error("spp_dscp out of range");
}
$$ = new_integer_expression($3, "%hhu");
}
| SPPDSCP '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
sctp_paddrparams sctp_paddrparams
: '{' spp_address ',' spp_hbinterval ',' spp_pathmtu ',' spp_pathmaxrxt '}' { : '{' spp_address ',' spp_hbinterval ',' spp_pathmtu ',' spp_pathmaxrxt ',' spp_flags
',' spp_ipv6_flowlabel ',' spp_dscp'}' {
$$ = new_expression(EXPR_SCTP_PEER_ADDR_PARAMS); $$ = new_expression(EXPR_SCTP_PEER_ADDR_PARAMS);
$$->value.sctp_paddrparams = (struct sctp_paddrparams_expr*) calloc(1, sizeof(struct sctp_paddrparams_expr)); $$->value.sctp_paddrparams = (struct sctp_paddrparams_expr*) calloc(1, sizeof(struct sctp_paddrparams_expr));
$$->value.sctp_paddrparams->spp_address = $2; $$->value.sctp_paddrparams->spp_address = $2;
$$->value.sctp_paddrparams->spp_hbinterval = $4; $$->value.sctp_paddrparams->spp_hbinterval = $4;
$$->value.sctp_paddrparams->spp_pathmtu = $6; $$->value.sctp_paddrparams->spp_pathmtu = $6;
$$->value.sctp_paddrparams->spp_pathmaxrxt = $8; $$->value.sctp_paddrparams->spp_pathmaxrxt = $8;
$$->value.sctp_paddrparams->spp_flags = $10;
$$->value.sctp_paddrparams->spp_ipv6_flowlabel = $12;
$$->value.sctp_paddrparams->spp_dscp = $14;
} }
; ;
......
...@@ -204,7 +204,7 @@ static int get_s32(struct expression *expression, ...@@ -204,7 +204,7 @@ static int get_s32(struct expression *expression,
* valid s16 or u16, and matches the expected type. Returns STATUS_OK on * valid s16 or u16, and matches the expected type. Returns STATUS_OK on
* success; on failure returns STATUS_ERR and sets error message. * success; on failure returns STATUS_ERR and sets error message.
*/ */
static short get_s16(struct expression *expression, static int get_s16(struct expression *expression,
s16 *value, char **error) s16 *value, char **error)
{ {
if (check_type(expression, EXPR_INTEGER, error)) if (check_type(expression, EXPR_INTEGER, error))
...@@ -220,6 +220,26 @@ static short get_s16(struct expression *expression, ...@@ -220,6 +220,26 @@ static short get_s16(struct expression *expression,
return STATUS_OK; return STATUS_OK;
} }
/* Sets the value from the expression argument, checking that it is a
* valid s8 or u8, and matches the expected type. Returns STATUS_OK on
* success; on failure returns STATUS_ERR and sets error message.
*/
static int get_s8(struct expression *expression,
s8 *value, char **error)
{
if (check_type(expression, EXPR_INTEGER, error))
return STATUS_ERR;
if ((expression->value.num > UCHAR_MAX) ||
(expression->value.num < SCHAR_MIN)) {
asprintf(error,
"Value out of range for 8-bit integer: %lld",
expression->value.num);
return STATUS_ERR;
}
*value = expression->value.num;
return STATUS_OK;
}
/* Return the value of the argument with the given index, and verify /* Return the value of the argument with the given index, and verify
* that it has the expected type. * that it has the expected type.
*/ */
...@@ -1900,9 +1920,13 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -1900,9 +1920,13 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
struct expression *spp_hbinterval = val_expression->value.sctp_paddrparams->spp_hbinterval; struct expression *spp_hbinterval = val_expression->value.sctp_paddrparams->spp_hbinterval;
struct expression *spp_pathmaxrxt = val_expression->value.sctp_paddrparams->spp_pathmaxrxt; struct expression *spp_pathmaxrxt = val_expression->value.sctp_paddrparams->spp_pathmaxrxt;
struct expression *spp_pathmtu = val_expression->value.sctp_paddrparams->spp_pathmtu; struct expression *spp_pathmtu = val_expression->value.sctp_paddrparams->spp_pathmtu;
struct expression *spp_flags = val_expression->value.sctp_paddrparams->spp_flags;
struct expression *spp_ipv6_flowlabel = val_expression->value.sctp_paddrparams->spp_ipv6_flowlabel;
struct expression *spp_dscp = val_expression->value.sctp_paddrparams->spp_dscp;
struct sctp_paddrparams *live_params = live_optval; struct sctp_paddrparams *live_params = live_optval;
int hbinterval, pathmtu; int hbinterval, pathmtu, flags, ipv6_flowlabel;
short pathmaxrxt; short pathmaxrxt;
s8 dscp;
if (spp_hbinterval->type != EXPR_ELLIPSIS) { if (spp_hbinterval->type != EXPR_ELLIPSIS) {
if (get_s32(spp_hbinterval, &hbinterval, error)) { if (get_s32(spp_hbinterval, &hbinterval, error)) {
free(live_optval); free(live_optval);
...@@ -1939,6 +1963,46 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -1939,6 +1963,46 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
return STATUS_ERR; return STATUS_ERR;
} }
} }
if (spp_flags->type != EXPR_ELLIPSIS) {
if (get_s32(spp_flags, &flags, error)) {
free(live_optval);
return STATUS_ERR;
}
if (live_params->spp_flags != flags) {
asprintf(error, "Bad getsockopt SCTP_PARAMS flags: expected: %u actual: %u",
flags, live_params->spp_flags);
free(live_optval);
return STATUS_ERR;
}
}
#ifdef SPP_IPV6_FLOWLABEL
if (spp_ipv6_flowlabel->type != EXPR_ELLIPSIS) {
if (get_s32(spp_ipv6_flowlabel, &ipv6_flowlabel, error)) {
free(live_optval);
return STATUS_ERR;
}
if (live_params->spp_ipv6_flowlabel != ipv6_flowlabel) {
asprintf(error, "Bad getsockopt SCTP_PARAMS ipv6_flowlabel: expected: %u actual: %u",
ipv6_flowlabel, live_params->spp_ipv6_flowlabel);
free(live_optval);
return STATUS_ERR;
}
}
#endif
#ifdef SPP_DSCP
if (spp_dscp->type != EXPR_ELLIPSIS) {
if (get_s8(spp_dscp, &dscp, error)) {
free(live_optval);
return STATUS_ERR;
}
if (live_params->spp_dscp != dscp) {
asprintf(error, "Bad getsockopt SCTP_PARAMS dscp: expected: %hhu actual: %hhu",
dscp, live_params->spp_dscp);
free(live_optval);
return STATUS_ERR;
}
}
#endif
#endif #endif
} else { } else {
if (*(int*)live_optval != script_optval) { if (*(int*)live_optval != script_optval) {
...@@ -2025,7 +2089,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2025,7 +2089,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
#endif #endif
#ifdef SCTP_STATUS #ifdef SCTP_STATUS
} else if (val_expression->type == EXPR_SCTP_STATUS) { } else if (val_expression->type == EXPR_SCTP_STATUS) {
optval = &val_expression->value.sctp_status; struct sctp_status *status = malloc(sizeof(struct sctp_status));
status->sstat_assoc_id = 0;
optval = status;
#endif #endif
#ifdef SCTP_PEER_ADDR_PARAMS #ifdef SCTP_PEER_ADDR_PARAMS
} else if (val_expression->type == EXPR_SCTP_PEER_ADDR_PARAMS) { } else if (val_expression->type == EXPR_SCTP_PEER_ADDR_PARAMS) {
...@@ -2056,14 +2122,57 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2056,14 +2122,57 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
return STATUS_ERR; return STATUS_ERR;
} }
if (expr_params->spp_hbinterval->type != EXPR_ELLIPSIS) { if (expr_params->spp_hbinterval->type != EXPR_ELLIPSIS) {
params->spp_hbinterval = expr_params->spp_hbinterval->value.num; int hbinterval;
if (get_s32(expr_params->spp_hbinterval, &hbinterval, error)) {
free(params);
return STATUS_ERR;
}
params->spp_hbinterval = hbinterval;
} }
if (expr_params->spp_pathmaxrxt->type != EXPR_ELLIPSIS) { if (expr_params->spp_pathmaxrxt->type != EXPR_ELLIPSIS) {
params->spp_pathmaxrxt = expr_params->spp_pathmaxrxt->value.num; short maxrxt;
if (get_s16(expr_params->spp_pathmaxrxt, &maxrxt, error)) {
free(params);
return STATUS_ERR;
}
params->spp_pathmaxrxt = maxrxt;
} }
if (expr_params->spp_pathmtu->type != EXPR_ELLIPSIS) { if (expr_params->spp_pathmtu->type != EXPR_ELLIPSIS) {
params->spp_pathmtu = expr_params->spp_pathmtu->value.num; int mtu;
if (get_s32(expr_params->spp_pathmtu, &mtu, error)) {
free(params);
return STATUS_ERR;
}
params->spp_pathmtu = mtu;
}
if (expr_params->spp_flags->type != EXPR_ELLIPSIS) {
int flags;
if (get_s32(expr_params->spp_flags, &flags, error)) {
free(params);
return STATUS_ERR;
}
params->spp_flags = flags;
} }
#ifdef SPP_IPV6_FLOWLABEL
if (expr_params->spp_ipv6_flowlabel->type != EXPR_ELLIPSIS) {
int flowlabel;
if (get_s32(expr_params->spp_ipv6_flowlabel, &flowlabel, error)) {
free(params);
return STATUS_ERR;
}
params->spp_ipv6_flowlabel = flowlabel;
}
#endif
#ifdef SPP_DSCP
if (expr_params->spp_dscp->type != EXPR_ELLIPSIS) {
s8 dscp;
if (get_s8(expr_params->spp_dscp, &dscp, error)) {
free(params);
return STATUS_ERR;
}
params->spp_dscp = dscp;
}
#endif
optval = params; optval = params;
#endif #endif
} else { } else {
...@@ -2072,7 +2181,6 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, ...@@ -2072,7 +2181,6 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
val_expression->type)); val_expression->type));
return STATUS_ERR; return STATUS_ERR;
} }
begin_syscall(state, syscall); begin_syscall(state, syscall);
result = setsockopt(live_fd, level, optname, optval, optlen); result = setsockopt(live_fd, level, optname, optval, optlen);
......
...@@ -336,7 +336,9 @@ void free_expression(struct expression *expression) ...@@ -336,7 +336,9 @@ void free_expression(struct expression *expression)
free(expression->value.sctp_paddrparams->spp_hbinterval); free(expression->value.sctp_paddrparams->spp_hbinterval);
free(expression->value.sctp_paddrparams->spp_pathmaxrxt); free(expression->value.sctp_paddrparams->spp_pathmaxrxt);
free(expression->value.sctp_paddrparams->spp_pathmtu); free(expression->value.sctp_paddrparams->spp_pathmtu);
free(expression->value.sctp_paddrparams->spp_sackdelay); free(expression->value.sctp_paddrparams->spp_flags);
free(expression->value.sctp_paddrparams->spp_ipv6_flowlabel);
free(expression->value.sctp_paddrparams->spp_dscp);
break; break;
#endif #endif
case EXPR_WORD: case EXPR_WORD:
...@@ -514,20 +516,8 @@ static int evaluate_sctp_status_expression(struct expression *in, ...@@ -514,20 +516,8 @@ static int evaluate_sctp_status_expression(struct expression *in,
in_status = in->value.sctp_status; in_status = in->value.sctp_status;
out_status = out->value.sctp_status; out_status = out->value.sctp_status;
if (in_status->sstat_state->type == EXPR_WORD) {
s64 val_state = 0; if (evaluate(in_status->sstat_state,
if (symbol_to_int(in_status->sstat_state->value.string,
&val_state, error) == STATUS_OK) {
out_status->sstat_state = (struct expression*)
calloc(1, sizeof(struct expression));
out_status->sstat_state->type = EXPR_INTEGER;
out_status->sstat_state->value.num = val_state;
} else {
asprintf(error, "bad expression unknown symbol for sstat_state %s",
in_status->sstat_state->value.string);
return STATUS_ERR;
}
} else if (evaluate(in_status->sstat_state,
&out_status->sstat_state, &out_status->sstat_state,
error)) error))
return STATUS_ERR; return STATUS_ERR;
...@@ -558,22 +548,7 @@ static int evaluate_sctp_status_expression(struct expression *in, ...@@ -558,22 +548,7 @@ static int evaluate_sctp_status_expression(struct expression *in,
if (evaluate(in_status->sstat_primary, if (evaluate(in_status->sstat_primary,
&out_status->sstat_primary, &out_status->sstat_primary,
error)) error))
return STATUS_ERR; return STATUS_ERR;
if (in_status->sstat_primary->type == EXPR_SCTP_PADDRINFO) {
struct sctp_paddrinfo_expr *paddrinfo = in_status->sstat_primary->value.sctp_paddrinfo;
if (paddrinfo->spinfo_state->type == EXPR_WORD) {
s64 val_state = 0;
if (symbol_to_int(paddrinfo->spinfo_state->value.string,
&val_state, error) == STATUS_OK) {
paddrinfo->spinfo_state->type = EXPR_INTEGER;
paddrinfo->spinfo_state->value.num = val_state;
} else {
asprintf(error, "bad expression unknown symbol for spinfo_state %s",
paddrinfo->spinfo_state->value.string);
return STATUS_ERR;
}
}
}
return STATUS_OK; return STATUS_OK;
} }
#endif #endif
...@@ -654,6 +629,10 @@ static int evaluate(struct expression *in, ...@@ -654,6 +629,10 @@ static int evaluate(struct expression *in,
case EXPR_SCTP_PADDRINFO: case EXPR_SCTP_PADDRINFO:
memcpy(&out->value.sctp_paddrinfo, &in->value.sctp_paddrinfo, memcpy(&out->value.sctp_paddrinfo, &in->value.sctp_paddrinfo,
sizeof(in->value.sctp_paddrinfo)); sizeof(in->value.sctp_paddrinfo));
if (evaluate(in->value.sctp_paddrinfo->spinfo_state,
&out->value.sctp_paddrinfo->spinfo_state,
error))
return STATUS_ERR;
break; break;
case EXPR_SCTP_STATUS: /* copy as-is */ case EXPR_SCTP_STATUS: /* copy as-is */
result = evaluate_sctp_status_expression(in, out, error); result = evaluate_sctp_status_expression(in, out, error);
...@@ -663,6 +642,10 @@ static int evaluate(struct expression *in, ...@@ -663,6 +642,10 @@ static int evaluate(struct expression *in,
case EXPR_SCTP_PEER_ADDR_PARAMS: case EXPR_SCTP_PEER_ADDR_PARAMS:
memcpy(&out->value.sctp_paddrparams, &in->value.sctp_paddrparams, memcpy(&out->value.sctp_paddrparams, &in->value.sctp_paddrparams,
sizeof(in->value.sctp_paddrparams)); sizeof(in->value.sctp_paddrparams));
if (evaluate(in->value.sctp_paddrparams->spp_flags,
&out->value.sctp_paddrparams->spp_flags,
error))
return STATUS_ERR;
break; break;
#endif #endif
case EXPR_WORD: case EXPR_WORD:
......
...@@ -184,7 +184,9 @@ struct sctp_paddrparams_expr { ...@@ -184,7 +184,9 @@ struct sctp_paddrparams_expr {
struct expression *spp_hbinterval; struct expression *spp_hbinterval;
struct expression *spp_pathmaxrxt; struct expression *spp_pathmaxrxt;
struct expression *spp_pathmtu; struct expression *spp_pathmtu;
struct expression *spp_sackdelay; struct expression *spp_flags;
struct expression *spp_ipv6_flowlabel;
struct expression *spp_dscp;
}; };
/* The errno-related info from strace to summarize a system call error */ /* The errno-related info from strace to summarize a system call error */
......
...@@ -102,7 +102,16 @@ struct int_symbol platform_symbols_table[] = { ...@@ -102,7 +102,16 @@ struct int_symbol platform_symbols_table[] = {
{ SCTP_UNCONFIRMED, "SCTP_UNCONFIRMED" }, { SCTP_UNCONFIRMED, "SCTP_UNCONFIRMED" },
{ SCTP_ACTIVE, "SCTP_ACTIVE" }, { SCTP_ACTIVE, "SCTP_ACTIVE" },
{ SCTP_INACTIVE, "SCTP_INACTIVE" }, { SCTP_INACTIVE, "SCTP_INACTIVE" },
{ SPP_HB_ENABLE, "SPP_HB_ENABLE" },
{ SPP_HB_DISABLE, "SPP_HB_DISABLE" },
{ SPP_HB_DEMAND, "SPP_HB_DEMAND" },
{ SPP_PMTUD_ENABLE, "SPP_PMTUD_ENABLE" },
{ SPP_PMTUD_DISABLE, "SPP_PMTUD_DISABLE" },
{ SPP_HB_TIME_IS_ZERO, "SPP_HB_TIME_IS_ZERO" },
{ SPP_IPV6_FLOWLABEL, "SPP_IPV6_FLOWLABEL" },
{ SPP_DSCP, "SPP_DSCP" },
{ SPP_IPV4_TOS, "SPP_IPV4_TOS" },
/* /usr/include/netinet/tcp.h */ /* /usr/include/netinet/tcp.h */
{ TCP_NODELAY, "TCP_NODELAY" }, { TCP_NODELAY, "TCP_NODELAY" },
{ TCP_MAXSEG, "TCP_MAXSEG" }, { TCP_MAXSEG, "TCP_MAXSEG" },
......
...@@ -10,52 +10,55 @@ ...@@ -10,52 +10,55 @@
//+0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 //+0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
+0 setsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., sstat_rwnd=..., sstat_unackdata=..., sstat_penddata=...,
sstat_instrms=..., sstat_outstrms=..., sstat_fragmentation_point=..., sstat_primary=...}, 176) = -1
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=SCTP_ESTABLISHED, sstat_rwnd=1500, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=SCTP_ESTABLISHED, sstat_rwnd=1500,
sstat_unackdata=0, sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 0 sstat_unackdata=0, sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., sstat_rwnd=1500, sstat_unackdata=0, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., sstat_rwnd=1500, sstat_unackdata=0,
sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 0 sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=..., sstat_unackdata=0, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=..., sstat_unackdata=0,
sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 0 sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=..., +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=...,
sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 0 sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0,
sstat_penddata=..., sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 0 sstat_penddata=..., sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0,
sstat_penddata=0, sstat_instrms=..., sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 0 sstat_penddata=0, sstat_instrms=..., sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0,
sstat_penddata=0, sstat_instrms=1, sstat_outstrms=..., sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 0 sstat_penddata=0, sstat_instrms=1, sstat_outstrms=..., sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=8, sstat_rwnd=1500, sstat_unackdata=0,
sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=..., sstat_primary=...}, [176])= 0 sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=..., sstat_primary=...}, [176]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=SCTP_ESTABLISHED, sstat_rwnd=1500, sstat_unackdata=0, sstat_penddata=0, +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=SCTP_ESTABLISHED, sstat_rwnd=1500, sstat_unackdata=0, sstat_penddata=0,
sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=..., sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=...,
sstat_primary={ spinfo_state=SCTP_ACTIVE, spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=1000, spinfo_mtu=1468} }, [176])= 0 sstat_primary={ spinfo_state=SCTP_ACTIVE, spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=1000, spinfo_mtu=1468} }, [176]) = 0
+0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")},
spp_hbinterval=60000, spp_pathmtu=1468, spp_pathmaxrxt=...}, 152) = 0 spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=SPP_DSCP|SPP_HB_ENABLE, spp_ipv6_flowlabel=0, spp_dscp=3}, 152) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")},
spp_hbinterval=60000, spp_pathmtu=1468, spp_pathmaxrxt=5}, [152]) = 0 spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=SPP_DSCP|SPP_HB_ENABLE|SPP_PMTUD_ENABLE, spp_ipv6_flowlabel=0, spp_dscp=3}, [152]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")},
spp_hbinterval=..., spp_pathmtu=1468, spp_pathmaxrxt=5}, [152]) = 0 spp_hbinterval=..., spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=..., spp_ipv6_flowlabel=0, spp_dscp=3}, [152]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")},
spp_hbinterval=60000, spp_pathmtu=..., spp_pathmaxrxt=5}, [152]) = 0 spp_hbinterval=300, spp_pathmtu=..., spp_pathmaxrxt=..., spp_flags=521, spp_ipv6_flowlabel=0, spp_dscp=3}, [152]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")},
spp_hbinterval=60000, spp_pathmtu=1468, spp_pathmaxrxt=...}, [152]) = 0 spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=521, spp_ipv6_flowlabel=..., spp_dscp=3}, [152]) = 0
+0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address=..., spp_hbinterval=60000, spp_pathmtu=1468, spp_pathmaxrxt=...}, [152]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")},
spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=521, spp_ipv6_flowlabel=0, spp_dscp=...}, [152]) = 0
+0 setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=30}, 8) = 0 +0 setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=30}, 8) = 0
+0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=128, linger=30}, [8]) = 0 +0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=128, linger=30}, [8]) = 0
......
...@@ -43,6 +43,6 @@ ...@@ -43,6 +43,6 @@
+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=1}, 7) = -1 (Invalid argument) +0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=1}, 7) = -1 (Invalid argument)
+0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")},
spp_hbinterval=30000, spp_pathmtu=1468, spp_pathmaxrxt=100}, 152) = 0 spp_hbinterval=30000, spp_pathmtu=1468, spp_pathmaxrxt=100, spp_flags=0, spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0
+0 close(3) = 0 +0 close(3) = 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