Message ID | 20190812101706.15778-1-idosch@idosch.org |
---|---|
State | Accepted |
Delegated to: | stephen hemminger |
Headers | show |
Series | [iproute2] tc: Fix block-handle support for filter operations | expand |
Mon, Aug 12, 2019 at 12:17:06PM CEST, idosch@idosch.org wrote: >From: Ido Schimmel <idosch@mellanox.com> > >Commit e991c04d64c0 ("Revert "tc: Add batchsize feature for filter and >actions"") reverted more than it should and broke shared block >functionality. Fix this by restoring the original functionality. > >To reproduce: > ># tc qdisc add dev swp1 ingress_block 10 ingress ># tc filter add block 10 proto ip pref 1 flower \ > dst_ip 192.0.2.0/24 action drop >Unknown filter "block", hence option "10" is unparsable > >Fixes: e991c04d64c0 ("Revert "tc: Add batchsize feature for filter and actions"") >Signed-off-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Thanks Ido!
On Mon, 12 Aug 2019 13:17:06 +0300 Ido Schimmel <idosch@idosch.org> wrote: > From: Ido Schimmel <idosch@mellanox.com> > > Commit e991c04d64c0 ("Revert "tc: Add batchsize feature for filter and > actions"") reverted more than it should and broke shared block > functionality. Fix this by restoring the original functionality. > > To reproduce: > > # tc qdisc add dev swp1 ingress_block 10 ingress > # tc filter add block 10 proto ip pref 1 flower \ > dst_ip 192.0.2.0/24 action drop > Unknown filter "block", hence option "10" is unparsable > > Fixes: e991c04d64c0 ("Revert "tc: Add batchsize feature for filter and actions"") > Signed-off-by: Ido Schimmel <idosch@mellanox.com> Applied
diff --git a/tc/tc_filter.c b/tc/tc_filter.c index 53759a7a8876..23e21d89d7d1 100644 --- a/tc/tc_filter.c +++ b/tc/tc_filter.c @@ -74,6 +74,7 @@ static int tc_filter_modify(int cmd, unsigned int flags, int argc, char **argv) __u32 prio = 0; __u32 protocol = 0; int protocol_set = 0; + __u32 block_index = 0; __u32 chain_index; int chain_index_set = 0; char *fhandle = NULL; @@ -89,7 +90,21 @@ static int tc_filter_modify(int cmd, unsigned int flags, int argc, char **argv) NEXT_ARG(); if (d[0]) duparg("dev", *argv); + if (block_index) { + fprintf(stderr, "Error: \"dev\" and \"block\" are mutually exclusive\n"); + return -1; + } strncpy(d, *argv, sizeof(d)-1); + } else if (matches(*argv, "block") == 0) { + NEXT_ARG(); + if (block_index) + duparg("block", *argv); + if (d[0]) { + fprintf(stderr, "Error: \"dev\" and \"block\" are mutually exclusive\n"); + return -1; + } + if (get_u32(&block_index, *argv, 0) || !block_index) + invarg("invalid block index value", *argv); } else if (strcmp(*argv, "root") == 0) { if (req.t.tcm_parent) { fprintf(stderr, @@ -184,6 +199,9 @@ static int tc_filter_modify(int cmd, unsigned int flags, int argc, char **argv) fprintf(stderr, "Cannot find device \"%s\"\n", d); return 1; } + } else if (block_index) { + req.t.tcm_ifindex = TCM_IFINDEX_MAGIC_BLOCK; + req.t.tcm_block_index = block_index; } if (q) {