diff --git a/gtests/net/packetdrill/sctp_packet.c b/gtests/net/packetdrill/sctp_packet.c
index eb9a1e5d1fab5406371697581644fd3fd0c3886f..23112204244cf2c4fc15ca35821e0ce182d8b48b 100644
--- a/gtests/net/packetdrill/sctp_packet.c
+++ b/gtests/net/packetdrill/sctp_packet.c
@@ -1571,9 +1571,44 @@ sctp_supported_address_types_parameter_new(struct sctp_address_type_list *list)
 }
 
 struct sctp_parameter_list_item *
-sctp_supported_extensions_parameter_new(s64 len, struct sctp_byte_list *types)
+sctp_supported_extensions_parameter_new(struct sctp_byte_list *list)
 {
-	return sctp_generic_parameter_new(SCTP_SUPPORTED_EXTENSIONS_PARAMETER_TYPE, len, types);
+	struct sctp_supported_extensions_parameter *parameter;
+
+	u32 flags;
+	u16 i, parameter_length, padding_length;
+	struct sctp_byte_list_item *item;
+
+	flags = 0;
+	parameter_length = sizeof(struct sctp_supported_extensions_parameter);
+	if (list == NULL) {
+		flags |= FLAG_PARAMETER_LENGTH_NOCHECK;
+		flags |= FLAG_PARAMETER_VALUE_NOCHECK;
+	} else {
+		assert(list->nr_entries <=
+		       (MAX_SCTP_PARAMETER_BYTES - sizeof(struct sctp_supported_extensions_parameter)) / sizeof(u8));
+		parameter_length += list->nr_entries * sizeof(u8);
+	}
+	padding_length = parameter_length % 4;
+	if (padding_length > 0) {
+		padding_length = 4 - padding_length;
+	}
+	assert(padding_length < 4);
+	parameter = malloc(parameter_length + padding_length);
+	assert(parameter != NULL);
+	parameter->type = htons(SCTP_SUPPORTED_EXTENSIONS_PARAMETER_TYPE);
+	parameter->length = htons(parameter_length);
+	if (list != NULL) {
+		for (i = 0, item = list->first;
+		     (i < list->nr_entries) && (item != NULL);
+		     i++, item = item->next) {
+			parameter->chunk_type[i] = item->byte;
+		}
+		assert((i == list->nr_entries) && (item == NULL));
+	}
+	memset(parameter->chunk_type + list->nr_entries, 0, padding_length);
+	return sctp_parameter_list_item_new((struct sctp_parameter *)parameter,
+	                                    parameter_length, flags);
 }
 
 struct sctp_parameter_list_item *
diff --git a/gtests/net/packetdrill/sctp_packet.h b/gtests/net/packetdrill/sctp_packet.h
index 108b0ef6bd71f3718b90023d64a57d94cfc0fa39..ba972b395bb1bf338093c6b0ef1d742af2c546cc 100644
--- a/gtests/net/packetdrill/sctp_packet.h
+++ b/gtests/net/packetdrill/sctp_packet.h
@@ -341,7 +341,7 @@ struct sctp_parameter_list_item *
 sctp_pad_parameter_new(s64 len, u8 *padding);
 
 struct sctp_parameter_list_item *
-sctp_supported_extensions_parameter_new(s64 len, struct sctp_byte_list *types);
+sctp_supported_extensions_parameter_new(struct sctp_byte_list *list);
 
 struct sctp_parameter_list_item *
 sctp_pad_parameter_new(s64 len, u8 *padding);