diff --git a/gtests/net/packetdrill/sctp_chunk_to_string.c b/gtests/net/packetdrill/sctp_chunk_to_string.c index a4ae270ed3a1662d31dc271340b2a0a7c8b48058..8dc2ca83547de2a6f006d252430c66093c944937 100644 --- a/gtests/net/packetdrill/sctp_chunk_to_string.c +++ b/gtests/net/packetdrill/sctp_chunk_to_string.c @@ -219,6 +219,86 @@ static int sctp_ecn_capable_parameter_to_string( return STATUS_OK; } +static int sctp_supported_extensions_parameter_to_string( + FILE *s, + struct sctp_supported_extensions_parameter *parameter, + char **error) +{ + u16 length, nr_chunk_types, i; + + length = ntohs(parameter->length); + if (length < sizeof(struct sctp_supported_extensions_parameter)) { + asprintf(error, + "SUPPORTED_EXTENSIONS parameter illegal (length=%u)", + length); + return STATUS_ERR; + } + nr_chunk_types = length - sizeof(struct sctp_supported_extensions_parameter); + fputs("SUPPORTED_EXTENSIONS[types=[", s); + for (i = 0; i < nr_chunk_types; i++) { + if (i > 0) + fputs(", ", s); + switch (parameter->chunk_type[i]) { + case SCTP_DATA_CHUNK_TYPE: + fputs("DATA", s); + break; + case SCTP_INIT_CHUNK_TYPE: + fputs("INIT", s); + break; + case SCTP_INIT_ACK_CHUNK_TYPE: + fputs("INIT-ACK", s); + break; + case SCTP_SACK_CHUNK_TYPE: + fputs("SACK", s); + break; + case SCTP_HEARTBEAT_CHUNK_TYPE: + fputs("HEARTBEAT", s); + break; + case SCTP_HEARTBEAT_ACK_CHUNK_TYPE: + fputs("HEARTBEAT-ACK", s); + break; + case SCTP_ABORT_CHUNK_TYPE: + fputs("ABORT", s); + break; + case SCTP_SHUTDOWN_CHUNK_TYPE: + fputs("SHUTDOWN", s); + break; + case SCTP_SHUTDOWN_ACK_CHUNK_TYPE: + fputs("SHUTDOWN-ACK", s); + break; + case SCTP_ERROR_CHUNK_TYPE: + fputs("ERROR", s); + break; + case SCTP_COOKIE_ECHO_CHUNK_TYPE: + fputs("COOKIE-ECHO", s); + break; + case SCTP_COOKIE_ACK_CHUNK_TYPE: + fputs("COOKIE-ACK", s); + break; + case SCTP_ECNE_CHUNK_TYPE: + fputs("ECNE", s); + break; + case SCTP_CWR_CHUNK_TYPE: + fputs("CWR", s); + break; + case SCTP_SHUTDOWN_COMPLETE_CHUNK_TYPE: + fputs("SHUTDOWN-COMPLETE", s); + break; + case SCTP_I_DATA_CHUNK_TYPE: + fputs("I-DATA", s); + break; + case SCTP_PAD_CHUNK_TYPE: + fputs("PAD", s); + break; + default: + fprintf(s, "0x%02x", parameter->chunk_type[i]); + break; + } + } + fputs("]]", s); + return STATUS_OK; +} + static int sctp_pad_parameter_to_string( FILE *s, struct sctp_pad_parameter *parameter, @@ -305,6 +385,11 @@ static int sctp_parameter_to_string(FILE *s, result = sctp_ecn_capable_parameter_to_string(s, (struct sctp_ecn_capable_parameter *)parameter, error); break; + case SCTP_SUPPORTED_EXTENSIONS_PARAMETER_TYPE: + result = sctp_supported_extensions_parameter_to_string(s, + (struct sctp_supported_extensions_parameter *)parameter, + error); + break; case SCTP_PAD_PARAMETER_TYPE: result = sctp_pad_parameter_to_string(s, (struct sctp_pad_parameter *)parameter, error);