Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[firefly-linux-kernel-4.4.55.git] / net / sched / sch_dsmark.c
index 45b5734dd72a7da578db5e2cdf61935bb9b0e1c7..60f89199e3da861f8c1af675fa402f071328c3d5 100644 (file)
@@ -9,7 +9,6 @@
 #include <linux/string.h>
 #include <linux/errno.h>
 #include <linux/skbuff.h>
-#include <linux/netdevice.h> /* for pkt_sched */
 #include <linux/rtnetlink.h>
 #include <net/pkt_sched.h>
 #include <net/dsfield.h>
@@ -220,13 +219,13 @@ static int dsmark_enqueue(struct sk_buff *skb,struct Qdisc *sch)
                                        & ~INET_ECN_MASK;
                                break;
                        case __constant_htons(ETH_P_IPV6):
-                               skb->tc_index = ipv6_get_dsfield(skb->nh.ipv6h)
+                               skb->tc_index = ipv6_get_dsfield(ipv6_hdr(skb))
                                        & ~INET_ECN_MASK;
                                break;
                        default:
                                skb->tc_index = 0;
                                break;
-               };
+               }
        }
 
        if (TC_H_MAJ(skb->priority) == sch->handle)
@@ -238,26 +237,24 @@ static int dsmark_enqueue(struct sk_buff *skb,struct Qdisc *sch)
                D2PRINTK("result %d class 0x%04x\n", result, res.classid);
 
                switch (result) {
-#ifdef CONFIG_NET_CLS_POLICE
-                       case TC_POLICE_SHOT:
-                               kfree_skb(skb);
-                               sch->qstats.drops++;
-                               return NET_XMIT_POLICED;
-#if 0
-                       case TC_POLICE_RECLASSIFY:
-                               /* FIXME: what to do here ??? */
-#endif
+#ifdef CONFIG_NET_CLS_ACT
+               case TC_ACT_QUEUED:
+               case TC_ACT_STOLEN:
+                       kfree_skb(skb);
+                       return NET_XMIT_SUCCESS;
+               case TC_ACT_SHOT:
+                       kfree_skb(skb);
+                       sch->qstats.drops++;
+                       return NET_XMIT_BYPASS;
 #endif
-                       case TC_POLICE_OK:
-                               skb->tc_index = TC_H_MIN(res.classid);
-                               break;
-                       case TC_POLICE_UNSPEC:
-                               /* fall through */
-                       default:
-                               if (p->default_index != NO_DEFAULT_INDEX)
-                                       skb->tc_index = p->default_index;
-                               break;
-               };
+               case TC_ACT_OK:
+                       skb->tc_index = TC_H_MIN(res.classid);
+                       break;
+               default:
+                       if (p->default_index != NO_DEFAULT_INDEX)
+                               skb->tc_index = p->default_index;
+                       break;
+               }
        }
 
        err = p->q->enqueue(skb,p->q);
@@ -296,7 +293,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
                                            p->value[index]);
                        break;
                case __constant_htons(ETH_P_IPV6):
-                       ipv6_change_dsfield(skb->nh.ipv6h, p->mask[index],
+                       ipv6_change_dsfield(ipv6_hdr(skb), p->mask[index],
                                            p->value[index]);
                        break;
                default:
@@ -310,7 +307,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
                                       "unsupported protocol %d\n",
                                       ntohs(skb->protocol));
                        break;
-       };
+       }
 
        return skb;
 }
@@ -412,16 +409,10 @@ static void dsmark_reset(struct Qdisc *sch)
 static void dsmark_destroy(struct Qdisc *sch)
 {
        struct dsmark_qdisc_data *p = PRIV(sch);
-       struct tcf_proto *tp;
 
        DPRINTK("dsmark_destroy(sch %p,[qdisc %p])\n", sch, p);
 
-       while (p->filter_list) {
-               tp = p->filter_list;
-               p->filter_list = tp->next;
-               tcf_destroy(tp);
-       }
-
+       tcf_destroy_chain(p->filter_list);
        qdisc_destroy(p->q);
        kfree(p->mask);
 }