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;
spp_hbinterval return SPP_HBINTERVAL;
spp_pathmaxrxt return SPP_PATHMAXRXT;
spp_pathmtu return SPP_PATHMTU;
spp_flags return SPP_FLAGS;
spp_ipv6_flowlabel return SPPIPV6FLOWLABEL;
spp_dscp return SPPDSCP;
CHUNK return CHUNK;
DATA return DATA;
INIT return INIT;
......
......@@ -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> USER_INITIATED_ABORT PROTOCOL_VIOLATION
%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 <integer> INTEGER HEX_INTEGER
%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,
%type <expression> sctp_initmsg sctp_assocval sctp_sackinfo
%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> spp_flags spp_ipv6_flowlabel spp_dscp
%type <expression> spinfo_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu
%type <errno_info> opt_errno
%type <chunk_list> sctp_chunk_list_spec
......@@ -2585,7 +2587,8 @@ spp_hbinterval
if (!is_valid_u32($3)) {
semantic_error("spp_hbinterval out of range");
}
$$ = new_integer_expression($3, "%u"); }
$$ = new_integer_expression($3, "%u");
}
| SPP_HBINTERVAL '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
......@@ -2594,7 +2597,8 @@ spp_pathmtu
if (!is_valid_u32($3)) {
semantic_error("spp_pathmtu out of range");
}
$$ = new_integer_expression($3, "%u"); }
$$ = new_integer_expression($3, "%u");
}
| SPP_PATHMTU '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
;
......@@ -2603,18 +2607,47 @@ spp_pathmaxrxt
if (!is_valid_u16($3)) {
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_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
: '{' 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);
$$->value.sctp_paddrparams = (struct sctp_paddrparams_expr*) calloc(1, sizeof(struct sctp_paddrparams_expr));
$$->value.sctp_paddrparams->spp_address = $2;
$$->value.sctp_paddrparams->spp_hbinterval = $4;
$$->value.sctp_paddrparams->spp_pathmtu = $6;
$$->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,
* valid s16 or u16, and matches the expected type. Returns STATUS_OK on
* 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)
{
if (check_type(expression, EXPR_INTEGER, error))
......@@ -220,6 +220,26 @@ static short get_s16(struct expression *expression,
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
* that it has the expected type.
*/
......@@ -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_pathmaxrxt = val_expression->value.sctp_paddrparams->spp_pathmaxrxt;
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;
int hbinterval, pathmtu;
int hbinterval, pathmtu, flags, ipv6_flowlabel;
short pathmaxrxt;
s8 dscp;
if (spp_hbinterval->type != EXPR_ELLIPSIS) {
if (get_s32(spp_hbinterval, &hbinterval, error)) {
free(live_optval);
......@@ -1939,6 +1963,46 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
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
} else {
if (*(int*)live_optval != script_optval) {
......@@ -2025,7 +2089,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
#endif
#ifdef 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
#ifdef 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,
return STATUS_ERR;
}
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) {
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) {
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;
#endif
} else {
......@@ -2072,7 +2181,6 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
val_expression->type));
return STATUS_ERR;
}
begin_syscall(state, syscall);
result = setsockopt(live_fd, level, optname, optval, optlen);
......
......@@ -336,7 +336,9 @@ void free_expression(struct expression *expression)
free(expression->value.sctp_paddrparams->spp_hbinterval);
free(expression->value.sctp_paddrparams->spp_pathmaxrxt);
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;
#endif
case EXPR_WORD:
......@@ -514,20 +516,8 @@ static int evaluate_sctp_status_expression(struct expression *in,
in_status = in->value.sctp_status;
out_status = out->value.sctp_status;
if (in_status->sstat_state->type == EXPR_WORD) {
s64 val_state = 0;
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,
if (evaluate(in_status->sstat_state,
&out_status->sstat_state,
error))
return STATUS_ERR;
......@@ -558,22 +548,7 @@ static int evaluate_sctp_status_expression(struct expression *in,
if (evaluate(in_status->sstat_primary,
&out_status->sstat_primary,
error))
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_ERR;
return STATUS_OK;
}
#endif
......@@ -654,6 +629,10 @@ static int evaluate(struct expression *in,
case EXPR_SCTP_PADDRINFO:
memcpy(&out->value.sctp_paddrinfo, &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;
case EXPR_SCTP_STATUS: /* copy as-is */
result = evaluate_sctp_status_expression(in, out, error);
......@@ -663,6 +642,10 @@ static int evaluate(struct expression *in,
case EXPR_SCTP_PEER_ADDR_PARAMS:
memcpy(&out->value.sctp_paddrparams, &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;
#endif
case EXPR_WORD:
......
......@@ -184,7 +184,9 @@ struct sctp_paddrparams_expr {
struct expression *spp_hbinterval;
struct expression *spp_pathmaxrxt;
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 */
......
......@@ -102,7 +102,16 @@ struct int_symbol platform_symbols_table[] = {
{ SCTP_UNCONFIRMED, "SCTP_UNCONFIRMED" },
{ SCTP_ACTIVE, "SCTP_ACTIVE" },
{ 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 */
{ TCP_NODELAY, "TCP_NODELAY" },
{ TCP_MAXSEG, "TCP_MAXSEG" },
......
......@@ -10,52 +10,55 @@
//+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,
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,
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,
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=...,
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,
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,
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,
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,
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,
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")},
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")},
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")},
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")},
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")},
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 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=128, linger=30}, [8]) = 0
......
......@@ -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_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% 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