[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]> --- commit c7c3ff564b59bfb21aadd54cabab9369f120eaba tree e0c0de83f364229f0bb4b8abb586fd64c204fd12 parent d040f72f96e69c5494179d4431e8db82e8a11c74 author Patrick McHardy <[EMAIL PROTECTED]> Mon, 09 Jul 2007 22:03:09 +0200 committer Patrick McHardy <[EMAIL PROTECTED]> Mon, 09 Jul 2007 22:03:09 +0200 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 netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html