From f9a20dfde106c5b2de1f0e8b7ed31c8c93f5bcdf Mon Sep 17 00:00:00 2001
From: Hoelscher <jens.hoelscher@fh-muenster.de>
Date: Mon, 9 May 2016 10:40:47 +0200
Subject: [PATCH] fix empty reconfig chunk

---
 gtests/net/packetdrill/sctp_packet.c | 35 +++++++++++++++-------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/gtests/net/packetdrill/sctp_packet.c b/gtests/net/packetdrill/sctp_packet.c
index 7936fc02..f7946405 100644
--- a/gtests/net/packetdrill/sctp_packet.c
+++ b/gtests/net/packetdrill/sctp_packet.c
@@ -1295,6 +1295,8 @@ sctp_reconfig_chunk_new(s64 flgs, struct sctp_parameter_list *parameters)
 	chunk_length = (u16)sizeof(struct sctp_reconfig_chunk);
 	if (parameters != NULL) {
 		chunk_length += parameters->length;
+	} else {
+		parameters = sctp_parameter_list_new();
 	}
 	padding_length = chunk_length % 4;
 	if (padding_length > 0) {
@@ -1311,25 +1313,26 @@ sctp_reconfig_chunk_new(s64 flgs, struct sctp_parameter_list *parameters)
 		 chunk->flags = (u8)flgs;
 	}
 	chunk->length = htons(chunk_length);
-
+	printf("begin\n");
 	offset = 0;
-	if (parameters != NULL) {
-		for (item = parameters->first; item != NULL; item = item->next) {
-			parameter_padding_length = item->length % 4;
-			if (parameter_padding_length > 0) {
-				parameter_padding_length = 4 - parameter_padding_length;
-			}
-			memcpy(chunk->parameter + offset,
-			       item->parameter,
-			       item->length + parameter_padding_length);
-			free(item->parameter);
-			item->parameter = (struct sctp_parameter *)(chunk->parameter + offset);
-			if (item->flags & FLAG_PARAMETER_LENGTH_NOCHECK) {
-				flags |= FLAG_CHUNK_LENGTH_NOCHECK;
-			}
-			offset += item->length + parameter_padding_length;
+
+	for (item = parameters->first; item != NULL; item = item->next) {
+		parameter_padding_length = item->length % 4;
+		if (parameter_padding_length > 0) {
+			parameter_padding_length = 4 - parameter_padding_length;
 		}
+		memcpy(chunk->parameter + offset,
+		       item->parameter,
+		       item->length + parameter_padding_length);
+		free(item->parameter);
+		item->parameter = (struct sctp_parameter *)(chunk->parameter + offset);
+		if (item->flags & FLAG_PARAMETER_LENGTH_NOCHECK) {
+			flags |= FLAG_CHUNK_LENGTH_NOCHECK;
+		}
+		offset += item->length + parameter_padding_length;
 	}
+
+	printf("end\n");
 	return sctp_chunk_list_item_new((struct sctp_chunk *)chunk,
 					chunk_length + padding_length,
 					flags, parameters,
-- 
GitLab