net_sched: make cls_ops->tcf_chain() optional
Some qdiscs don't support attaching filters. Handle this centrally in cls_api and return a proper errno code (EOPNOTSUPP) instead of EINVAL. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c9f1d0389b
commit
71ebe5e919
@@ -181,6 +181,9 @@ replay:
|
||||
if ((cops = q->ops->cl_ops) == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
if (cops->tcf_chain == NULL)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Do we search for filter, attached to class? */
|
||||
if (TC_H_MIN(parent)) {
|
||||
cl = cops->get(q, parent);
|
||||
@@ -433,6 +436,8 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
goto out;
|
||||
if ((cops = q->ops->cl_ops) == NULL)
|
||||
goto errout;
|
||||
if (cops->tcf_chain == NULL)
|
||||
goto errout;
|
||||
if (TC_H_MIN(tcm->tcm_parent)) {
|
||||
cl = cops->get(q, tcm->tcm_parent);
|
||||
if (cl == 0)
|
||||
|
Reference in New Issue
Block a user