|
@@ -38,9 +38,11 @@ prio_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)
|
|
struct prio_sched_data *q = qdisc_priv(sch);
|
|
struct prio_sched_data *q = qdisc_priv(sch);
|
|
u32 band = skb->priority;
|
|
u32 band = skb->priority;
|
|
struct tcf_result res;
|
|
struct tcf_result res;
|
|
|
|
+ int err;
|
|
|
|
|
|
*qerr = NET_XMIT_BYPASS;
|
|
*qerr = NET_XMIT_BYPASS;
|
|
if (TC_H_MAJ(skb->priority) != sch->handle) {
|
|
if (TC_H_MAJ(skb->priority) != sch->handle) {
|
|
|
|
+ err = tc_classify(skb, q->filter_list, &res);
|
|
#ifdef CONFIG_NET_CLS_ACT
|
|
#ifdef CONFIG_NET_CLS_ACT
|
|
switch (tc_classify(skb, q->filter_list, &res)) {
|
|
switch (tc_classify(skb, q->filter_list, &res)) {
|
|
case TC_ACT_STOLEN:
|
|
case TC_ACT_STOLEN:
|
|
@@ -49,11 +51,8 @@ prio_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)
|
|
case TC_ACT_SHOT:
|
|
case TC_ACT_SHOT:
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
-
|
|
|
|
- if (!q->filter_list ) {
|
|
|
|
-#else
|
|
|
|
- if (!q->filter_list || tc_classify(skb, q->filter_list, &res)) {
|
|
|
|
#endif
|
|
#endif
|
|
|
|
+ if (!q->filter_list || err < 0) {
|
|
if (TC_H_MAJ(band))
|
|
if (TC_H_MAJ(band))
|
|
band = 0;
|
|
band = 0;
|
|
band = q->prio2band[band&TC_PRIO_MAX];
|
|
band = q->prio2band[band&TC_PRIO_MAX];
|