]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
tc/pedit: Support fields bigger than 32 bits
authorAmir Vadai <amir@vadai.me>
Sun, 23 Apr 2017 12:53:53 +0000 (15:53 +0300)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 1 May 2017 16:22:16 +0000 (09:22 -0700)
Make parse_val() accept fields up to 128 bits long, this should be
enough for current use cases and involves a minimal change to code.

Signed-off-by: Amir Vadai <amir@vadai.me>
tc/m_pedit.c

index 7af074a5a97c27067706c91e2f5cb3b3f8fd7463..d982c91a2585d43bce8a995d75ffadff6bc8cca7 100644 (file)
@@ -256,7 +256,10 @@ int parse_val(int *argc_p, char ***argv_p, __u32 *val, int type)
 int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type, __u32 retain,
              struct m_pedit_sel *sel, struct m_pedit_key *tkey)
 {
-       __u32 mask = 0, val = 0;
+       __u32 mask[4] = { 0 };
+       __u32 val[4] = { 0 };
+       __u32 *m = &mask[0];
+       __u32 *v = &val[0];
        __u32 o = 0xFF;
        int res = -1;
        int argc = *argc_p;
@@ -275,7 +278,7 @@ int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type, __u32 retain,
                o = 0xFFFFFFFF;
 
        if (matches(*argv, "invert") == 0) {
-               val = mask = o;
+               *v = *m = o;
        } else if (matches(*argv, "set") == 0 ||
                   matches(*argv, "add") == 0) {
                if (matches(*argv, "add") == 0)
@@ -287,7 +290,7 @@ int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type, __u32 retain,
                }
 
                NEXT_ARG();
-               if (parse_val(&argc, &argv, &val, type))
+               if (parse_val(&argc, &argv, val, type))
                        return -1;
        } else if (matches(*argv, "preserve") == 0) {
                retain = 0;
@@ -307,8 +310,8 @@ int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type, __u32 retain,
                argv++;
        }
 
-       tkey->val = val;
-       tkey->mask = mask;
+       tkey->val = *v;
+       tkey->mask = *m;
 
        if (type == TIPV4)
                tkey->val = ntohl(tkey->val);