diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2009-08-09 08:12:49 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-13 16:43:32 -0700 |
commit | 26ced1e4aa181c01379b0b7ef156a29c000d1f8c (patch) | |
tree | e5f2544f678c081582b70ce88281af3e4e2b28cd /net/ipv6 | |
parent | e651f03afe833326faa0abe55948c1c6cfd0b8ac (diff) | |
download | kernel_goldelico_gta04-26ced1e4aa181c01379b0b7ef156a29c000d1f8c.zip kernel_goldelico_gta04-26ced1e4aa181c01379b0b7ef156a29c000d1f8c.tar.gz kernel_goldelico_gta04-26ced1e4aa181c01379b0b7ef156a29c000d1f8c.tar.bz2 |
inet6: Set default traffic class
This patch addresses:
* assigning -1 to np->tclass as it is currently done is not very meaningful,
since it turns into 0xff;
* RFC 3542, 6.5 allows -1 for clearing the sticky IPV6_TCLASS option
and specifies -1 to mean "use kernel default":
- RFC 2460, 7. requires that the default traffic class must be zero for
all 8 bits,
- this is consistent with RFC 2474, 4.1 which recommends a default PHB of 0,
in combination with a value of the ECN field of "non-ECT" (RFC 3168, 5.).
This patch changes the meaning of -1 from assigning 255 to mean the RFC 2460
default, which at the same time allows to satisfy clearing the sticky TCLASS
option as per RFC 3542, 6.5.
(When passing -1 as ancillary data, the fallback remains np->tclass, which
has either been set via socket options, or contains the default value.)
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index c390b1e..f5e0682 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -315,6 +315,9 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, goto e_inval; if (val < -1 || val > 0xff) goto e_inval; + /* RFC 3542, 6.5: default traffic class of 0x0 */ + if (val == -1) + val = 0; np->tclass = val; retv = 0; break; |