Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9210080445b0c51a73b488750a26eb17177d8684
Commit:     9210080445b0c51a73b488750a26eb17177d8684
Parent:     b0188d4dbe5f4285372dd033acf7c92a97006629
Author:     Patrick McHardy <[EMAIL PROTECTED]>
AuthorDate: Sun Jul 15 00:01:49 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Sun Jul 15 00:01:49 2007 -0700

    [NET_SCHED]: sch_atm: act_api support
    
    Handle act_api classification results.
    
    The ATM scheduler behaves slightly different than other schedulers
    in that it only handles policer results for successful classifications,
    this behaviour is retained for the act_api case.
    
    Signed-off-by: Patrick McHardy <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/sched/sch_atm.c |   21 ++++++++++++++-------
 1 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c
index 9b458c4..ccee10d 100644
--- a/net/sched/sch_atm.c
+++ b/net/sched/sch_atm.c
@@ -411,11 +411,21 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct 
Qdisc *sch)
                if (flow->vcc)
                        ATM_SKB(skb)->atm_options = flow->vcc->atm_options;
                /*@@@ looks good ... but it's not supposed to work :-) */
-#ifdef CONFIG_NET_CLS_POLICE
+#ifdef CONFIG_NET_CLS_ACT
+               switch (result) {
+               case TC_ACT_QUEUED:
+               case TC_ACT_STOLEN:
+                       kfree_skb(skb);
+                       return NET_XMIT_SUCCESS;
+               case TC_ACT_SHOT:
+                       kfree_skb(skb);
+                       goto drop;
+               }
+#elif defined(CONFIG_NET_CLS_POLICE)
                switch (result) {
                case TC_POLICE_SHOT:
                        kfree_skb(skb);
-                       break;
+                       goto drop;
                case TC_POLICE_RECLASSIFY:
                        if (flow->excess)
                                flow = flow->excess;
@@ -431,11 +441,8 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct 
Qdisc *sch)
                }
 #endif
        }
-       if (
-#ifdef CONFIG_NET_CLS_POLICE
-                  result == TC_POLICE_SHOT ||
-#endif
-                  (ret = flow->q->enqueue(skb, flow->q)) != 0) {
+       if ((ret = flow->q->enqueue(skb, flow->q)) != 0) {
+drop: __maybe_unused
                sch->qstats.drops++;
                if (flow)
                        flow->qstats.drops++;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to