The key should not be called "to_tbl" because it is exactly not a FR_ACT_TO_TBL action.
# ip rule add blackhole # ip -j rule | python -m json.tool ... { "priority": 0, "src": "all", "to_tbl": "blackhole" }, Still, as this is already released API from v4.17.0, stick to it. Only add a comment for this oddity. Related: 0dd4ccc56c0e ("iprule: add json support") Signed-off-by: Thomas Haller <thal...@redhat.com> --- If it is still permissible to change the API, I can also send a patch to rename "to_tbl" key to "action". ip/iprule.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ip/iprule.c b/ip/iprule.c index 2f58d8c2..aea175aa 100644 --- a/ip/iprule.c +++ b/ip/iprule.c @@ -459,6 +459,8 @@ int print_rule(struct nlmsghdr *n, void *arg) } else if (frh->action == FR_ACT_NOP) { print_null(PRINT_ANY, "nop", "nop", NULL); } else if (frh->action != FR_ACT_TO_TBL) { + /* The action is not(!) to-tbl, however for historic + * reasons, this JSON key is called "to_tbl". */ print_string(PRINT_ANY, "to_tbl", "%s", rtnl_rtntype_n2a(frh->action, b1, sizeof(b1))); } -- 2.20.1