diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c index 56a74a772bb6fbe1e1b9043a05da19582e5d821a..f5d21c2f893a39681a98fd368ab9ca910692a823 100644 --- a/gtests/net/packetdrill/script.c +++ b/gtests/net/packetdrill/script.c @@ -514,7 +514,20 @@ static int evaluate_sctp_status_expression(struct expression *in, in_status = in->value.sctp_status; out_status = out->value.sctp_status; - if (evaluate(in_status->sstat_state, + 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, &out_status->sstat_state, error)) return STATUS_ERR; @@ -624,11 +637,11 @@ static int evaluate(struct expression *in, #endif #ifdef SCTP_STATUS case EXPR_SCTP_PADDRINFO: - result = evaluate_sctp_status_expression(in, out, error); + memcpy(&out->value.sctp_paddrinfo, &in->value.sctp_paddrinfo, + sizeof(in->value.sctp_paddrinfo)); break; case EXPR_SCTP_STATUS: /* copy as-is */ - memcpy(&out->value.sctp_status, &in->value.sctp_status, - sizeof(in->value.sctp_status)); + result = evaluate_sctp_status_expression(in, out, error); break; #endif #ifdef SCTP_PEER_ADDR_PARAMS diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt index 173449ba851a1bd065e561a3eefd71cf5d766612..7bc70cd2c4032bbb195be1f79f968739ecc24271 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt @@ -11,7 +11,7 @@ //+0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., 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 +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., sstat_rwnd=1500, sstat_unackdata=0,