diff options
author | Petr Machata <petrm@mellanox.com> | 2020-04-04 02:05:29 +0300 |
---|---|---|
committer | David Ahern <dsahern@gmail.com> | 2020-04-09 14:39:58 +0000 |
commit | 2d9a8dc439ee75d8f89f88712a33d09b7115fbeb (patch) | |
tree | be4ed5f0e1a98822e3878e1af9c06906ce3292bf | |
parent | 1c3ed78001711f482ae252c7cb35a60337199dca (diff) | |
download | iproute2-2d9a8dc439ee75d8f89f88712a33d09b7115fbeb.tar.gz |
tc: p_ip6: Support pedit of IPv6 dsfield
Support keywords dsfield, traffic_class and tos in the IPv6 context.
Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
-rw-r--r-- | man/man8/tc-pedit.8 | 6 | ||||
-rw-r--r-- | tc/p_ip6.c | 15 |
2 files changed, 19 insertions, 2 deletions
diff --git a/man/man8/tc-pedit.8 b/man/man8/tc-pedit.8 index bbd725c4d..3f6baa3dd 100644 --- a/man/man8/tc-pedit.8 +++ b/man/man8/tc-pedit.8 @@ -60,8 +60,8 @@ pedit - generic packet editor action .ti -8 .IR IP6HDR_FIELD " := { " -.BR src " | " dst " | " flow_lbl " | " payload_len " | " nexthdr " |" -.BR hoplimit " }" +.BR src " | " dst " | " traffic_class " | " flow_lbl " | " payload_len " | " +.BR nexthdr " | " hoplimit " }" .ti -8 .IR TCPHDR_FIELD " := { " @@ -229,6 +229,8 @@ are: .TQ .B dst .TQ +.B traffic_class +.TQ .B flow_lbl .TQ .B payload_len diff --git a/tc/p_ip6.c b/tc/p_ip6.c index 7cc7997bc..71660c610 100644 --- a/tc/p_ip6.c +++ b/tc/p_ip6.c @@ -74,6 +74,21 @@ parse_ip6(int *argc_p, char ***argv_p, res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey); goto done; } + if (strcmp(*argv, "traffic_class") == 0) { + NEXT_ARG(); + tkey->off = 1; + res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey); + + /* Shift the field by 4 bits on success. */ + if (!res) { + int nkeys = sel->sel.nkeys; + struct tc_pedit_key *key = &sel->sel.keys[nkeys - 1]; + + key->mask = htonl(ntohl(key->mask) << 4 | 0xf); + key->val = htonl(ntohl(key->val) << 4); + } + goto done; + } return -1; |