From 8fa3f492da2ace8a602f286d008c692368cea47f Mon Sep 17 00:00:00 2001 From: Charlie Root <root@BSD10.2> Date: Mon, 21 Dec 2015 19:20:34 +0100 Subject: [PATCH] add support for sctp_auth_chunk socketoption --- gtests/net/packetdrill/run_system_call.c | 16 ++++++++++++++-- .../api_tests/getsockopt/sctp_auth_chunk.pkt | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 954b0c5b..65b80f65 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -764,7 +764,7 @@ static int check_u16array_expr(struct expression *expr_list, u16 *data, int data switch(expr_list->type) { case EXPR_LIST: if (data_len != expression_list_length(expr_list->value.list)) { - asprintf(error, "%s length: expected: %u actual %zu", + asprintf(error, "%s length: expected: %u actual %d", val_name, expression_list_length(expr_list->value.list), data_len); return STATUS_ERR; } @@ -3516,6 +3516,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #ifdef SCTP_SET_PEER_PRIMARY_ADDR struct sctp_setpeerprim setpeerprim; #endif +#ifdef SCTP_AUTH_CHUNK + struct sctp_authchunk authchunk; +#endif #ifdef SCTP_PEER_ADDR_PARAMS struct sctp_paddrparams paddrparams; #ifdef linux @@ -3879,6 +3882,15 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, optval = &setpeerprim; break; #endif +#ifdef SCTP_AUTH_CHUNK + case EXPR_SCTP_AUTHCHUNK: + if (get_u8(val_expression->value.sctp_authchunk->sauth_chunk, + &authchunk.sauth_chunk, error)) { + return STATUS_ERR; + } + optval = &authchunk; + break; +#endif #ifdef SCTP_PEER_ADDR_PARAMS case EXPR_SCTP_PEER_ADDR_PARAMS: if (get_sctp_assoc_t(val_expression->value.sctp_paddrparams->spp_assoc_id, @@ -4608,7 +4620,7 @@ static int syscall_sctp_sendx(struct state *state, struct syscall_spec *syscall, if (ellipsis_arg(args, 1, error)) return STATUS_ERR; len_expr = get_arg(args, 2, error); - if (get_u32(len_expr, &len, error)) { + if (get_size_t(len_expr, &len, error)) { return STATUS_ERR; } addrs_expr = get_arg(args, 3, error); diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_auth_chunk.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_auth_chunk.pkt index d31aba1d..0a023a16 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_auth_chunk.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_auth_chunk.pkt @@ -11,5 +11,7 @@ +0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 +0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_CHUNK, {sauth_chunk=0}, 1) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_CHUNK, {sauth_chunk=1}, 1) = -1 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_CHUNK, {sauth_chunk=4}, 1) = 0 +0 close(3) = 0 -- GitLab