diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y
index 255215c654cdf1afaa10de300674e0eb77e85df9..50a02d6ba38722b0644901d0d489f828dd477de1 100644
--- a/gtests/net/packetdrill/parser.y
+++ b/gtests/net/packetdrill/parser.y
@@ -2561,15 +2561,11 @@ srto_min
 
 sctp_rtoinfo
 : '{' srto_initial ',' srto_max ',' srto_min '}' {
-#ifdef SCTP_RTOINFO
 	$$ = new_expression(EXPR_SCTP_RTOINFO);
 	$$->value.sctp_rtoinfo = calloc(1, sizeof(struct sctp_rtoinfo_expr));
 	$$->value.sctp_rtoinfo->srto_initial = $2;
 	$$->value.sctp_rtoinfo->srto_max = $4;
 	$$->value.sctp_rtoinfo->srto_min = $6;
-#else
-	$$ = NULL;
-#endif
 }
 ;
 
@@ -2670,14 +2666,10 @@ sack_freq
 
 sctp_sackinfo
 : '{' sack_delay ',' sack_freq '}' {
-#ifdef SCTP_DELAYED_SACK
 	$$ = new_expression(EXPR_SCTP_SACKINFO);
 	$$->value.sctp_sack_info = calloc(1, sizeof(struct sctp_sack_info_expr));
 	$$->value.sctp_sack_info->sack_delay = $2;
 	$$->value.sctp_sack_info->sack_freq = $4;	
-#else
-	$$ = NULL;
-#endif
 }
 ;
 
@@ -2963,7 +2955,6 @@ sasoc_cookie_life
 
 sctp_assocparams
 : '{' sasoc_asocmaxrxt ',' sasoc_number_peer_destinations ',' sasoc_peer_rwnd ',' sasoc_local_rwnd ',' sasoc_cookie_life '}' {
-#ifdef SCTP_ASSOCINFO
 	$$ = new_expression(EXPR_SCTP_ASSOCPARAMS);
         $$->value.sctp_assocparams = calloc(1, sizeof(struct sctp_assocparams_expr));
         $$->value.sctp_assocparams->sasoc_asocmaxrxt = $2;
@@ -2971,9 +2962,6 @@ sctp_assocparams
         $$->value.sctp_assocparams->sasoc_peer_rwnd = $6;
         $$->value.sctp_assocparams->sasoc_local_rwnd = $8;
         $$->value.sctp_assocparams->sasoc_cookie_life = $10;
-#else
-	$$ = NULL;
-#endif
 }
 ;
 
@@ -3002,14 +2990,10 @@ se_on
 
 sctp_event
 : '{' se_type ',' se_on '}' {
-#ifdef SCTP_EVENT
 	$$ = new_expression(EXPR_SCTP_EVENT);
 	$$->value.sctp_event = calloc(1, sizeof(struct sctp_event_expr));
 	$$->value.sctp_event->se_type = $2;
 	$$->value.sctp_event->se_on = $4;
-#else
-	$$ = NULL;
-#endif
 }
 ;
 
@@ -3073,16 +3057,12 @@ sctp_sndinfo
 
 sctp_setadaptation
 : '{' SSB_ADAPTATION_IND '=' INTEGER '}' {
-#ifdef SCTP_ADAPTATION_LAYER
 	$$ = new_expression(EXPR_SCTP_SETADAPTATION);
 	$$->value.sctp_setadaptation = calloc(1, sizeof(struct sctp_setadaptation));
 	if (!is_valid_u32($4)) {
 		semantic_error("ssb_adaptation_ind out of range");
 	}
 	$$->value.sctp_setadaptation->ssb_adaptation_ind = new_integer_expression($4, "%u");
-#else
-	$$ = NULL;
-#endif
 }
 ;
 
diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c
index 1849fede9eb6aaefc6afcf48d6c01cf59bdd4105..fc2339cac2a324a8c46eb50b3d14f7f7d7c2165e 100644
--- a/gtests/net/packetdrill/run_system_call.c
+++ b/gtests/net/packetdrill/run_system_call.c
@@ -275,17 +275,17 @@ static int get_s16(struct expression *expression,
 static int get_u8(struct expression *expression,
 		  u8 *value, char **error)
 {
-        if (check_type(expression, EXPR_INTEGER, error))
-                return STATUS_ERR;
-        if ((expression->value.num > UINT8_MAX) ||
-                (expression->value.num < 0)) {
-                asprintf(error,
-                        "Value out of range for 8-bit unsigned integer: %lld",
-                        expression->value.num);
-                return STATUS_ERR;
-        }
-        *value = expression->value.num;
-        return STATUS_OK;
+	if (check_type(expression, EXPR_INTEGER, error))
+		return STATUS_ERR;
+	if ((expression->value.num > UINT8_MAX) ||
+		(expression->value.num < 0)) {
+		asprintf(error,
+			 "Value out of range for 8-bit unsigned integer: %lld",
+			 expression->value.num);
+		return STATUS_ERR;
+	}
+	*value = expression->value.num;
+	return STATUS_OK;
 }
 #endif
 
@@ -297,17 +297,17 @@ static int get_u8(struct expression *expression,
 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 > INT8_MAX) ||
-                (expression->value.num < INT8_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;
+	if (check_type(expression, EXPR_INTEGER, error))
+		return STATUS_ERR;
+	if ((expression->value.num > INT8_MAX) ||
+		(expression->value.num < INT8_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;
 }
 #endif
 
@@ -359,6 +359,27 @@ static int ellipsis_arg(struct expression_list *args, int index, char **error)
 	return STATUS_OK;
 }
 
+/* Return STATUS_OK if the argumant in from type sockaddr_in or
+ * sockaddr_in6
+ */
+static int get_sockstorage_arg(struct expression *arg, struct sockaddr_storage *sock_addr, int live_fd, char **error)
+{
+	if (arg->type == EXPR_ELLIPSIS) {
+		socklen_t len_addr;
+		if (getpeername(live_fd, (struct sockaddr*) sock_addr, &len_addr)) {
+			asprintf(error, "Bad setsockopt, bad get primary peer address");
+			return STATUS_ERR;
+		}
+	} else if (arg->type == EXPR_SOCKET_ADDRESS_IPV4) {
+		memcpy(sock_addr, arg->value.socket_address_ipv4, sizeof(struct sockaddr_in));
+	} else if (arg->type == EXPR_SOCKET_ADDRESS_IPV6) {
+		memcpy(sock_addr, arg->value.socket_address_ipv6, sizeof(struct sockaddr_in6));
+	} else {
+		return STATUS_ERR;
+	}
+	return STATUS_OK;
+}
+
 /* Free all the space used by the given iovec. */
 static void iovec_free(struct iovec *iov, size_t iov_len)
 {
@@ -1757,7 +1778,7 @@ static int check_sctp_rtoinfo(struct sctp_rtoinfo_expr *expr,
 
 #ifdef SCTP_INITMSG
 static int check_sctp_initmsg(struct sctp_initmsg_expr *expr,
-                              struct sctp_initmsg *sctp_initmsg, char **error)
+			      struct sctp_initmsg *sctp_initmsg, char **error)
 {
 	if (expr->sinit_num_ostreams->type != EXPR_ELLIPSIS) {
 		u16 sinit_num_ostreams;
@@ -1844,10 +1865,10 @@ static int check_sctp_sack_info(struct sctp_sack_info_expr *expr,
 }
 #endif
 
-#ifdef SCTP_STATUS
+#if defined(SCTP_GET_PEER_ADDR_INFO) || defined(SCTP_STATUS)
 static int check_sctp_paddrinfo(struct sctp_paddrinfo_expr *expr,
-			        struct sctp_paddrinfo *sctp_paddrinfo,
-			        char **error)
+				struct sctp_paddrinfo *sctp_paddrinfo,
+				char **error)
 {
 	if (expr->spinfo_state->type != EXPR_ELLIPSIS) {
 		s32 spinfo_state;
@@ -1911,7 +1932,9 @@ static int check_sctp_paddrinfo(struct sctp_paddrinfo_expr *expr,
 	}
 	return STATUS_OK;
 }
+#endif
 
+#ifdef SCTP_STATUS
 static int check_sctp_status(struct sctp_status_expr *expr,
 			     struct sctp_status *sctp_status,
 			     char **error)
@@ -2001,7 +2024,8 @@ static int check_sctp_status(struct sctp_status_expr *expr,
 		}
 	}
 	if (expr->sstat_primary->type != EXPR_ELLIPSIS) {
-		if (check_sctp_paddrinfo(expr->sstat_primary->value.sctp_paddrinfo,  &sctp_status->sstat_primary, error)) {
+		if (check_sctp_paddrinfo(expr->sstat_primary->value.sctp_paddrinfo,
+					 &sctp_status->sstat_primary, error)) {
 			return STATUS_ERR;
 		}
 	}
@@ -2179,7 +2203,7 @@ static int check_sctp_assocparams(struct sctp_assocparams_expr *expr,
 		}
 		if (sctp_assocparams->sasoc_number_peer_destinations != sasoc_number_peer_destinations) {
 			asprintf(error, "Bad getsockopt sctp_assocparams.sasoc_number_peer_destinations: expected: %hu actual: %hu",
-				 sasoc_number_peer_destinations, sctp_assocparams->sasoc_number_peer_destinations);
+					 sasoc_number_peer_destinations, sctp_assocparams->sasoc_number_peer_destinations);
 			return STATUS_ERR;
 		}
 	}
@@ -2338,7 +2362,7 @@ static int check_sctp_setadaptation(struct sctp_setadaptation_expr *expr,
 static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
 			      struct expression_list *args, char **error)
 {
-	int script_fd, live_fd, level, optname, result;
+	int script_fd, live_fd, level, optname, live_result, result = STATUS_OK;
 	s32 script_optval, script_optlen, expected;
 	void *live_optval;
 	socklen_t live_optlen;
@@ -2361,140 +2385,143 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
 	val_expression = get_arg(args, 3, error);
 	if (val_expression == NULL) {
 		return STATUS_ERR;
-	} else if (val_expression->type == EXPR_LINGER) {
+	} 
+	switch (val_expression->type) {
+	case EXPR_LINGER:
 		live_optval = malloc(sizeof(struct linger));
 		live_optlen = (socklen_t)sizeof(struct linger);
+		break;
 #ifdef SCTP_RTOINFO
-	} else if (val_expression->type == EXPR_SCTP_RTOINFO) {
+	case EXPR_SCTP_RTOINFO:
 		live_optval = malloc(sizeof(struct sctp_rtoinfo));
 		live_optlen = (socklen_t)sizeof(struct sctp_rtoinfo);
 		((struct sctp_rtoinfo*)live_optval)->srto_assoc_id = 0;
+		break;
 #endif
 #ifdef SCTP_ASSOCINFO
-	} else if (val_expression->type == EXPR_SCTP_ASSOCPARAMS) {
+	case EXPR_SCTP_ASSOCPARAMS:
 		live_optval = malloc(sizeof(struct sctp_assocparams));
 		live_optlen = (socklen_t)sizeof(struct sctp_assocparams);
 		((struct sctp_assocparams*) live_optval)->sasoc_assoc_id = 0;
+		break;
 #endif
 #ifdef SCTP_INITMSG
-	} else if (val_expression->type == EXPR_SCTP_INITMSG) {
+	case EXPR_SCTP_INITMSG:
 		live_optval = malloc(sizeof(struct sctp_initmsg));
 		live_optlen = (socklen_t)sizeof(struct sctp_initmsg);
+		break;
 #endif
 #ifdef SCTP_DELAYED_SACK
-	} else if (val_expression->type == EXPR_SCTP_SACKINFO) {
+	case EXPR_SCTP_SACKINFO:
 		live_optval = malloc(sizeof(struct sctp_sack_info));
 		live_optlen = (socklen_t)sizeof(struct sctp_sack_info);
 		((struct sctp_sack_info*) live_optval)->sack_assoc_id = 0;
+		break;
 #endif
 #ifdef SCTP_STATUS
-	} else if (val_expression->type == EXPR_SCTP_STATUS) {
+	case EXPR_SCTP_STATUS:
 		live_optval = malloc(sizeof(struct sctp_status));
 		live_optlen = (socklen_t)sizeof(struct sctp_status);
 		((struct sctp_status*) live_optval)->sstat_assoc_id = 0;
+		break;
 #endif
 #ifdef SCTP_GET_PEER_ADDR_INFO
-	} else if (val_expression->type == EXPR_SCTP_PADDRINFO) {
+	case EXPR_SCTP_PADDRINFO: {
 		struct sctp_paddrinfo_expr *expr_paddrinfo = val_expression->value.sctp_paddrinfo;
 		struct sctp_paddrinfo *live_paddrinfo = malloc(sizeof(struct sctp_paddrinfo));
 		live_optlen = (socklen_t)sizeof(struct sctp_paddrinfo);
 		memset(live_paddrinfo, 0, sizeof(struct sctp_paddrinfo));
 		live_paddrinfo->spinfo_assoc_id = 0;
-		if (expr_paddrinfo->spinfo_address->type == EXPR_ELLIPSIS) {
-			socklen_t len_addr = sizeof(live_paddrinfo->spinfo_address);
-			if (getpeername(live_fd, (struct sockaddr*) &live_paddrinfo->spinfo_address, &len_addr)) {
-				asprintf(error, "Bad getsockopt, bad get primary peer address");
-				free(live_paddrinfo);
-				return STATUS_ERR;
-			}
-		} else if (expr_paddrinfo->spinfo_address->type == EXPR_SOCKET_ADDRESS_IPV4) {
-			memcpy(&live_paddrinfo->spinfo_address, expr_paddrinfo->spinfo_address->value.socket_address_ipv4, sizeof(struct sockaddr_in));
-		} else if (expr_paddrinfo->spinfo_address->type == EXPR_SOCKET_ADDRESS_IPV6) {
-			memcpy(&live_paddrinfo->spinfo_address, expr_paddrinfo->spinfo_address->value.socket_address_ipv6, sizeof(struct sockaddr_in6));
-		} else {
+		if (get_sockstorage_arg(expr_paddrinfo->spinfo_address,
+					&(live_paddrinfo->spinfo_address), live_fd, error)) {
 			asprintf(error, "Bad getsockopt, bad get input for spinfo_address");
 			free(live_paddrinfo);
 			return STATUS_ERR;
 		}
 		live_optval = live_paddrinfo;
+		break;
+	}
 #endif
 #ifdef SCTP_PEER_ADDR_PARAMS
-	} else if (val_expression->type == EXPR_SCTP_PEER_ADDR_PARAMS) {
+	case EXPR_SCTP_PEER_ADDR_PARAMS: {
 		struct sctp_paddrparams_expr *expr_params = val_expression->value.sctp_paddrparams;
 		struct sctp_paddrparams *live_params = malloc(sizeof(struct sctp_paddrparams));
 		memset(live_params, 0, sizeof(struct sctp_paddrparams));
 		live_optlen = sizeof(struct sctp_paddrparams);
-		if (expr_params->spp_address->type == EXPR_ELLIPSIS) {
-			socklen_t len_addr = sizeof(live_params->spp_address);
-			if (getpeername(live_fd, (struct sockaddr*) &live_params->spp_address, &len_addr)) {
-				asprintf(error, "Bad getsockopt, bad get primary peer address");
-				free(live_params);
-				return STATUS_ERR;
-			}
-		} else if (expr_params->spp_address->type == EXPR_SOCKET_ADDRESS_IPV4) {
-			memcpy(&live_params->spp_address, expr_params->spp_address->value.socket_address_ipv4, sizeof(struct sockaddr_in));
-		} else if (expr_params->spp_address->type == EXPR_SOCKET_ADDRESS_IPV6) {
-			memcpy(&live_params->spp_address, expr_params->spp_address->value.socket_address_ipv6, sizeof(struct sockaddr_in6));
-		} else {
+		if (get_sockstorage_arg(expr_params->spp_address, &live_params->spp_address,
+					live_fd, error)) {
 			asprintf(error, "Bad getsockopt, bad get input for spp_address");
 			free(live_params);
 			return STATUS_ERR;
 		}
 		live_params->spp_assoc_id = 0;
 		live_optval = live_params;
+		break;
+	}
 #endif
 #if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
-	} else if (val_expression->type == EXPR_SCTP_ASSOC_VALUE) {
+	case EXPR_SCTP_ASSOC_VALUE:
 		live_optval = malloc(sizeof(struct sctp_assoc_value));
 		live_optlen = (socklen_t)sizeof(struct sctp_assoc_value);
 		((struct sctp_assoc_value *) live_optval)->assoc_id = 0;
+		break;
 #endif
 #ifdef SCTP_SS_VALUE
-	} else if (val_expression->type == EXPR_SCTP_STREAM_VALUE) {
+	case EXPR_SCTP_STREAM_VALUE:
 		live_optval = malloc(sizeof(struct sctp_stream_value));
 		live_optlen = (socklen_t)sizeof(struct sctp_stream_value);
 		((struct sctp_stream_value *) live_optval)->assoc_id = 0;
 		if (get_u16(val_expression->value.sctp_stream_value->stream_id,
-		            &((struct sctp_stream_value *)live_optval)->stream_id,
-		            error)) {
+			    &((struct sctp_stream_value *)live_optval)->stream_id,
+			    error)) {
 			free(live_optval);
 			return STATUS_ERR;
 		}
+		break;
 #endif
 #ifdef SCTP_EVENT
-	} else if (val_expression->type == EXPR_SCTP_EVENT) {
+	case EXPR_SCTP_EVENT:
 		live_optval = malloc(sizeof(struct sctp_event));
 		live_optlen = sizeof(struct sctp_event);
-		((struct sctp_event *)live_optval)->se_assoc_id = 0; 
+		((struct sctp_event *)live_optval)->se_assoc_id = 0;
 		if (get_u16(val_expression->value.sctp_event->se_type,
-		            &((struct sctp_event *)live_optval)->se_type,
+			    &((struct sctp_event *)live_optval)->se_type,
 			    error)) {
-                        free(live_optval);
-                        return STATUS_ERR;
-                }
+			free(live_optval);
+			return STATUS_ERR;
+		}
+		break;
 #endif
 #ifdef SCTP_DEFAULT_SNDINFO
-	} else if (val_expression->type == EXPR_SCTP_SNDINFO) {
+	case EXPR_SCTP_SNDINFO:
 		live_optval = malloc(sizeof(struct sctp_sndinfo));
 		live_optlen = sizeof(struct sctp_sndinfo);
-		((struct sctp_sndinfo *)live_optval)->snd_assoc_id = 0; 
+		((struct sctp_sndinfo *)live_optval)->snd_assoc_id = 0;
+		break;
 #endif
 #ifdef SCTP_ADAPTATION_LAYER
-	} else if (val_expression->type == EXPR_SCTP_SETADAPTATION) {
+	case EXPR_SCTP_SETADAPTATION:
 		live_optval = malloc(sizeof(struct sctp_setadaptation));
 		live_optlen = sizeof(struct sctp_setadaptation);
+		break;
 #endif
-	} else {
+	case EXPR_LIST:
 		s32_bracketed_arg(args, 3, &script_optval, error);
 		live_optval = malloc(sizeof(int));
 		live_optlen = (socklen_t)sizeof(int);
+		break;
+	default:
+		asprintf(error, "unsupported getsockopt value type: %s",
+			 expression_type_to_string(val_expression->type));
+		return STATUS_ERR;
+		break;		
 	}
 
 	begin_syscall(state, syscall);
 
-	result = getsockopt(live_fd, level, optname, live_optval, &live_optlen);
+	live_result = getsockopt(live_fd, level, optname, live_optval, &live_optlen);
 
-	if (end_syscall(state, syscall, CHECK_NON_NEGATIVE, result, error)) {
+	if (end_syscall(state, syscall, CHECK_NON_NEGATIVE, live_result, error)) {
 		return STATUS_ERR;
 	}
 
@@ -2504,105 +2531,85 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
 		free(live_optval);
 		return STATUS_ERR;
 	}
-	if (val_expression->type == EXPR_LINGER) {
-		if (check_linger(val_expression->value.linger, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	
+	switch (val_expression->type) {
+	case EXPR_LINGER:
+		result = check_linger(val_expression->value.linger, live_optval, error);
+		break;
 #ifdef SCTP_RTOINFO
-	} else if (val_expression->type == EXPR_SCTP_RTOINFO) {
-		if (check_sctp_rtoinfo(val_expression->value.sctp_rtoinfo, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_RTOINFO:
+		result = check_sctp_rtoinfo(val_expression->value.sctp_rtoinfo, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_ASSOCINFO
-	} else if (val_expression->type == EXPR_SCTP_ASSOCPARAMS) {
-		if (check_sctp_assocparams(val_expression->value.sctp_assocparams, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_ASSOCPARAMS:
+		result = check_sctp_assocparams(val_expression->value.sctp_assocparams, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_INITMSG
-	} else if (val_expression->type == EXPR_SCTP_INITMSG) {
-		if (check_sctp_initmsg(val_expression->value.sctp_initmsg, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_INITMSG:
+		result = check_sctp_initmsg(val_expression->value.sctp_initmsg, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_DELAYED_SACK
-	} else if (val_expression->type == EXPR_SCTP_SACKINFO) {
-		if (check_sctp_sack_info(val_expression->value.sctp_sack_info, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_SACKINFO:
+		result = check_sctp_sack_info(val_expression->value.sctp_sack_info, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_STATUS
-	} else if (val_expression->type == EXPR_SCTP_STATUS) {
-		if (check_sctp_status(val_expression->value.sctp_status, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_STATUS:
+		result = check_sctp_status(val_expression->value.sctp_status, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_GET_PEER_ADDR_INFO
-	} else if (val_expression->type == EXPR_SCTP_PADDRINFO) {
-		if (check_sctp_paddrinfo(val_expression->value.sctp_paddrinfo, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_PADDRINFO:
+		result = check_sctp_paddrinfo(val_expression->value.sctp_paddrinfo, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_PEER_ADDR_PARAMS
-	} else if (val_expression->type == EXPR_SCTP_PEER_ADDR_PARAMS) {
-		if (check_sctp_paddrparams(val_expression->value.sctp_paddrparams, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_PEER_ADDR_PARAMS:
+		result = check_sctp_paddrparams(val_expression->value.sctp_paddrparams, live_optval, error);
+		break;
 #endif
 #if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
-	} else if (val_expression->type == EXPR_SCTP_ASSOC_VALUE) {
-		if (check_sctp_assoc_value(val_expression->value.sctp_assoc_value, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_ASSOC_VALUE:
+		result = check_sctp_assoc_value(val_expression->value.sctp_assoc_value, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_SS_VALUE
-	} else if (val_expression->type == EXPR_SCTP_STREAM_VALUE) {
-		if (check_sctp_stream_value(val_expression->value.sctp_stream_value, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_STREAM_VALUE:
+		result = check_sctp_stream_value(val_expression->value.sctp_stream_value, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_EVENT
-	} else if (val_expression->type == EXPR_SCTP_EVENT) {
-		if (check_sctp_event(val_expression->value.sctp_event, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_EVENT:
+		result = check_sctp_event(val_expression->value.sctp_event, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_DEFAULT_SNDINFO
-	} else if (val_expression->type == EXPR_SCTP_SNDINFO) {
-		if (check_sctp_sndinfo(val_expression->value.sctp_sndinfo, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_SNDINFO:
+		result = check_sctp_sndinfo(val_expression->value.sctp_sndinfo, live_optval, error);
+		break;
 #endif
 #ifdef SCTP_ADAPTATION_LAYER
-	} else if (val_expression->type == EXPR_SCTP_SETADAPTATION) {
-		if (check_sctp_setadaptation(val_expression->value.sctp_setadaptation, live_optval, error)) {
-			free(live_optval);
-			return STATUS_ERR;
-		}
+	case EXPR_SCTP_SETADAPTATION:
+		result = check_sctp_setadaptation(val_expression->value.sctp_setadaptation, live_optval, error);
+		break;
 #endif
-	} else {
+	case EXPR_LIST:
 		if (*(int*)live_optval != script_optval) {
 			asprintf(error, "Bad getsockopt optval: expected: %d actual: %d",
 				(int)script_optval, *(int*)live_optval);
-			free(live_optval);
-			return STATUS_ERR;
+			result = STATUS_ERR;
 		}
+		break;
+	default:
+		asprintf(error, "Cannot check getsockopt value type: %s",
+			 expression_type_to_string(val_expression->type));
+		break;
 	}
 	free(live_optval);
-	return STATUS_OK;
+	return result;
 }
 
 static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
@@ -2784,7 +2791,7 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
 		if (get_u32(val_expression->value.sctp_sack_info->sack_freq,
 		            &sack_info.sack_freq, error)) {
 			return STATUS_ERR;
-		}		
+		}
 		optval = &sack_info;
 		break;
 #endif
@@ -2797,24 +2804,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
 #ifdef SCTP_GET_PEER_ADDR_INFO
 	case EXPR_SCTP_PADDRINFO:
 		paddrinfo.spinfo_assoc_id = 0;
-		if (val_expression->value.sctp_paddrinfo->spinfo_address->type == EXPR_SOCKET_ADDRESS_IPV4) {
-			memcpy(&paddrinfo.spinfo_address,
-			       val_expression->value.sctp_paddrinfo->spinfo_address->value.socket_address_ipv4,
-			       sizeof(struct sockaddr_in));
-		} else if (val_expression->value.sctp_paddrinfo->spinfo_address->type == EXPR_SOCKET_ADDRESS_IPV6) {
-			memcpy(&paddrinfo.spinfo_address,
-			       val_expression->value.sctp_paddrinfo->spinfo_address->value.socket_address_ipv6,
-			       sizeof(struct sockaddr_in6));
-		} else if (val_expression->value.sctp_paddrinfo->spinfo_address->type == EXPR_ELLIPSIS) {
-			socklen_t len_addr = sizeof(struct sockaddr_storage);
-			if (getpeername(live_fd,
-			                (struct sockaddr*)&paddrinfo.spinfo_address,
-			                &len_addr)) {
-				asprintf(error, "Bad setsockopt, bad get primary peer address");
-				return STATUS_ERR;
-			}
-		} else {
-			asprintf(error, "Bad setsockopt, bad input for spinfo_address for socketoption SCTP_GET_PEER_ADDR_INFO");
+		if (get_sockstorage_arg(val_expression->value.sctp_paddrinfo->spinfo_address,
+					&paddrinfo.spinfo_address, live_fd, error)) {
+			asprintf(error, "Bad getsockopt, bad get input for spp_address");
 			return STATUS_ERR;
 		}
 		optval = &paddrinfo;
@@ -2868,23 +2860,8 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
 #ifdef SCTP_PEER_ADDR_PARAMS
 	case EXPR_SCTP_PEER_ADDR_PARAMS:
 		paddrparams.spp_assoc_id = 0;
-		if (val_expression->value.sctp_paddrparams->spp_address->type == EXPR_SOCKET_ADDRESS_IPV4) {
-			memcpy(&paddrparams.spp_address,
-			       val_expression->value.sctp_paddrparams->spp_address->value.socket_address_ipv4,
-			       sizeof(struct sockaddr_in));
-		} else if (val_expression->value.sctp_paddrparams->spp_address->type == EXPR_SOCKET_ADDRESS_IPV6) {
-			memcpy(&paddrparams.spp_address,
-			       val_expression->value.sctp_paddrparams->spp_address->value.socket_address_ipv6,
-			       sizeof(struct sockaddr_in6));
-		} else if (val_expression->value.sctp_paddrparams->spp_address->type == EXPR_ELLIPSIS) {
-			socklen_t len_addr = sizeof(struct sockaddr_storage);
-			if (getpeername(live_fd,
-			                (struct sockaddr*)&paddrparams.spp_address,
-			                &len_addr)) {
-				asprintf(error, "Bad setsockopt, bad get primary peer address");
-				return STATUS_ERR;
-			}
-		} else {
+		if (get_sockstorage_arg(val_expression->value.sctp_paddrparams->spp_address, 
+				        &paddrparams.spp_address, live_fd, error)) {
 			asprintf(error, "Bad setsockopt, bad input for spp_address for socketoption SCTP_PADDRPARAMS");
 			return STATUS_ERR;
 		}
diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c
index 4f3b93549a30ddd6c21580542ad2630b5631abce..5c07f3ee5053bf66edcf3a688dba82a8c9bb82dd 100644
--- a/gtests/net/packetdrill/script.c
+++ b/gtests/net/packetdrill/script.c
@@ -65,40 +65,18 @@ struct expression_type_entry expression_type_table[] = {
 	{ EXPR_IOVEC,                "iovec" },
 	{ EXPR_MSGHDR,               "msghdr" },
 	{ EXPR_POLLFD,               "pollfd" },
-#ifdef SCTP_RTOINFO
 	{ EXPR_SCTP_RTOINFO,         "sctp_rtoinfo"},
-#endif
-#ifdef SCTP_INITMSG
 	{ EXPR_SCTP_INITMSG,         "sctp_initmsg"},
-#endif
-#if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
 	{ EXPR_SCTP_ASSOC_VALUE,     "sctp_assoc_value"},
-#endif
-#ifdef SCTP_DELAYED_SACK
 	{ EXPR_SCTP_SACKINFO,        "sctp_sackinfo"},
-#endif
-#ifdef SCTP_STATUS
 	{ EXPR_SCTP_STATUS,          "sctp_status"},
 	{ EXPR_SCTP_PADDRINFO,	     "sctp_paddrinfo"},
-#endif
-#ifdef SCTP_PEER_ADDR_PARAMS
-	{ EXPR_SCTP_PEER_ADDR_PARAMS,	"sctp_peer_addr_params"},
-#endif
-#ifdef SCTP_SS_VALUE
+	{ EXPR_SCTP_PEER_ADDR_PARAMS,"sctp_peer_addr_params"},
 	{ EXPR_SCTP_STREAM_VALUE,    "sctp_stream_value"},
-#endif
-#ifdef SCTP_ASSOCINFO
 	{ EXPR_SCTP_ASSOCPARAMS,     "sctp_assocparams"},
-#endif
-#ifdef SCTP_EVENT
 	{ EXPR_SCTP_EVENT,	     "sctp_event"      },
-#endif
-#ifdef SCTP_DEFAULT_SNDINFO
 	{ EXPR_SCTP_SNDINFO,         "sctp_sndinfo"    },
-#endif
-#ifdef SCTP_ADAPTATION_LAYER
 	{ EXPR_SCTP_SETADAPTATION,   "sctp_setadaptation"},
-#endif
 	{ NUM_EXPR_TYPES,            NULL}
 };
 
@@ -310,21 +288,16 @@ void free_expression(struct expression *expression)
 		free_expression(expression->value.linger->l_onoff);
 		free_expression(expression->value.linger->l_linger);
 		break;
-#ifdef SCTP_RTOINFO
 	case EXPR_SCTP_RTOINFO:
 		assert(expression->value.sctp_rtoinfo);
 		free_expression(expression->value.sctp_rtoinfo->srto_initial);
 		free_expression(expression->value.sctp_rtoinfo->srto_max);
 		free_expression(expression->value.sctp_rtoinfo->srto_min);
 		break;
-#endif
-#if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
 	case EXPR_SCTP_ASSOC_VALUE:
 		assert(expression->value.sctp_assoc_value);
 		free_expression(expression->value.sctp_assoc_value->assoc_value);
 		break;
-#endif
-#ifdef SCTP_INITMSG
 	case EXPR_SCTP_INITMSG:
 		assert(expression->value.sctp_initmsg);
 		free_expression(expression->value.sctp_initmsg->sinit_num_ostreams);
@@ -332,15 +305,11 @@ void free_expression(struct expression *expression)
 		free_expression(expression->value.sctp_initmsg->sinit_max_attempts);
 		free_expression(expression->value.sctp_initmsg->sinit_max_init_timeo);
 		break;
-#endif
-#ifdef SCTP_DELAYED_SACK
 	case EXPR_SCTP_SACKINFO:
 		assert(expression->value.sctp_sack_info);
 		free_expression(expression->value.sctp_sack_info->sack_delay);
 		free_expression(expression->value.sctp_sack_info->sack_freq);		
 		break;
-#endif
-#ifdef SCTP_STATUS
 	case EXPR_SCTP_PADDRINFO:
 		assert(expression->value.sctp_paddrinfo);
 		free_expression(expression->value.sctp_paddrinfo->spinfo_address);
@@ -361,8 +330,6 @@ void free_expression(struct expression *expression)
 		free_expression(expression->value.sctp_status->sstat_fragmentation_point);
 		free_expression(expression->value.sctp_status->sstat_primary);
 		break;
-#endif
-#ifdef SCTP_PEER_ADDR_PARAMS
 	case EXPR_SCTP_PEER_ADDR_PARAMS:
 		assert(expression->value.sctp_paddrparams);
 		free_expression(expression->value.sctp_paddrparams->spp_address);
@@ -373,15 +340,11 @@ void free_expression(struct expression *expression)
 		free_expression(expression->value.sctp_paddrparams->spp_ipv6_flowlabel);
 		free_expression(expression->value.sctp_paddrparams->spp_dscp);
 		break;
-#endif
-#ifdef SCTP_SS_VALUE
 	case EXPR_SCTP_STREAM_VALUE:
 		assert(expression->value.sctp_stream_value);
 		free_expression(expression->value.sctp_stream_value->stream_id);
 		free_expression(expression->value.sctp_stream_value->stream_value);
 		break;
-#endif
-#ifdef SCTP_ASSOCINFO
 	case EXPR_SCTP_ASSOCPARAMS:
 		free_expression(expression->value.sctp_assocparams->sasoc_asocmaxrxt);
 		free_expression(expression->value.sctp_assocparams->sasoc_number_peer_destinations);
@@ -389,26 +352,19 @@ void free_expression(struct expression *expression)
 		free_expression(expression->value.sctp_assocparams->sasoc_local_rwnd);
 		free_expression(expression->value.sctp_assocparams->sasoc_cookie_life);
 		break;
-#endif
-#ifdef SCTP_EVENT
 	case EXPR_SCTP_EVENT:
 		free_expression(expression->value.sctp_event->se_type);
 		free_expression(expression->value.sctp_event->se_on);
 		break;
-#endif
-#ifdef SCTP_DEFAULT_SNDINFO
 	case EXPR_SCTP_SNDINFO:
 		free_expression(expression->value.sctp_sndinfo->snd_sid);
 		free_expression(expression->value.sctp_sndinfo->snd_flags);
 		free_expression(expression->value.sctp_sndinfo->snd_ppid);
 		free_expression(expression->value.sctp_sndinfo->snd_context);
 		break;		
-#endif
-#ifdef SCTP_ADAPTATION_LAYER
 	case EXPR_SCTP_SETADAPTATION:
 		free_expression(expression->value.sctp_setadaptation->ssb_adaptation_ind);
 		break;
-#endif
 	case EXPR_WORD:
 		assert(expression->value.string);
 		free(expression->value.string);
@@ -594,7 +550,6 @@ static int evaluate_pollfd_expression(struct expression *in,
 	return STATUS_OK;
 }
 
-#ifdef SCTP_RTOINFO
 static int evaluate_sctp_rtoinfo_expression(struct expression *in,
 					    struct expression *out,
 					    char **error)
@@ -626,9 +581,7 @@ static int evaluate_sctp_rtoinfo_expression(struct expression *in,
 
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_INITMSG
 static int evaluate_sctp_initmsg_expression(struct expression *in,
 					    struct expression *out,
 					    char **error)
@@ -663,9 +616,7 @@ static int evaluate_sctp_initmsg_expression(struct expression *in,
 		return STATUS_ERR;
 	return STATUS_OK;
 }
-#endif
 
-#if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
 static int evaluate_sctp_assoc_value_expression(struct expression *in,
 						struct expression *out,
 						char **error)
@@ -689,9 +640,7 @@ static int evaluate_sctp_assoc_value_expression(struct expression *in,
 
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_DELAYED_SACK
 static int evaluate_sctp_sack_info_expression(struct expression *in,
 					    struct expression *out,
 					    char **error)
@@ -719,9 +668,7 @@ static int evaluate_sctp_sack_info_expression(struct expression *in,
 
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_STATUS
 static int evaluate_sctp_paddrinfo_expression(struct expression *in,
 					      struct expression *out,
 					      char **error)
@@ -816,9 +763,7 @@ static int evaluate_sctp_status_expression(struct expression *in,
 		return STATUS_ERR;
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_PEER_ADDR_PARAMS
 static int evaluate_sctp_peer_addr_param_expression(struct expression *in,
 						    struct expression *out,
 						    char **error)
@@ -865,9 +810,7 @@ static int evaluate_sctp_peer_addr_param_expression(struct expression *in,
 		return STATUS_ERR;
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_SS_VALUE
 static int evaluate_sctp_stream_value_expression(struct expression *in,
 						 struct expression *out,
 						 char **error)
@@ -895,9 +838,7 @@ static int evaluate_sctp_stream_value_expression(struct expression *in,
 
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_EVENT
 static int evaluate_sctp_event_expression(struct expression *in,
 						 struct expression *out,
 						 char **error)
@@ -925,9 +866,7 @@ static int evaluate_sctp_event_expression(struct expression *in,
 
 	return STATUS_OK; 
 }
-#endif
 
-#ifdef SCTP_ASSOCINFO
 static int evaluate_sctp_accocparams_expression(struct expression *in,
 						struct expression *out,
 						char **error)
@@ -967,9 +906,7 @@ static int evaluate_sctp_accocparams_expression(struct expression *in,
 
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_DEFAULT_SNDINFO
 static int evaluate_sctp_sndinfo_expression(struct expression *in,
 					    struct expression *out,
 					    char **error)
@@ -1004,9 +941,7 @@ static int evaluate_sctp_sndinfo_expression(struct expression *in,
 		return STATUS_ERR;
 	return STATUS_OK;
 }
-#endif
 
-#ifdef SCTP_ADAPTATION_LAYER
 static int evaluate_sctp_setadaptation_expression(struct expression *in,
 						  struct expression *out,
 						  char **error)
@@ -1030,7 +965,6 @@ static int evaluate_sctp_setadaptation_expression(struct expression *in,
 
 	return STATUS_OK;
 }
-#endif
 
 static int evaluate(struct expression *in,
 		    struct expression **out_ptr, char **error)
@@ -1055,64 +989,42 @@ static int evaluate(struct expression *in,
 		memcpy(&out->value.linger, &in->value.linger,
 		       sizeof(in->value.linger));
 		break;
-#ifdef SCTP_RTOINFO
 	case EXPR_SCTP_RTOINFO:
-		evaluate_sctp_rtoinfo_expression(in, out, error);
+		result = evaluate_sctp_rtoinfo_expression(in, out, error);
 		break;
-#endif
-#ifdef SCTP_ASSOCINFO
 	case EXPR_SCTP_ASSOCPARAMS:
-		evaluate_sctp_accocparams_expression(in, out, error);
+		result = evaluate_sctp_accocparams_expression(in, out, error);
 		break;
-#endif	
-#ifdef SCTP_INITMSG
 	case EXPR_SCTP_INITMSG:
-		evaluate_sctp_initmsg_expression(in, out, error);
+		result = evaluate_sctp_initmsg_expression(in, out, error);
 		break;
-#endif
-#if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
 	case EXPR_SCTP_ASSOC_VALUE:
-		evaluate_sctp_assoc_value_expression(in, out, error);
+		result = evaluate_sctp_assoc_value_expression(in, out, error);
 		break;
-#endif
-#ifdef SCTP_DELAYED_SACK
 	case EXPR_SCTP_SACKINFO:
-		evaluate_sctp_sack_info_expression(in, out, error);	
+		result = evaluate_sctp_sack_info_expression(in, out, error);	
 		break;
-#endif
-#ifdef SCTP_STATUS
 	case EXPR_SCTP_PADDRINFO:
-		evaluate_sctp_paddrinfo_expression(in, out, error);
+		result = evaluate_sctp_paddrinfo_expression(in, out, error);
 		break;
 	case EXPR_SCTP_STATUS:
 		result = evaluate_sctp_status_expression(in, out, error);
 		break;
-#endif
-#ifdef SCTP_PEER_ADDR_PARAMS
 	case EXPR_SCTP_PEER_ADDR_PARAMS:
 		result = evaluate_sctp_peer_addr_param_expression(in, out, error);
 		break;
-#endif
-#ifdef SCTP_SS_VALUE
 	case EXPR_SCTP_STREAM_VALUE:
-		evaluate_sctp_stream_value_expression(in, out, error);
+		result = evaluate_sctp_stream_value_expression(in, out, error);
 		break;
-#endif
-#ifdef SCTP_EVENT
 	case EXPR_SCTP_EVENT:
 		result = evaluate_sctp_event_expression(in, out, error);
 		break;
-#endif
-#ifdef SCTP_DEFAULT_SNDINFO
 	case EXPR_SCTP_SNDINFO:
 		result = evaluate_sctp_sndinfo_expression(in, out, error);
 		break;
-#endif
-#ifdef SCTP_ADAPTATION_LAYER
 	case EXPR_SCTP_SETADAPTATION:
 		result = evaluate_sctp_setadaptation_expression(in, out, error);
 		break;
-#endif
 	case EXPR_WORD:
 		out->type = EXPR_INTEGER;
 		if (symbol_to_int(in->value.string,
diff --git a/gtests/net/packetdrill/script.h b/gtests/net/packetdrill/script.h
index ecd3a56d0a12762ac50a73371e9dca9cc368a6cb..c614f9d7053d8e3363e8b3bbe254f2f84cc362fd 100644
--- a/gtests/net/packetdrill/script.h
+++ b/gtests/net/packetdrill/script.h
@@ -45,41 +45,18 @@ enum expression_t {
 	EXPR_IOVEC,		  /* expression tree for an iovec struct */
 	EXPR_MSGHDR,		  /* expression tree for a msghdr struct */
 	EXPR_POLLFD,		  /* expression tree for a pollfd struct */
-#ifdef SCTP_RTOINFO
 	EXPR_SCTP_RTOINFO,	  /* struct sctp_rtoinfo for SCTP_RTOINFO */
-#endif
-#ifdef SCTP_INITMSG
 	EXPR_SCTP_INITMSG,	  /* struct sctp_initmsg for SCTP_INITMSG */
-#endif
-#if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
 	EXPR_SCTP_ASSOC_VALUE,	  /* struct sctp_assoc_value */
-#endif
-#ifdef SCTP_DELAYED_SACK
-	EXPR_SCTP_SACKINFO,	  /* struct sctp_sack_info_expr for
-				   * SCTP_DELAYED_SACK */
-#endif
-#ifdef SCTP_STATUS
+	EXPR_SCTP_SACKINFO,	  /* struct sctp_sack_info_expr for */
 	EXPR_SCTP_STATUS,	  /* struct sctp_status for SCTP_STATUS */
 	EXPR_SCTP_PADDRINFO,
-#endif
-#ifdef SCTP_SS_VALUE
 	EXPR_SCTP_STREAM_VALUE,	  /* struct sctp_stream_value for SCTP_SS_VALUE */
-#endif
-#ifdef SCTP_PEER_ADDR_PARAMS
 	EXPR_SCTP_PEER_ADDR_PARAMS,	 /* struct for sctp_paddrparams for SCTP_PEER_ADDR_PARAMS */
-#endif
-#ifdef SCTP_ASSOCINFO
 	EXPR_SCTP_ASSOCPARAMS,    /* struct sctp_assocparams for SCTP_ASSOCINFO */
-#endif
-#ifdef SCTP_EVENT
 	EXPR_SCTP_EVENT,	  /* struct sctp_event for SCTP_EVENT */
-#endif
-#ifdef SCTP_DEFAULT_SNDINFO
 	EXPR_SCTP_SNDINFO,	  /* struct sctp_sndinfo for SCTP_DEFAULT_SNDINFO */
-#endif
-#ifdef SCTP_ADAPTATION_LAYER
 	EXPR_SCTP_SETADAPTATION, /* struct sctp_setadaptation for SCTP_ADATTATION_LAYER */
-#endif
 	NUM_EXPR_TYPES,
 };
 /* Convert an expression type to a human-readable string */
@@ -99,40 +76,18 @@ struct expression {
 		struct iovec_expr *iovec;
 		struct msghdr_expr *msghdr;
 		struct pollfd_expr *pollfd;
-#ifdef SCTP_RTOINFO
 		struct sctp_rtoinfo_expr *sctp_rtoinfo;
-#endif
-#ifdef SCTP_INITMSG
 		struct sctp_initmsg_expr *sctp_initmsg;
-#endif
-#if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
 		struct sctp_assoc_value_expr *sctp_assoc_value;
-#endif
-#ifdef SCTP_DELAYED_SACK
 		struct sctp_sack_info_expr *sctp_sack_info;
-#endif
-#ifdef SCTP_STATUS
 		struct sctp_status_expr *sctp_status;
 		struct sctp_paddrinfo_expr *sctp_paddrinfo;
-#endif
-#ifdef SCTP_PEER_ADDR_PARAMS
 		struct sctp_paddrparams_expr *sctp_paddrparams;
-#endif
-#ifdef SCTP_SS_VALUE
 		struct sctp_stream_value_expr *sctp_stream_value;
-#endif
-#ifdef SCTP_ASSOCINFO
 		struct sctp_assocparams_expr *sctp_assocparams;
-#endif
-#ifdef SCTP_EVENT
 		struct sctp_event_expr *sctp_event;
-#endif
-#ifdef SCTP_DEFAULT_SNDINFO
 		struct sctp_sndinfo_expr *sctp_sndinfo;
-#endif
-#ifdef SCTP_ADAPTATION_LAYER
 		struct sctp_setadaptation_expr *sctp_setadaptation;
-#endif
 	} value;
 	const char *format;	/* the printf format for printing the value */
 };
@@ -180,15 +135,12 @@ struct linger_expr {
 	struct expression *l_linger;
 };
 /* Parse tree for a sctp_rtoinfo struct in a [gs]etsockopt syscall. */
-#ifdef SCTP_RTOINFO
 struct sctp_rtoinfo_expr {
 	struct expression *srto_initial;
 	struct expression *srto_max;
 	struct expression *srto_min;
 };
-#endif
 
-#ifdef SCTP_INITMSG
 /* Parse tree for a sctp_initmsg struct in a [gs]etsockopt syscall. */
 struct sctp_initmsg_expr {
 	struct expression *sinit_num_ostreams;
@@ -196,32 +148,25 @@ struct sctp_initmsg_expr {
 	struct expression *sinit_max_attempts;
 	struct expression *sinit_max_init_timeo;
 };
-#endif
 
-#if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED)
 /* Parse tree for a sctp_assoc_value struct in a [gs]etsockopt syscall. */
 struct sctp_assoc_value_expr {
 	struct expression *assoc_value;
 };
-#endif
 
-#ifdef SCTP_SS_VALUE
 /* Parse tree for a sctp_stream_value struct in a [gs]etsockopt syscall. */
 struct sctp_stream_value_expr {
 	struct expression *stream_id;
 	struct expression *stream_value;
 };
-#endif
 
-#ifdef SCTP_DELAYED_SACK
 /* Parse tree for a sctp_sack_info struct in a [gs]etsockopt syscall. */
 struct sctp_sack_info_expr {
 	struct expression *sack_delay;
 	struct expression *sack_freq;
 };
-#endif
+
 /* Parse tree for a sctp_status struct in a [gs]etsockopt syscall. */
-#ifdef SCTP_STATUS
 struct sctp_status_expr {
 	struct expression *sstat_state;
 	struct expression *sstat_rwnd;
@@ -242,7 +187,6 @@ struct sctp_paddrinfo_expr {
 	struct expression *spinfo_rto;
 	struct expression *spinfo_mtu;
 };
-#endif
 
 /* Parse tree for a sctp_paddrparams struct in a [gs]etsockopt syscall. */
 struct sctp_paddrparams_expr {
@@ -255,7 +199,6 @@ struct sctp_paddrparams_expr {
 	struct expression *spp_dscp;
 };
 
-#ifdef SCTP_ASSOCINFO
 /* Parse tree for sctp_assocparams struct in [gs]etsockopt syscall. */
 struct sctp_assocparams_expr {
 	struct expression *sasoc_asocmaxrxt;
@@ -264,17 +207,13 @@ struct sctp_assocparams_expr {
 	struct expression *sasoc_local_rwnd;
 	struct expression *sasoc_cookie_life;
 };
-#endif
 
-#ifdef SCTP_EVENT
 /* Parse tree for sctp_event struct in [gs]etsockopt syscall. */
 struct sctp_event_expr {
 	struct expression *se_type;
 	struct expression *se_on;
 };
-#endif
 
-#ifdef SCTP_DEFAULT_SNDINFO
 /* Parse tree for sctp_sndinfo struct in [gs]etsockopt syscall. */
 struct sctp_sndinfo_expr {
 	struct expression *snd_sid;
@@ -282,14 +221,11 @@ struct sctp_sndinfo_expr {
 	struct expression *snd_ppid;
 	struct expression *snd_context;
 };
-#endif
 
-#ifdef SCTP_ADAPTATION_LAYER
 /* Parse tree for sctp_setadaptation struct in [gs]etsockopt syscall. */
 struct sctp_setadaptation_expr {
 	struct expression *ssb_adaptation_ind;
 };
-#endif
 
 /* The errno-related info from strace to summarize a system call error */
 struct errno_spec {
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 0cd0e2782d3dac117cdea1e727f12af2c1a3b2c4..1c5977792ac854e857f3733b7803f8826aaa9c57 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
@@ -8,7 +8,7 @@
 +0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]
 +0.1 < sctp: COOKIE_ACK[flgs=0]
 
-//+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