sch_choke: add choke_skb_cb
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 24 Feb 2011 17:45:41 +0000 (17:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Feb 2011 06:11:57 +0000 (22:11 -0800)
Better document choke skb->cb[] use, like we did in netem and sfb

This adds a compile time check to make sure we dont exhaust skb->cb[]
space.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Stephen Hemminger <shemminger@vyatta.com>
CC: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_choke.c

index ee1e2090eebe2ddf6e6e24d9606fc6d728665244..06afbaeb4c88aceb565af85dbab35baf3d4ae6d6 100644 (file)
@@ -219,14 +219,25 @@ static bool choke_match_flow(struct sk_buff *skb1,
        return *ports1 == *ports2;
 }
 
+struct choke_skb_cb {
+       u16 classid;
+};
+
+static inline struct choke_skb_cb *choke_skb_cb(const struct sk_buff *skb)
+{
+       BUILD_BUG_ON(sizeof(skb->cb) <
+               sizeof(struct qdisc_skb_cb) + sizeof(struct choke_skb_cb));
+       return (struct choke_skb_cb *)qdisc_skb_cb(skb)->data;
+}
+
 static inline void choke_set_classid(struct sk_buff *skb, u16 classid)
 {
-       *(unsigned int *)(qdisc_skb_cb(skb)->data) = classid;
+       choke_skb_cb(skb)->classid = classid;
 }
 
 static u16 choke_get_classid(const struct sk_buff *skb)
 {
-       return *(unsigned int *)(qdisc_skb_cb(skb)->data);
+       return choke_skb_cb(skb)->classid;
 }
 
 /*