diff --git a/gtests/net/packetdrill/lexer.l b/gtests/net/packetdrill/lexer.l
index 9e191c2354d8f7417ba47497716e88e9c44d3a29..a0888dd15dab2a5f66fad31650e5d7d0acf8c167 100644
--- a/gtests/net/packetdrill/lexer.l
+++ b/gtests/net/packetdrill/lexer.l
@@ -249,6 +249,7 @@ spp_pathmtu			return SPP_PATHMTU;
 spp_flags			return SPP_FLAGS;
 spp_ipv6_flowlabel		return SPP_IPV6_FLOWLABEL_; /* avoid name clash */
 spp_dscp			return SPP_DSCP_; /* avoid name clash */
+se_assoc_id			return SE_ASSOC_ID;
 se_type				return SE_TYPE;
 se_on				return SE_ON;
 sctp_data_io_event              return _SCTP_DATA_IO_EVENT_;
diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y
index ff640f28b427406d863f6c7fa6f606baf7af3ae2..0e8979864c2c025e0dcda48669db058588d81ecb 100644
--- a/gtests/net/packetdrill/parser.y
+++ b/gtests/net/packetdrill/parser.y
@@ -537,7 +537,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string,
 %token <reserved> SPP_ADDRESS SPP_HBINTERVAL SPP_PATHMAXRXT SPP_PATHMTU
 %token <reserved> SPP_FLAGS SPP_IPV6_FLOWLABEL_ SPP_DSCP_
 %token <reserved> SASOC_ASOCMAXRXT SASOC_NUMBER_PEER_DESTINATIONS SASOC_PEER_RWND
-%token <reserved> SASOC_LOCAL_RWND SASOC_COOKIE_LIFE SE_TYPE SE_ON
+%token <reserved> SASOC_LOCAL_RWND SASOC_COOKIE_LIFE SE_ASSOC_ID SE_TYPE SE_ON
 %token <reserved> SND_SID SND_FLAGS SND_PPID SND_CONTEXT SND_ASSOC_ID SSB_ADAPTATION_IND
 %token <reserved> BAD_CRC32C NULL_
 %token <reserved> SINFO_STREAM SINFO_SSN SINFO_FLAGS SINFO_PPID SINFO_CONTEXT SINFO_ASSOC_ID
@@ -614,7 +614,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string,
 %type <expression> sasoc_asocmaxrxt sasoc_number_peer_destinations sasoc_peer_rwnd
 %type <expression> sasoc_local_rwnd sasoc_cookie_life sctp_assocparams
 %type <expression> sctp_sndinfo snd_sid snd_flags snd_ppid snd_assoc_id snd_context
-%type <expression> sctp_event se_type se_on sctp_setadaptation null
+%type <expression> sctp_event se_assoc_id se_type se_on sctp_setadaptation null
 %type <expression> sctp_sndrcvinfo sinfo_stream sinfo_ssn sinfo_flags sinfo_ppid sinfo_context
 %type <expression> sinfo_timetolive sinfo_tsn sinfo_cumtsn sinfo_assoc_id sinfo_pr_value serinfo_next_flags
 %type <expression> serinfo_next_stream serinfo_next_aid serinfo_next_length serinfo_next_ppid sctp_extrcvinfo
@@ -3205,6 +3205,16 @@ sctp_assocparams
 }
 ;
 
+se_assoc_id
+: SE_ASSOC_ID '=' INTEGER {
+	if (!is_valid_u32($3)) {
+		semantic_error("se_assoc_id out of range");
+	}
+	$$ = new_integer_expression($3, "%u");
+}
+| SE_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); }
+;
+
 se_type
 : SE_TYPE '=' INTEGER {
 	if (!is_valid_u16($3)) {
@@ -3229,11 +3239,12 @@ se_on
 ;
 
 sctp_event
-: '{' se_type ',' se_on '}' {
+: '{' se_assoc_id ',' se_type ',' se_on '}' {
 	$$ = 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;
+	$$->value.sctp_event->se_assoc_id = $2;
+	$$->value.sctp_event->se_type = $4;
+	$$->value.sctp_event->se_on = $6;
 }
 ;
 
diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c
index 139d71f980051c032d3c29139385a2e60c8b179b..7e0e290a91239fd73033fe95e1c88786fd97e259 100644
--- a/gtests/net/packetdrill/run_system_call.c
+++ b/gtests/net/packetdrill/run_system_call.c
@@ -2704,6 +2704,9 @@ static int check_sctp_event(struct sctp_event_expr *expr,
 			    struct sctp_event *sctp_event,
 			    char **error)
 {
+	if (check_u32_expr(expr->se_assoc_id, sctp_event->se_assoc_id,
+			   "sctp_event.se_assoc_id", error))
+		return STATUS_ERR;
 	if (check_u16_expr(expr->se_type, sctp_event->se_type,
 			   "sctp_event.se_type", error))
 		return STATUS_ERR;
@@ -2935,7 +2938,16 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall,
 	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;
+		if (val_expression->value.sctp_event->se_assoc_id->type != EXPR_ELLIPSIS) {
+			if (get_u32(val_expression->value.sctp_event->se_assoc_id,
+				    &((struct sctp_event *)live_optval)->se_assoc_id,
+				    error)) {
+				free(live_optval);
+				return STATUS_ERR;
+			}
+		} else {
+			((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,
 			    error)) {
@@ -3278,7 +3290,14 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall,
 #endif
 #ifdef SCTP_EVENT
 	case EXPR_SCTP_EVENT:
-		event.se_assoc_id = 0;
+		if (val_expression->value.sctp_event->se_assoc_id->type != EXPR_ELLIPSIS) {
+			if (get_u16(val_expression->value.sctp_event->se_assoc_id,
+				    &event.se_type, error)) {
+				return STATUS_ERR;
+			}
+		} else {
+			event.se_assoc_id = 0;
+		}
 		if (get_u16(val_expression->value.sctp_event->se_type,
 			    &event.se_type, error)) {
 			return STATUS_ERR;
diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c
index 49579d9a17221fbc5ec20be241cf495fbb55716a..b4d5463afb2a3593e4cdaeeac413f4a9cecef0b9 100644
--- a/gtests/net/packetdrill/script.c
+++ b/gtests/net/packetdrill/script.c
@@ -377,6 +377,7 @@ void free_expression(struct expression *expression)
 		free_expression(expression->value.sctp_assocparams->sasoc_cookie_life);
 		break;
 	case EXPR_SCTP_EVENT:
+		free_expression(expression->value.sctp_event->se_assoc_id);
 		free_expression(expression->value.sctp_event->se_type);
 		free_expression(expression->value.sctp_event->se_on);
 		break;
@@ -1082,6 +1083,10 @@ static int evaluate_sctp_event_expression(struct expression *in,
 	in_event = in->value.sctp_event;
 	out_event = out->value.sctp_event;
 
+	if (evaluate(in_event->se_assoc_id,
+		    &out_event->se_assoc_id,
+		    error))
+		return STATUS_ERR;
 	if (evaluate(in_event->se_type,
 		    &out_event->se_type,
 		    error))
diff --git a/gtests/net/packetdrill/script.h b/gtests/net/packetdrill/script.h
index b7fbf88290996bbeb1909110e2f624a4fec02b28..64243b9796bf1ccfa721f7a128ca2a1a2fe55977 100644
--- a/gtests/net/packetdrill/script.h
+++ b/gtests/net/packetdrill/script.h
@@ -265,6 +265,7 @@ struct sctp_assocparams_expr {
 
 /* Parse tree for sctp_event struct in [gs]etsockopt syscall. */
 struct sctp_event_expr {
+	struct expression *se_assoc_id;
 	struct expression *se_type;
 	struct expression *se_on;
 };
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt
index 282b383885d289485e3e1b9d225fd6387131e6bf..6a3a663b916a0543f451d1dd829aa62698a5b6de 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt
@@ -6,8 +6,8 @@
 +0.0 listen(3, 1) = 0
 
 // Enable Event notification
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, [8]) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, [8]) = 0
 
 // Send Adaptation Indication with Init chunk
 +0.0 < sctp: INIT[flgs=0, tag=1, a_rwnd=1500, os=1, is=1, tsn=0,
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt
index 78467aad5dacfba214c238767bc8a1f831f938fb..f110cab2989614c5b5b299738950d857e10833d6 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt
@@ -3,8 +3,8 @@
 +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
 // Check the handshake with an empty(!) cookie
 +0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ASSOC_CHANGE, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ASSOC_CHANGE, se_on=1}, [8]) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ASSOC_CHANGE, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ASSOC_CHANGE, se_on=1}, [8]) = 0
 +0.0 > 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=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
 +0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt
index cf7a4ce7ec91e5ddd463685b57cb12342a8c4595..4b216e9877183a0104c96f4216955d6829fce983 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt
@@ -3,8 +3,8 @@
 +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
 // Check the handshake with an empty(!) cookie
 +0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, [8]) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, [8]) = 0
 +0.0 > 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=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
 +0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications.pkt
deleted file mode 100644
index 6df07beeb907fdf8d0cd3fa52e0797af1252b672..0000000000000000000000000000000000000000
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications.pkt
+++ /dev/null
@@ -1,60 +0,0 @@
-+0.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
-// Check the handshake with an empty(!) cookie
-+0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
-+0.0 > 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=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
-+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
-//test for enable socketoptions with SCTP_EVENT and SCTP_EVENTS
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0
-
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, sctp_association_event=1, sctp_address_event=0, sctp_send_failure_event=1,
-sctp_peer_error_event=0, sctp_shutdown_event=1, sctp_partial_delivery_event=0, sctp_adaptation_layer_event=0, sctp_authentication_event=0,
-sctp_sender_dry_event=0}, 11) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
-
-//Deactivate all EVENTS
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, sctp_association_event=0, sctp_address_event=0, sctp_send_failure_event=0,
-sctp_peer_error_event=0, sctp_shutdown_event=0, sctp_partial_delivery_event=0, sctp_adaptation_layer_event=0, sctp_authentication_event=0,
-sctp_sender_dry_event=0}, 11) = 0
-
-//test for SENDER_DRY_EVENT
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=1}, 8) = 0
-+0.0 sctp_recvv(3, [{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT, sender_dry_flags=0, sender_dry_length=12, sender_dry_assoc_id=3}, iov_len=1000}],
-1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=0}, 8) = 0
-
-//test for SEND_FAILED_EVENT
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SEND_FAILED_EVENT, se_on=1}, 8) = 0
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=150, srto_min=50}, 16) = 0
-+0.0 write(3, ..., 1000) = 1000
-+0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-*    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-*    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-*    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-*    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-*    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-*    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-*    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-+1.0 sctp_recvv(3, [{iov_base={ssfe_type=SCTP_SEND_FAILED_EVENT, ssfe_flags=SCTP_DATA_SENT, ssfe_length=1032, ssfe_error=0,
-ssfe_info={snd_sid=0, snd_flags=3, snd_ppid=htonl(0), snd_context=0, snd_assoc_id=...}, ssfe_assoc_id=3, ssfe_data=...}, iov_len=1000}],
-1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SEND_FAILED_EVENT, se_on=0}, 8) = 0
-
-//+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0
-//+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0
-// Tear down the association
-//+0.0 < sctp: SHUTDOWN[flgs=0, cum_tsn=0]
-//*    > sctp: SHUTDOWN_ACK[flgs=0]
-//+0.0 < sctp: SHUTDOWN_COMPLETE[flgs=0]
-//+0.0 recvmsg(3, {msg_name(...)=..., 
-//		 msg_iov(1)=[{iov_base={sse_type=SCTP_SHUTDOWN_EVENT, sse_flags=0, sse_length=12}, iov_len=1000}],
-//		 msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12
-//+0.0 sctp_recvv(3, [{iov_base={sse_type=SCTP_SHUTDOWN_EVENT, sse_flags=1, sse_length=12}, iov_len=1000}], 1,
-//..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt
index 6adecb8f05d09a6964e5db5d966391bbfe01e71b..65a7771b77639237c0e5b8b27846dccc007f1bd3 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt
@@ -3,9 +3,9 @@
 +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
 // Check the handshake with an empty(!) cookie
 +0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, [8]) = 0
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_NOTIFICATIONS_STOPPED_EVENT, se_on=1}, 8) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, [8]) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_NOTIFICATIONS_STOPPED_EVENT, se_on=1}, 8) = 0
 
 +0.0 > 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=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt
index b1c619e8dfcb773fed123181ce3e1774165ebdba..68ffb5bba20a025be8a21d819098957a32e38dda 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt
@@ -3,18 +3,24 @@
 +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
 // Check the handshake with an empty(!) cookie
 +0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_PARTIAL_DELIVERY_EVENT, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_PARTIAL_DELIVERY_EVENT, se_on=1}, [8]) = 0
 +0.0 > 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=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
 +0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]
 +0.1 < sctp: COOKIE_ACK[flgs=0]
+//Enable Partial delivery event
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PARTIAL_DELIVERY_EVENT, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PARTIAL_DELIVERY_EVENT, se_on=1}, [8]) = 0
 
 +0.0 < sctp: DATA[flgs=B, len=300, tsn=1, sid=0, ssn=0, ppid=0]
 +0.0 > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]]
 +0.0 < sctp: DATA[flgs=0, len=300, tsn=2, sid=0, ssn=0, ppid=0]
 *    > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]]
 +0.0 < sctp: ABORT[flgs=0]
-+1.5 sctp_recvv(3, [{iov_base=..., iov_len=1000}, {iov_base={pdapi_type=SCTP_PARTIAL_DELIVERY_EVENT, pdapi_flags=0,pdapi_length=24,
-pdapi_indication=SCTP_PARTIAL_DELIVERY_ABORTED, pdapi_stream=0, pdapi_seq=0, pdapi_assoc_id=3 }, iov_len=1000}], 2, ..., 20, NULL, [0],
-[SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 21
++1.5 sctp_recvv(3, [{iov_base=..., iov_len=1000},
+		    {iov_base={pdapi_type=SCTP_PARTIAL_DELIVERY_EVENT,
+			       pdapi_flags=0,
+			       pdapi_length=24,
+			       pdapi_indication=SCTP_PARTIAL_DELIVERY_ABORTED,
+			       pdapi_stream=0,
+			       pdapi_seq=0,
+			       pdapi_assoc_id=3 }, iov_len=1000}], 2, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 21
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt
index ffd6eabc1bdaa607a7fae91a60e6e7b6c93ab3e9..1e9238b66c0356f596b239491ccaa5e2610a4a8c 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt
@@ -3,8 +3,8 @@
 +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
 // Check the handshake with an empty(!) cookie
 +0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_PEER_ADDR_CHANGE, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_PEER_ADDR_CHANGE, se_on=1}, [8]) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PEER_ADDR_CHANGE, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PEER_ADDR_CHANGE, se_on=1}, [8]) = 0
 +0.0 > 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=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
 +0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt
index 4d245235197b7f22585e70aa63536206b03cb82d..7479fdc1554e6a87cb508fad6418678d8b26e856 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt
@@ -3,8 +3,8 @@
 +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
 // Check the handshake with an empty(!) cookie
 +0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_REMOTE_ERROR, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_REMOTE_ERROR, se_on=1}, [8]) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_REMOTE_ERROR, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_REMOTE_ERROR, se_on=1}, [8]) = 0
 +0.0 > 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=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
 +0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt
index 6a55b3dc6db8f738d6f1dc25008c0547089ca008..db09d5fd93e19fe1df8c6dbe55b9bb1b896d91a1 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt
@@ -13,8 +13,14 @@
 spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0
 
 //test for SEND_FAILED_EVENT
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SEND_FAILED, se_on=1}, 8) = 0
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=150, srto_min=50}, 16) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SEND_FAILED, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SEND_FAILED, se_on=1}, [8]) = 0
+
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0,
+						srto_initial=100,
+						srto_max=150,
+						srto_min=50}, 16) = 0
+
 +0.0 write(3, ..., 1000) = 1000
 +0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
@@ -24,7 +30,18 @@ spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-+1.0 sctp_recvv(3, [{iov_base={ssf_type=SCTP_SEND_FAILED, ssf_flags=SCTP_DATA_SENT, ssf_length=1144, ssf_error=0,
-ssf_info={sinfo_stream=0, sinfo_ssn=0, sinfo_flags=3, sinfo_ppid=htonl(0), sinfo_context=0, sinfo_timetolive=0, sinfo_tsn=0, sinfo_cumtsn=0},
-ssf_assoc_id=3, ssf_data=...}, iov_len=1000}],
-1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000
++1.0 sctp_recvv(3, [{iov_base={ssf_type=SCTP_SEND_FAILED,
+			       ssf_flags=SCTP_DATA_SENT,
+			       ssf_length=1144,
+			       ssf_error=0,
+			       ssf_info={sinfo_stream=0,
+					 sinfo_ssn=0,
+					 sinfo_flags=3,
+					 sinfo_ppid=htonl(0),
+					 sinfo_context=0,
+					 sinfo_timetolive=0,
+					 sinfo_tsn=0,
+					 sinfo_cumtsn=0,
+					 sinfo_assoc_id=3},
+			       ssf_assoc_id=3,
+			       ssf_data=...}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt
index 69780e2574b8fe6729948c558e8225cd930d268e..51cd97210d8ade8af2dd814c259eb5041a766240 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt
@@ -7,14 +7,26 @@
 +0.1 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]]
 +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 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address=..., spp_hbinterval=0, spp_pathmaxrxt=100, spp_pathmtu=1468, spp_flags=SPP_HB_DISABLE, 
-spp_ipv6_flowlabel=0, 
-spp_dscp=0}, 152) = 0
++0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address=...,
+						       spp_hbinterval=0,
+						       spp_pathmaxrxt=100,
+						       spp_pathmtu=1468,
+						       spp_flags=SPP_HB_DISABLE,
+						       spp_ipv6_flowlabel=0,
+						       spp_dscp=0}, 152) = 0
 
 //test for SEND_FAILED_EVENT
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SEND_FAILED_EVENT, se_on=1}, 8) = 0
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=150, srto_min=50}, 16) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0,
+					      se_type=SCTP_SEND_FAILED_EVENT,
+					      se_on=1}, 8) = 0
+
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0,
+						srto_initial=100,
+						srto_max=150,
+						srto_min=50}, 16) = 0
+
 +0.0 write(3, ..., 1000) = 1000
 +0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
@@ -24,6 +36,14 @@ spp_dscp=0}, 152) = 0
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
 *    > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0]
-+1.0 sctp_recvv(3, [{iov_base={ssfe_type=SCTP_SEND_FAILED_EVENT, ssfe_flags=SCTP_DATA_SENT, ssfe_length=1032, ssfe_error=0,
-ssfe_info={snd_sid=0, snd_flags=3, snd_ppid=htonl(0), snd_context=0}, ssfe_assoc_id=3, ssfe_data=...}, iov_len=1000}],
-1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000
++1.0 sctp_recvv(3, [{iov_base={ssfe_type=SCTP_SEND_FAILED_EVENT,
+			       ssfe_flags=SCTP_DATA_SENT,
+			       ssfe_length=1032,
+			       ssfe_error=0,
+			       ssfe_info={snd_sid=0,
+					  snd_flags=3,
+                                          snd_ppid=htonl(0),
+                                          snd_context=0,
+					  snd_assoc_id=3},
+			       ssfe_assoc_id=3,
+			       ssfe_data=...}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_sender_dry_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_sender_dry_event.pkt
index bbca55239d311473133ee2758b7f5125c5553db6..f060cbee7b38827f4911d3e33fc8726c2c70a954 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_sender_dry_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_sender_dry_event.pkt
@@ -8,20 +8,27 @@
 +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
+
 //test for enable socketoptions with SCTP_EVENT and SCTP_EVENTS
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, 8) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1,
+					       sctp_association_event=1,
+					       sctp_address_event=0,
+					       sctp_send_failure_event=1,
+					       sctp_peer_error_event=0,
+					       sctp_shutdown_event=1,
+					       sctp_partial_delivery_event=0,
+					       sctp_adaptation_layer_event=0,
+					       sctp_authentication_event=0,
+					       sctp_sender_dry_event=0}, 11) = 0
 
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, sctp_association_event=1, sctp_address_event=0, sctp_send_failure_event=1,
-sctp_peer_error_event=0, sctp_shutdown_event=1, sctp_partial_delivery_event=0, sctp_adaptation_layer_event=0, sctp_authentication_event=0,
-sctp_sender_dry_event=0}, 11) = 0
-+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
 
 //test for SENDER_DRY_EVENT
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=1}, 8) = 0
-+0.0 sctp_recvv(3, [{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT, sender_dry_flags=0, sender_dry_length=12, sender_dry_assoc_id=3}, iov_len=1000}],
-1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=0}, 8) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SENDER_DRY_EVENT, se_on=1}, 8) = 0
++0.0 sctp_recvv(3, [{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT,
+			       sender_dry_flags=0,
+			       sender_dry_length=12,
+			       sender_dry_assoc_id=3}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12
+
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SENDER_DRY_EVENT, se_on=0}, 8) = 0
 
diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt
index 01793f1309db9c351eb45c6ca26f37f8f08417c4..9671000ddce4f8021868cd7a2e38d9caa8a01be6 100644
--- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt
+++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt
@@ -8,8 +8,10 @@
 +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
+
 //test for enable socketoptions with SCTP_EVENT and SCTP_EVENTS
-+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0
++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
 
 // Tear down the association
 +0.0 < sctp: SHUTDOWN[flgs=0, cum_tsn=0]
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 b0c3f423162bf9577b6d2a8be4c93ee72baac371..ffb390ab0dc03c30f63aa46ef403bd01e5f5d403 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
@@ -114,8 +114,8 @@ sasoc_cookie_life=...}, [20]) = 0
 +0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=..., sack_freq=1}, [12]) = 0
 +0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=...}, [12]) = 0
 
-+0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0
-+0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0
++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0
 
 +0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=0, snd_ppid=htonl(1), snd_context=1, snd_assoc_id=0}, 16) = 0
 +0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=0, snd_ppid=htonl(1), snd_context=1, snd_assoc_id=0}, [16]) = 0