From: Ido Schimmel <ido...@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 <ido...@mellanox.com> --- tc/tc_filter.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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) { -- 2.21.0