From 36840b90018534ed1c333ed1c072f70fe1e68633 Mon Sep 17 00:00:00 2001 From: Michael Tuexen <tuexen@fh-muenster.de> Date: Sat, 8 Dec 2018 15:04:27 +0100 Subject: [PATCH] Add print support for HMAC_ALGO parameter. --- gtests/net/packetdrill/sctp.h | 9 ++++ gtests/net/packetdrill/sctp_chunk_to_string.c | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/gtests/net/packetdrill/sctp.h b/gtests/net/packetdrill/sctp.h index 81d71ba1..ab73edda 100644 --- a/gtests/net/packetdrill/sctp.h +++ b/gtests/net/packetdrill/sctp.h @@ -445,6 +445,15 @@ struct sctp_chunks_parameter { __u8 chunk_type[]; } __packed; +#define SCTP_HMAC_ID_SHA_1 1 +#define SCTP_HMAC_ID_SHA_256 3 + +struct sctp_hmac_algo_parameter { + __be16 type; + __be16 length; + __be16 hmac_id[]; +} __packed; + struct sctp_supported_extensions_parameter { __be16 type; __be16 length; diff --git a/gtests/net/packetdrill/sctp_chunk_to_string.c b/gtests/net/packetdrill/sctp_chunk_to_string.c index 667c78dc..bc506308 100644 --- a/gtests/net/packetdrill/sctp_chunk_to_string.c +++ b/gtests/net/packetdrill/sctp_chunk_to_string.c @@ -511,6 +511,44 @@ static int sctp_chunks_parameter_to_string( return STATUS_OK; } +static int sctp_hmac_algo_parameter_to_string( + FILE *s, + struct sctp_hmac_algo_parameter *parameter, + char **error) +{ + u16 i, length, nr_hmac_algos; + + length = ntohs(parameter->length); + if ((length < sizeof(struct sctp_hmac_algo_parameter)) || + ((length & 0x0001) != 0)) { + asprintf(error, + "HMAC_ALGO parameter illegal (length=%u)", + length); + return STATUS_ERR; + } + nr_hmac_algos = + (length - sizeof(struct sctp_hmac_algo_parameter)) + / sizeof(u16); + fputs("HMAC_ALGO[types=[", s); + for (i = 0; i < nr_hmac_algos; i++) { + if (i > 0) + fputs(", ", s); + switch (ntohs(parameter->hmac_id[i])) { + case SCTP_HMAC_ID_SHA_1: + fputs("SHA-1", s); + break; + case SCTP_HMAC_ID_SHA_256: + fputs("SHA-256", s); + break; + default: + fprintf(s, "0x%04x", ntohs(parameter->hmac_id[i])); + break; + } + } + fputs("]]", s); + return STATUS_OK; +} + static int sctp_supported_extensions_parameter_to_string( FILE *s, struct sctp_supported_extensions_parameter *parameter, @@ -765,6 +803,11 @@ static int sctp_parameter_to_string(FILE *s, (struct sctp_chunks_parameter *)parameter, error); break; + case SCTP_HMAC_ALGO_PARAMETER_TYPE: + result = sctp_hmac_algo_parameter_to_string(s, + (struct sctp_hmac_algo_parameter *)parameter, + error); + break; case SCTP_SUPPORTED_EXTENSIONS_PARAMETER_TYPE: result = sctp_supported_extensions_parameter_to_string(s, (struct sctp_supported_extensions_parameter *)parameter, -- GitLab