From c907a1f7c672b34fbb9ed346859e23caf9d58c81 Mon Sep 17 00:00:00 2001 From: Jens Hoelscher <jens.hoelscher@fh-muenster.de> Date: Sat, 9 Jan 2016 17:16:25 +0100 Subject: [PATCH] add Symbols for linux sockopts --- gtests/net/packetdrill/run_system_call.c | 53 ++++++------------- gtests/net/packetdrill/symbols_linux.c | 47 ++++++++++++++++ .../api_tests/cmsgs/sendmsg_sctp_init.pkt | 19 ++----- .../getsockopt/sctp_i_want_mapped_v4_addr.pkt | 1 + .../api_tests/getsockopt/sctp_nodelay.pkt | 5 +- .../api_tests/getsockopt/sctp_rtoinfo.pkt | 1 + 6 files changed, 71 insertions(+), 55 deletions(-) diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 3aca6257..0f90f550 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -2884,18 +2884,9 @@ static int check_sctp_sndinfo(struct sctp_sndinfo_expr *expr, if (check_u16_expr(expr->snd_flags, sctp_sndinfo->snd_flags, "sctp_sndinfo.snd_flags", error)) return STATUS_ERR; - if (expr->snd_ppid->type != EXPR_ELLIPSIS) { - u32 snd_ppid; - - if (get_u32(expr->snd_ppid, &snd_ppid, error)) { - return STATUS_ERR; - } - if (sctp_sndinfo->snd_ppid != snd_ppid) { - asprintf(error, "sctp_sndinfo.snd_ppid: expected: %u actual: %u", - snd_ppid, sctp_sndinfo->snd_ppid); - return STATUS_ERR; - } - } + if (check_u32_hton_expr(expr->snd_ppid, sctp_sndinfo->snd_ppid, + "sctp_sndinfo.snd_ppid", error)) + return STATUS_ERR; if (check_u32_expr(expr->snd_context, sctp_sndinfo->snd_context, "sctp_sndinfo.snd_context", error)) return STATUS_ERR; @@ -3327,7 +3318,7 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, live_result = getsockopt(live_fd, level, optname, live_optval, &live_optlen); - if (end_syscall(state, syscall, CHECK_NON_NEGATIVE, live_result, error)) { + if (end_syscall(state, syscall, CHECK_EXACT, live_result, error)) { return STATUS_ERR; } @@ -3790,8 +3781,8 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, if (parse_expression_to_sctp_sndrcvinfo(val_expression, &sndrcvinfo, true, error)) { return STATUS_ERR; } - optval = &sndrcvinfo; - break; + optval = &sndrcvinfo; + break; #endif #ifdef SCTP_DEFAULT_SNDINFO case EXPR_SCTP_SNDINFO: @@ -4254,7 +4245,7 @@ static int syscall_sctp_recvmsg(struct state *state, struct syscall_spec *syscal char **error) { #if defined(__FreeBSD__) || defined(linux) - int script_fd, live_fd, live_msg_flags, result; + int script_fd, live_fd, live_msg_flags = 0, result; void *msg; u32 len; struct sockaddr live_from; @@ -4288,21 +4279,14 @@ static int syscall_sctp_recvmsg(struct state *state, struct syscall_spec *syscal } script_from_expr = get_arg(args, 3, error); - if (check_sockaddr(script_from_expr, &live_from, error)) + if (check_sockaddr(script_from_expr, &live_from, error)) { return STATUS_ERR; - + } script_fromlen_expr = get_arg(args, 4, error); - if (script_fromlen_expr->type != EXPR_ELLIPSIS) { - int script_fromlen; - if (get_s32(script_fromlen_expr, &script_fromlen, error)) - return STATUS_ERR; - if (script_fromlen != live_fromlen) { - asprintf(error, "sctp_recvmsg fromlen: expected: %d actual: %d", - script_fromlen, live_fromlen); - return STATUS_ERR; - } + if (check_socklen_t_expr(script_fromlen_expr, live_fromlen, + "sctp_recvmsg fromlen", error)) { + return STATUS_ERR; } - script_sinfo_expr = get_arg(args, 5, error); if (script_sinfo_expr->type != EXPR_ELLIPSIS) { if (check_sctp_sndrcvinfo(script_sinfo_expr->value.sctp_sndrcvinfo, &live_sinfo, error)) { @@ -4310,16 +4294,11 @@ static int syscall_sctp_recvmsg(struct state *state, struct syscall_spec *syscal } } script_msg_flags_expr = get_arg(args, 6, error); - if (script_msg_flags_expr->type != EXPR_ELLIPSIS) { - int script_msg_flags; - if (get_s32(script_msg_flags_expr, &script_msg_flags, error)) - return STATUS_ERR; - if (script_msg_flags != live_msg_flags) { - asprintf(error, "sctp_recvmsg msg_flags: expected: %d actual: %d", - script_msg_flags, live_msg_flags); - return STATUS_ERR; - } + if (check_s32_expr(script_msg_flags_expr, live_msg_flags, + "sctp_recvmsg msg_flags", error)) { + return STATUS_ERR; } + return STATUS_OK; #else asprintf(error, "sctp_recvmsg is not supported"); diff --git a/gtests/net/packetdrill/symbols_linux.c b/gtests/net/packetdrill/symbols_linux.c index 3f7deb54..64e2e0f9 100644 --- a/gtests/net/packetdrill/symbols_linux.c +++ b/gtests/net/packetdrill/symbols_linux.c @@ -104,9 +104,25 @@ struct int_symbol platform_symbols_table[] = { { SCTP_ASSOCINFO, "SCTP_ASSOCINFO" }, { SCTP_INITMSG, "SCTP_INITMSG" }, { SCTP_NODELAY, "SCTP_NODELAY" }, + { SCTP_AUTOCLOSE, "SCTP_AUTOCLOSE" }, + { SCTP_PRIMARY_ADDR, "SCTP_PRIMARY_ADDR" }, + { SCTP_I_WANT_MAPPED_V4_ADDR, "SCTP_I_WANT_MAPPED_V4_ADDR" }, + { SCTP_DISABLE_FRAGMENTS, "SCTP_DISABLE_FRAGMENTS" }, + { SCTP_DEFAULT_SEND_PARAM, "SCTP_DEFAULT_SEND_PARAM" }, { SCTP_MAXSEG, "SCTP_MAXSEG" }, + { SCTP_HMAC_IDENT, "SCTP_HMAC_IDENT" }, + { SCTP_AUTH_ACTIVE_KEY, "SCTP_AUTH_ACTIVE_KEY" }, { SCTP_DELAYED_SACK, "SCTP_DELAYED_SACK" }, + { SCTP_PARTIAL_DELIVERY_POINT, "SCTP_PARTIAL_DELIVERY_POINT" }, { SCTP_MAX_BURST, "SCTP_MAX_BURST" }, + { SCTP_CONTEXT, "SCTP_CONTEXT" }, + { SCTP_PEER_AUTH_CHUNKS, "SCTP_PEER_AUTH_CHUNKS" }, + { SCTP_LOCAL_AUTH_CHUNKS, "SCTP_LOCAL_AUTH_CHUNKS" }, + { SCTP_GET_ASSOC_NUMBER, "SCTP_GET_ASSOC_NUMBER" }, + { SCTP_SET_PEER_PRIMARY_ADDR, "SCTP_SET_PEER_PRIMARY_ADDR" }, + { SCTP_AUTH_CHUNK, "SCTP_AUTH_CHUNK" }, + { SCTP_AUTH_KEY, "SCTP_AUTH_KEY" }, + { SCTP_AUTH_DELETE_KEY, "SCTP_AUTH_DELETE_KEY" }, #if 0 { SCTP_DEFAULT_SNDINFO, "SCTP_DEFAULT_SNDINFO" }, #endif @@ -204,6 +220,36 @@ struct int_symbol platform_symbols_table[] = { { SCTP_SENDALL, "SCTP_SENDALL" }, { SCTP_EOR, "SCTP_EOR" }, #endif +//sctp auth hmac ident + { SCTP_AUTH_HMAC_ID_SHA1, "SCTP_AUTH_HMAC_ID_SHA1" }, + { SCTP_AUTH_HMAC_ID_SHA1, "SCTP_AUTH_HMAC_ID_SHA256" }, +//cmsgs type for sctp + { SCTP_INIT, "SCTP_INIT" }, + { SCTP_SNDRCV, "SCTP_SNDRCV" }, +//flags for sctp_assoc_change + { SCTP_COMM_UP, "SCTP_COMM_UP" }, + { SCTP_COMM_LOST, "SCTP_COMM_LOST" }, + { SCTP_RESTART, "SCTP_RESTART" }, + { SCTP_SHUTDOWN_COMP, "SCTP_SHUTDOWN_COMP" }, + { SCTP_CANT_STR_ASSOC, "SCTP_CANT_STR_ASSOC" }, +#if 0 + { SCTP_ASSOC_SUPPORTS_PR, "SCTP_ASSOC_SUPPORTS_PR" }, + { SCTP_ASSOC_SUPPORTS_AUTH, "SCTP_ASSOC_SUPPORTS_AUTH" }, + { SCTP_ASSOC_SUPPORTS_ASCONF, "SCTP_ASSOC_SUPPORTS_ASCONF" }, + { SCTP_ASSOC_SUPPORTS_MULTIBUF, "SCTP_ASSOC_SUPPORTS_MULTIBUF" }, +#endif +//flags for sctp_send_failed + { SCTP_DATA_UNSENT, "SCTP_DATA_UNSENT" }, + { SCTP_DATA_SENT, "SCTP_DATA_SENT" }, +//flags for sctp_peer_addr_change + { SCTP_ADDR_AVAILABLE, "SCTP_ADDR_AVAILABLE" }, + { SCTP_ADDR_UNREACHABLE, "SCTP_ADDR_UNREACHABLE" }, + { SCTP_ADDR_REMOVED, "SCTP_ADDR_REMOVED" }, + { SCTP_ADDR_ADDED, "SCTP_ADDR_ADDED" }, + { SCTP_ADDR_MADE_PRIM, "SCTP_ADDR_MADE_PRIM" }, +//flags for sctp_partial_delivery_event + { SCTP_PARTIAL_DELIVERY_ABORTED, "SCTP_PARTIAL_DELIVERY_ABORTED" }, + { SCTP_BINDX_ADD_ADDR, "SCTP_BINDX_ADD_ADDR" }, { SCTP_BINDX_REM_ADDR, "SCTP_BINDX_REM_ADDR" }, { SCTP_SACK_IMMEDIATELY, "SCTP_SACK_IMMEDIATELY" }, @@ -301,6 +347,7 @@ struct int_symbol platform_symbols_table[] = { { MSG_MORE, "MSG_MORE" }, { MSG_CMSG_CLOEXEC, "MSG_CMSG_CLOEXEC" }, { MSG_FASTOPEN, "MSG_FASTOPEN" }, + { MSG_NOTIFICATION, "MSG_NOTIFICATION" }, #ifdef SIOCINQ { SIOCINQ, "SIOCINQ" }, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt index d92e3f7a..ce84ba4a 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt @@ -8,27 +8,14 @@ +0.0 sendmsg(3, {msg_name(...)=..., msg_iov(1)=[{iov_base=..., iov_len=1000}], - msg_control(64)=[{cmsg_len=20, + msg_control(20)=[{cmsg_len=20, cmsg_level=IPPROTO_SCTP, cmsg_type=SCTP_INIT, cmsg_data={sinit_num_ostreams=1, sinit_max_instreams=1, sinit_max_attempts=1, - sinit_max_init_timeo=100}}, - {cmsg_len=28, - cmsg_level=IPPROTO_SCTP, - cmsg_type=SCTP_SNDINFO, - cmsg_data={snd_sid=2, - snd_flags=0, - snd_ppid=htonl(1234), - snd_context=2, - snd_assoc_id=0}}, - {cmsg_len=16, - cmsg_level=IPPROTO_SCTP, - cmsg_type=SCTP_DSTADDRV4, - cmsg_data={sa_family=AF_INET, - sin_port=htons(8080), - sin_addr=inet_addr("192.0.2.1")}}], msg_flags=0}, 0) = 1000 + sinit_max_init_timeo=0}}], + msg_flags=0}, 0) = 1000 * > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=1, ...] +0.1 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=16, is=16, tsn=1, STATE_COOKIE[len=4, val=...]] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt index 1b0fbf0f..5ad5fcdc 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt @@ -1,3 +1,4 @@ + --ip_version=ipv6 0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 +0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt index 0745ab4b..3bcaeb63 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt @@ -10,8 +10,9 @@ +0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 -+0 getsockopt(3, SOL_SOCKET, SCTP_NODELAY, [0], [4]) = 0 -+0 setsockopt(3, SOL_SOCKET, SCTP_NODELAY, [1], 4) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [1], 4) = 0 +0 getsockopt(3, SOL_SOCKET, SCTP_NODELAY, [4], [4]) = 0 ++0 setsockopt(3, SOL_SOCKET, SCTP_NODELAY, [0], 4) = 0 ++0 getsockopt(3, SOL_SOCKET, SCTP_NODELAY, [0], [4]) = 0 +0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt index 554879b1..edfa41e0 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt @@ -1,3 +1,4 @@ +--tolerance_usecs=1000000 0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 +0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 -- GitLab