diff --git a/gtests/net/packetdrill/lexer.l b/gtests/net/packetdrill/lexer.l
index bc5e376f809b839d21f0f8472d86a1dbd6fb2647..71f72a1dbc26ff52e53e0e4c81d940a4c17963fa 100644
--- a/gtests/net/packetdrill/lexer.l
+++ b/gtests/net/packetdrill/lexer.l
@@ -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;
diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y
index 235e8f460328744de398a84e68f88856f2ebf051..330562dc751db025514d78c0619bad9831cc5246 100644
--- a/gtests/net/packetdrill/parser.y
+++ b/gtests/net/packetdrill/parser.y
@@ -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;
 }
 ;
 
diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c
index dae5651ef6f39e2f23c4d4435ec2cbcf9f8a46fc..9e2cc0635b5bc35db20b8bf3c6d4378772b159f8 100644
--- a/gtests/net/packetdrill/run_system_call.c
+++ b/gtests/net/packetdrill/run_system_call.c
@@ -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);
diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c
index b359a85ae910daaa8c6f9f4912bde70f7afea350..2490e907d6dbcb42a5d7e02eefb8ce6d277c6024 100644
--- a/gtests/net/packetdrill/script.c
+++ b/gtests/net/packetdrill/script.c
@@ -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:
diff --git a/gtests/net/packetdrill/script.h b/gtests/net/packetdrill/script.h
index 854d3c5f33b757ca7f6ea8dd5bfa6bb459e87e05..e604d910f73f4d921cb1d693435c06cca6b1677b 100644
--- a/gtests/net/packetdrill/script.h
+++ b/gtests/net/packetdrill/script.h
@@ -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 */
diff --git a/gtests/net/packetdrill/symbols_freebsd.c b/gtests/net/packetdrill/symbols_freebsd.c
index aed53ffe01e68831c69cc82fcc50dba5e769e2a2..14eda9cf01e377000c9e3fcc118df62461ea40d3 100644
--- a/gtests/net/packetdrill/symbols_freebsd.c
+++ b/gtests/net/packetdrill/symbols_freebsd.c
@@ -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"                      },
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 6ce974d7dfb9bb33ef7f03c5b79f615aa51b0e93..ab9e46ca990b393d1c2f51fc6039d5837f907ede 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
@@ -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
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt
index 6b0e90a24e57393a77eecfb50e56cacb8ac07b9d..c6ba3996e650b05f17fd958de0e7a9403c874217 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt
@@ -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