diff --git a/gtests/net/packetdrill/run_packet.c b/gtests/net/packetdrill/run_packet.c
index d6fd27eb535b5c2f34c93948d102c6eea1a9a309..4278dcb3167ec204c6e86c030fb9548847ceee40 100644
--- a/gtests/net/packetdrill/run_packet.c
+++ b/gtests/net/packetdrill/run_packet.c
@@ -980,8 +980,8 @@ static int verify_ipv4(
 	case IPPROTO_TCP:
 		if (check_field("ipv4_total_length",
 				(ntohs(script_ipv4->tot_len) +
-				tcp_options_allowance(actual_packet,
-						      script_packet)),
+				 tcp_options_allowance(actual_packet,
+						       script_packet)),
 				ntohs(actual_ipv4->tot_len), error))
 			return STATUS_ERR;
 		break;
@@ -1014,15 +1014,29 @@ static int verify_ipv6(
 	if (check_field("ipv6_version",
 			script_ipv6->version,
 			actual_ipv6->version, error) ||
-	    check_field("ipv6_payload_len",
-			(ntohs(script_ipv6->payload_len) +
-			 tcp_options_allowance(actual_packet,
-					       script_packet)),
-			ntohs(actual_ipv6->payload_len), error) ||
 	    check_field("ipv6_next_header",
 			script_ipv6->next_header,
 			actual_ipv6->next_header, error))
 		return STATUS_ERR;
+	switch (script_ipv6->next_header) {
+	case IPPROTO_SCTP:
+		/* FIXME */
+		break;
+	case IPPROTO_TCP:
+		if (check_field("ipv6_payload_len",
+				(ntohs(script_ipv6->payload_len) +
+				 tcp_options_allowance(actual_packet,
+						       script_packet)),
+				ntohs(actual_ipv6->payload_len), error))
+			return STATUS_ERR;
+		break;
+	default:
+		if (check_field("ipv6_payload_len",
+				ntohs(script_ipv6->payload_len),
+				ntohs(actual_ipv6->payload_len), error))
+			return STATUS_ERR;
+		break;
+	}
 
 	if (verify_outbound_live_ecn(script_packet->ecn,
 				     ipv6_ecn_bits(actual_ipv6),