From: Petr Machata Date: Fri, 3 Apr 2020 23:05:29 +0000 (+0300) Subject: tc: p_ip6: Support pedit of IPv6 dsfield X-Git-Tag: v5.7.0~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d9a8dc439ee75d8f89f88712a33d09b7115fbeb;p=thirdparty%2Fiproute2.git tc: p_ip6: Support pedit of IPv6 dsfield Support keywords dsfield, traffic_class and tos in the IPv6 context. Signed-off-by: Petr Machata Signed-off-by: David Ahern --- 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;