diff --git a/gtests/net/packetdrill/sctp_packet.c b/gtests/net/packetdrill/sctp_packet.c
index f383f7b4651d6b804b5d68b77c7eef2a3ec3a6ea..c84be0ee906e917e11c9572f597ae13f06263ca4 100644
--- a/gtests/net/packetdrill/sctp_packet.c
+++ b/gtests/net/packetdrill/sctp_packet.c
@@ -516,6 +516,9 @@ sctp_generic_chunk_new(s64 type, s64 flgs, s64 len,
 	}
 	if (bytes != NULL) {
 		value_length = bytes->nr_entries;
+		if (value_length < length - header_length) {
+			flags |= FLAG_CHUNK_PARTIAL;
+		}
 	} else {
 		value_length = length- header_length;
 		flags |= FLAG_CHUNK_VALUE_NOCHECK;
@@ -1768,6 +1771,9 @@ sctp_generic_parameter_new(s64 type, s64 len, struct sctp_byte_list *bytes)
 	}
 	if (bytes != NULL) {
 		value_length = bytes->nr_entries;
+		if (value_length < length - header_length) {
+			flags |= FLAG_PARAMETER_PARTIAL;
+		}
 	} else {
 		value_length = length - header_length;
 		flags |= FLAG_PARAMETER_VALUE_NOCHECK;
@@ -2526,6 +2532,9 @@ sctp_generic_cause_new(s64 code, s64 len, struct sctp_byte_list *bytes)
 	}
 	if (bytes != NULL) {
 		information_length = bytes->nr_entries;
+		if (information_length < length - header_length) {
+			flags |= FLAG_CAUSE_PARTIAL;
+		}
 	} else {
 		information_length = length - header_length;
 		flags |= FLAG_CAUSE_INFORMATION_NOCHECK;
@@ -3403,6 +3412,33 @@ new_sctp_packet(int address_family,
 				 "bad CRC32C can only be requested for inbound packets");
 			return NULL;
 		}
+		for (chunk_item = list->first;
+		     chunk_item != NULL;
+		     chunk_item = chunk_item->next) {
+			if (chunk_item->flags & FLAG_CHUNK_PARTIAL) {
+				asprintf(error,
+					 "Partial chunks not supported for outbound packets");
+				return NULL;
+			}
+			for (parameter_item = chunk_item->parameter_list->first;
+			     parameter_item != NULL;
+			     parameter_item = parameter_item->next) {
+				if (parameter_item->flags & FLAG_PARAMETER_PARTIAL) {
+					asprintf(error,
+						 "Partial parameters not supported for outbound packets");
+					return NULL;
+				}
+			}
+			for (cause_item = chunk_item->cause_list->first;
+			     cause_item != NULL;
+			     cause_item = cause_item->next) {
+				if (cause_item->flags & FLAG_CAUSE_PARTIAL) {
+					asprintf(error,
+						 "Partial causes not supported for outbound packets");
+					return NULL;
+				}
+			}
+		}
 	}
 
 	/* Allocate and zero out a packet object of the desired size */
diff --git a/gtests/net/packetdrill/sctp_packet.h b/gtests/net/packetdrill/sctp_packet.h
index 33f420e5a538264837d47b0749831d23fe7a7be6..e9f8e899d03458d7174ddaf425f19dd65b871c1d 100644
--- a/gtests/net/packetdrill/sctp_packet.h
+++ b/gtests/net/packetdrill/sctp_packet.h
@@ -261,6 +261,7 @@ sctp_chunk_list_item_new(struct sctp_chunk *chunk, u32 length, u32 flags,
 #define FLAG_CHUNK_FLAGS_NOCHECK                0x00000002
 #define FLAG_CHUNK_LENGTH_NOCHECK               0x00000004
 #define FLAG_CHUNK_VALUE_NOCHECK                0x00000008
+#define FLAG_CHUNK_PARTIAL                      0x00000010
 
 struct sctp_chunk_list_item *
 sctp_generic_chunk_new(s64 type, s64 flgs, s64 len,
@@ -400,9 +401,10 @@ sctp_chunk_list_append(struct sctp_chunk_list *list,
 void
 sctp_chunk_list_free(struct sctp_chunk_list *list);
 
-#define FLAG_PARAMETER_TYPE_NOCHECK				0x00000001
-#define FLAG_PARAMETER_LENGTH_NOCHECK				0x00000002
-#define FLAG_PARAMETER_VALUE_NOCHECK				0x00000004
+#define FLAG_PARAMETER_TYPE_NOCHECK                             0x00000001
+#define FLAG_PARAMETER_LENGTH_NOCHECK                           0x00000002
+#define FLAG_PARAMETER_VALUE_NOCHECK                            0x00000004
+#define FLAG_PARAMETER_PARTIAL                                  0x00000008
 
 struct sctp_parameter_list_item *
 sctp_parameter_list_item_new(struct sctp_parameter *parameter,
@@ -498,10 +500,10 @@ struct sctp_cause_list_item *
 sctp_cause_list_item_new(struct sctp_cause *cause,
                          u32 length, u32 flags);
 
-#define FLAG_CAUSE_CODE_NOCHECK					0x00000001
-#define FLAG_CAUSE_LENGTH_NOCHECK				0x00000002
-#define FLAG_CAUSE_INFORMATION_NOCHECK				0x00000004
-
+#define FLAG_CAUSE_CODE_NOCHECK                                 0x00000001
+#define FLAG_CAUSE_LENGTH_NOCHECK                               0x00000002
+#define FLAG_CAUSE_INFORMATION_NOCHECK                          0x00000004
+#define FLAG_CAUSE_PARTIAL                                      0x00000008
 struct sctp_cause_list_item *
 sctp_generic_cause_new(s64 code, s64 len, struct sctp_byte_list *bytes);