From bc674b52f9d3d699be24dbe7699499cb6bbc988f Mon Sep 17 00:00:00 2001 From: Michael Tuexen <tuexen@fh-muenster.de> Date: Sat, 3 Oct 2015 14:42:57 +0200 Subject: [PATCH] Improve the sctp_paddrparams support on Linux. --- gtests/net/packetdrill/run_system_call.c | 25 +++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 8a8ca10b..b84a4b3b 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -2225,6 +2225,10 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, struct sctp_stream_value stream_value; #endif struct sctp_paddrparams paddrparams; +#ifdef linux + u32 spp_ipv6_flowlabel; + u8 spp_dscp; +#endif if (check_arg_count(args, 5, error)) return STATUS_ERR; @@ -2355,17 +2359,32 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, &paddrparams.spp_flags, error)) { return STATUS_ERR; } -#ifdef SPP_IPV6_FLOWLABEL +#ifdef __FreeBSD__ if (get_u32(val_expression->value.sctp_paddrparams->spp_ipv6_flowlabel, &paddrparams.spp_ipv6_flowlabel, error)) { return STATUS_ERR; } -#endif -#ifdef SPP_DSCP if (get_u8(val_expression->value.sctp_paddrparams->spp_dscp, &paddrparams.spp_dscp, error)) { return STATUS_ERR; } +#endif +#ifdef linux + if (get_u32(val_expression->value.sctp_paddrparams->spp_ipv6_flowlabel, + &spp_ipv6_flowlabel, error)) { + return STATUS_ERR; + } else if (spp_ipv6_flowlabel != 0) { + asprintf(error, "Bad setsockopt, Linux doesn't support paddrparams.spp_ipv6_flowlabel"); + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_paddrparams->spp_dscp, + &spp_dscp, error)) { + return STATUS_ERR; + } else if (spp_dscp != 0) { + asprintf(error, "Bad setsockopt, Linux doesn't support paddrparams.spp_dscp"); + return STATUS_ERR; + } + paddrparams.spp_sackdelay = 0; #endif optval = &paddrparams; break; -- GitLab