Merge branch 'selftests-classid'
Pedro Tammela says: ==================== selftests/tc-testing: add tests covering classid Patches 1-3 add missing tests covering classid behaviour on tdc for cls_fw, cls_route and cls_fw. This behaviour was recently fixed by valis[0]. Patch 4 comes from the development done in the previous patches as it turns out cls_route never returns meaningful errors. [0] https://lore.kernel.org/all/20230729123202.72406-1-jhs@mojatatu.com/ v2->v3: https://lore.kernel.org/all/20230825155148.659895-1-pctammela@mojatatu.com/ - Added changes that were left in the working tree (Jakub) - Fixed two typos in commit message titles - Added Victor tags v1->v2: https://lore.kernel.org/all/20230818163544.351104-1-pctammela@mojatatu.com/ - Drop u32 updates ==================== Signed-off-by: David S. Miller <davem@davemloft.net>pull/806/head
commit
ca5ab9638e
|
|
@ -375,9 +375,9 @@ out:
|
|||
|
||||
static const struct nla_policy route4_policy[TCA_ROUTE4_MAX + 1] = {
|
||||
[TCA_ROUTE4_CLASSID] = { .type = NLA_U32 },
|
||||
[TCA_ROUTE4_TO] = { .type = NLA_U32 },
|
||||
[TCA_ROUTE4_FROM] = { .type = NLA_U32 },
|
||||
[TCA_ROUTE4_IIF] = { .type = NLA_U32 },
|
||||
[TCA_ROUTE4_TO] = NLA_POLICY_MAX(NLA_U32, 0xFF),
|
||||
[TCA_ROUTE4_FROM] = NLA_POLICY_MAX(NLA_U32, 0xFF),
|
||||
[TCA_ROUTE4_IIF] = NLA_POLICY_MAX(NLA_U32, 0x7FFF),
|
||||
};
|
||||
|
||||
static int route4_set_parms(struct net *net, struct tcf_proto *tp,
|
||||
|
|
@ -397,33 +397,37 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,
|
|||
return err;
|
||||
|
||||
if (tb[TCA_ROUTE4_TO]) {
|
||||
if (new && handle & 0x8000)
|
||||
if (new && handle & 0x8000) {
|
||||
NL_SET_ERR_MSG(extack, "Invalid handle");
|
||||
return -EINVAL;
|
||||
}
|
||||
to = nla_get_u32(tb[TCA_ROUTE4_TO]);
|
||||
if (to > 0xFF)
|
||||
return -EINVAL;
|
||||
nhandle = to;
|
||||
}
|
||||
|
||||
if (tb[TCA_ROUTE4_FROM] && tb[TCA_ROUTE4_IIF]) {
|
||||
NL_SET_ERR_MSG_ATTR(extack, tb[TCA_ROUTE4_FROM],
|
||||
"'from' and 'fromif' are mutually exclusive");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (tb[TCA_ROUTE4_FROM]) {
|
||||
if (tb[TCA_ROUTE4_IIF])
|
||||
return -EINVAL;
|
||||
id = nla_get_u32(tb[TCA_ROUTE4_FROM]);
|
||||
if (id > 0xFF)
|
||||
return -EINVAL;
|
||||
nhandle |= id << 16;
|
||||
} else if (tb[TCA_ROUTE4_IIF]) {
|
||||
id = nla_get_u32(tb[TCA_ROUTE4_IIF]);
|
||||
if (id > 0x7FFF)
|
||||
return -EINVAL;
|
||||
nhandle |= (id | 0x8000) << 16;
|
||||
} else
|
||||
nhandle |= 0xFFFF << 16;
|
||||
|
||||
if (handle && new) {
|
||||
nhandle |= handle & 0x7F00;
|
||||
if (nhandle != handle)
|
||||
if (nhandle != handle) {
|
||||
NL_SET_ERR_MSG_FMT(extack,
|
||||
"Handle mismatch constructed: %x (expected: %x)",
|
||||
handle, nhandle);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!nhandle) {
|
||||
|
|
@ -478,7 +482,6 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
|
|||
struct route4_filter __rcu **fp;
|
||||
struct route4_filter *fold, *f1, *pfp, *f = NULL;
|
||||
struct route4_bucket *b;
|
||||
struct nlattr *opt = tca[TCA_OPTIONS];
|
||||
struct nlattr *tb[TCA_ROUTE4_MAX + 1];
|
||||
unsigned int h, th;
|
||||
int err;
|
||||
|
|
@ -489,10 +492,12 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (opt == NULL)
|
||||
if (NL_REQ_ATTR_CHECK(extack, NULL, tca, TCA_OPTIONS)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Missing options");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = nla_parse_nested_deprecated(tb, TCA_ROUTE4_MAX, opt,
|
||||
err = nla_parse_nested_deprecated(tb, TCA_ROUTE4_MAX, tca[TCA_OPTIONS],
|
||||
route4_policy, NULL);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
|
|
|||
|
|
@ -1351,5 +1351,54 @@
|
|||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "e470",
|
||||
"name": "Try to delete class referenced by fw after a replace",
|
||||
"category": [
|
||||
"filter",
|
||||
"fw"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 parent root handle 10: drr",
|
||||
"$TC class add dev $DEV1 parent root classid 1 drr",
|
||||
"$TC filter add dev $DEV1 parent 10: handle 1 prio 1 fw classid 10:1 action ok",
|
||||
"$TC filter replace dev $DEV1 parent 10: handle 1 prio 1 fw classid 10:1 action drop"
|
||||
],
|
||||
"cmdUnderTest": "$TC class delete dev $DEV1 parent 10: classid 10:1",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC class show dev $DEV1",
|
||||
"matchPattern": "class drr 10:1",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 parent root drr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ec1a",
|
||||
"name": "Replace fw classid with nil",
|
||||
"category": [
|
||||
"filter",
|
||||
"fw"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 parent root handle 10: drr",
|
||||
"$TC class add dev $DEV1 parent root classid 1 drr",
|
||||
"$TC filter add dev $DEV1 parent 10: handle 1 prio 1 fw classid 10:1 action ok"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter replace dev $DEV1 parent 10: handle 1 prio 1 fw action drop",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 parent 10:",
|
||||
"matchPattern": "fw chain 0 handle 0x1",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 parent root drr"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -177,5 +177,30 @@
|
|||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "b042",
|
||||
"name": "Try to delete class referenced by route after a replace",
|
||||
"category": [
|
||||
"filter",
|
||||
"route"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 parent root handle 10: drr",
|
||||
"$TC class add dev $DEV1 parent root classid 1 drr",
|
||||
"$TC filter add dev $DEV1 parent 10: prio 1 route from 10 classid 10:1 action ok",
|
||||
"$TC filter replace dev $DEV1 parent 10: prio 1 route from 5 classid 10:1 action drop"
|
||||
],
|
||||
"cmdUnderTest": "$TC class delete dev $DEV1 parent 10: classid 10:1",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC class show dev $DEV1",
|
||||
"matchPattern": "class drr 10:1",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 parent root drr"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -247,5 +247,30 @@
|
|||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0c37",
|
||||
"name": "Try to delete class referenced by u32 after a replace",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 parent root handle 10: drr",
|
||||
"$TC class add dev $DEV1 parent root classid 1 drr",
|
||||
"$TC filter add dev $DEV1 parent 10: prio 1 u32 match icmp type 1 0xff classid 10:1 action ok",
|
||||
"$TC filter replace dev $DEV1 parent 10: prio 1 u32 match icmp type 1 0xff classid 10:1 action drop"
|
||||
],
|
||||
"cmdUnderTest": "$TC class delete dev $DEV1 parent 10: classid 10:1",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC class show dev $DEV1",
|
||||
"matchPattern": "class drr 10:1",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 parent root drr"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in New Issue