From 578fef428afc79794db8b95b96f9ed1815bffe22 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Fri, 5 Mar 2004 07:27:57 -0800 Subject: [PATCH] [PKT_SCHED]: Fix ipv6 ECN marking in RED scheduler. --- net/sched/sch_red.c | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c index f698115a22150..96f7cd3336fed 100644 --- a/net/sched/sch_red.c +++ b/net/sched/sch_red.c @@ -41,9 +41,6 @@ #include #include -#define RED_ECN_ECT 0x02 -#define RED_ECN_CE 0x01 - /* Random Early Detection (RED) algorithm. ======================================= @@ -165,28 +162,16 @@ static int red_ecn_mark(struct sk_buff *skb) switch (skb->protocol) { case __constant_htons(ETH_P_IP): - { - u8 tos = skb->nh.iph->tos; - - if (!(tos & RED_ECN_ECT)) + if (!INET_ECN_is_capable(skb->nh.iph->tos)) return 0; - - if (!(tos & RED_ECN_CE)) + if (INET_ECN_is_not_ce(skb->nh.iph->tos)) IP_ECN_set_ce(skb->nh.iph); - return 1; - } - case __constant_htons(ETH_P_IPV6): - { - u32 label = *(u32*)skb->nh.raw; - - if (!(label & __constant_htonl(RED_ECN_ECT<<20))) + if (!INET_ECN_is_capable(ip6_get_dsfield(skb->nh.ipv6h))) return 0; - label |= __constant_htonl(RED_ECN_CE<<20); + IP6_ECN_set_ce(skb->nh.ipv6h); return 1; - } - default: return 0; } -- 2.53.0