tc_util: fix JSON prints for ct-mark and ct-zone

Fix the output of ct-mark and ct-zone (both for matches and actions) to
be different in JSON/non-JSON mode.

Example:
$ tc qdisc add dev eth0 ingress
$ tc filter add dev eth0 protocol ip parent ffff: prio 1 flower skip_hw \
      ct_zone 5 ct_mark 6/0xf action ct commit zone 7 mark 8/0xf drop

Non JSON format remains the same:
$ tc filter show dev eth0 parent ffff:
$ tc -s filter show dev ens1f0_0 parent ffff:
filter protocol ip pref 1 flower chain 0
filter protocol ip pref 1 flower chain 0 handle 0x1
  eth_type ipv4
  ct_zone 5
  ct_mark 6/0xf
  skip_hw
  not_in_hw
        action order 1: ct commit mark 8/0xf zone 7 drop
         index 1 ref 1 bind 1 installed 108 sec used 108 sec
        Action statistics:
        Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
        backlog 0b 0p requeues 0

JSON format is changed (partial output):
$ tc -p -j filter show dev eth0 parent ffff:
Before:
        "options": {
            "keys": {
                "ct_zone": "5",
                "ct_mark": "6/0xf"
                ...
        "actions": [ {
                "order": 1,
                "kind": "ct",
                "action": "commit",
                "mark": "8/0xf",
                "zone": "7",
                ...
After:
        "options": {
            "keys": {
                "ct_zone": 5,
                "ct_mark": 6,
                "ct_mark_mask": 15
                ...
        "actions": [ {
                "order": 1,
                "kind": "ct",
                "action": "commit",
                "mark": 8,
                "mark_mask": 15,
                "zone": 7,
                ...

Fixes: c8a494314c ("tc: Introduce tc ct action")
Signed-off-by: Eli Britstein <elibr@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
Eli Britstein 2019-11-14 14:44:40 +02:00 committed by Stephen Hemminger
parent 99d5ee8368
commit bb3ee8b313
1 changed files with 8 additions and 33 deletions

View File

@ -958,45 +958,20 @@ static void print_masked_type(__u32 type_max,
void print_masked_u32(const char *name, struct rtattr *attr,
struct rtattr *mask_attr, bool newline)
{
__u32 value, mask;
SPRINT_BUF(namefrm);
SPRINT_BUF(out);
size_t done;
print_masked_type(UINT32_MAX, rta_getattr_u32, name, attr, mask_attr,
newline);
}
if (!attr)
return;
value = rta_getattr_u32(attr);
mask = mask_attr ? rta_getattr_u32(mask_attr) : UINT32_MAX;
done = sprintf(out, "%u", value);
if (mask != UINT32_MAX)
sprintf(out + done, "/0x%x", mask);
sprintf(namefrm, "%s %s %%s", newline ? "\n " : "", name);
print_string(PRINT_ANY, name, namefrm, out);
static __u32 __rta_getattr_u16_u32(const struct rtattr *attr)
{
return rta_getattr_u16(attr);
}
void print_masked_u16(const char *name, struct rtattr *attr,
struct rtattr *mask_attr, bool newline)
{
__u16 value, mask;
SPRINT_BUF(namefrm);
SPRINT_BUF(out);
size_t done;
if (!attr)
return;
value = rta_getattr_u16(attr);
mask = mask_attr ? rta_getattr_u16(mask_attr) : UINT16_MAX;
done = sprintf(out, "%u", value);
if (mask != UINT16_MAX)
sprintf(out + done, "/0x%x", mask);
sprintf(namefrm, "%s %s %%s", newline ? "\n " : "", name);
print_string(PRINT_ANY, name, namefrm, out);
print_masked_type(UINT16_MAX, __rta_getattr_u16_u32, name, attr,
mask_attr, newline);
}
static __u32 __rta_getattr_u8_u32(const struct rtattr *attr)