]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
tc: util: Don't call NEXT_ARG_FWD() in __parse_action_control()
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 8 Dec 2017 10:18:07 +0000 (11:18 +0100)
committerStephen Hemminger <stephen@networkplumber.org>
Fri, 8 Dec 2017 18:29:01 +0000 (10:29 -0800)
Not all callers want parse_action_control*() to advance the
arguments. For instance act_parse_police() does the argument
advancing itself.

Fixes: e67aba559581 ("tc: actions: add helpers to parse and print control actions")
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
14 files changed:
tc/m_bpf.c
tc/m_connmark.c
tc/m_csum.c
tc/m_gact.c
tc/m_ife.c
tc/m_mirred.c
tc/m_nat.c
tc/m_pedit.c
tc/m_sample.c
tc/m_skbedit.c
tc/m_skbmod.c
tc/m_tunnel_key.c
tc/m_vlan.c
tc/tc_util.c

index 1c1f71cdb83f9ac6522658315b6cf1671fb1f97b..576f69ccdab098668ea92e48c6bb4c57959bad70 100644 (file)
@@ -129,6 +129,7 @@ opt_bpf:
 
        parse_action_control_dflt(&argc, &argv, &parm.action,
                                  false, TC_ACT_PIPE);
+       NEXT_ARG_FWD();
 
        if (argc) {
                if (matches(*argv, "index") == 0) {
index 37d7185415490cb4ecdf8e88eba866066d5e3f6f..47c7a8c2b17e7495fd25471e067741bdd6038c19 100644 (file)
@@ -82,6 +82,7 @@ parse_connmark(struct action_util *a, int *argc_p, char ***argv_p, int tca_id,
        }
 
        parse_action_control_dflt(&argc, &argv, &sel.action, false, TC_ACT_PIPE);
+       NEXT_ARG_FWD();
 
        if (argc) {
                if (matches(*argv, "index") == 0) {
index 7b156734f64c5581fe60fb7fdf012114b15971fd..e1352c0820f69fdebebf71fd0c1630a8030bd69f 100644 (file)
@@ -124,6 +124,7 @@ parse_csum(struct action_util *a, int *argc_p,
        }
 
        parse_action_control_dflt(&argc, &argv, &sel.action, false, TC_ACT_OK);
+       NEXT_ARG_FWD();
 
        if (argc) {
                if (matches(*argv, "index") == 0) {
index e7d91dab78bd51f9a9e7b6bf84b0455a0f53b3ae..b30b0420bb1e14ff202c2ca0539afbfd28a1103e 100644 (file)
@@ -87,14 +87,13 @@ parse_gact(struct action_util *a, int *argc_p, char ***argv_p,
        if (argc < 0)
                return -1;
 
-
-       if (matches(*argv, "gact") == 0) {
-               argc--;
-               argv++;
-       } else if (parse_action_control(&argc, &argv, &p.action, false) == -1) {
+       if (matches(*argv, "gact") != 0 &&
+               parse_action_control(&argc, &argv, &p.action, false) == -1) {
                usage();        /* does not return */
        }
 
+       NEXT_ARG_FWD();
+
 #ifdef CONFIG_GACT_PROB
        if (argc > 0) {
                if (matches(*argv, "random") == 0) {
@@ -114,6 +113,7 @@ parse_gact(struct action_util *a, int *argc_p, char ***argv_p,
                        if (parse_action_control(&argc, &argv,
                                                 &pp.paction, false) == -1)
                                usage();
+                       NEXT_ARG_FWD();
                        if (get_u16(&pp.pval, *argv, 10)) {
                                fprintf(stderr,
                                        "Illegal probability val 0x%x\n",
index 205efc9f1d9a73a4a3bedff91d49ff6799cd9992..4647f6a6e779c4befef631e1e166ee2b37ec80fb 100644 (file)
@@ -159,6 +159,7 @@ static int parse_ife(struct action_util *a, int *argc_p, char ***argv_p,
 
        parse_action_control_dflt(&argc, &argv, &p.action, false, TC_ACT_PIPE);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index 3870d3a4adf4eb1e16dd9e0f7ccd415eb27ee87b..aa7ce6d923cce233801933827bc911e7c17eb879 100644 (file)
@@ -202,8 +202,10 @@ parse_direction(struct action_util *a, int *argc_p, char ***argv_p,
        }
 
 
-       if (p.eaction == TCA_EGRESS_MIRROR || p.eaction == TCA_INGRESS_MIRROR)
+       if (p.eaction == TCA_EGRESS_MIRROR || p.eaction == TCA_INGRESS_MIRROR) {
                parse_action_control(&argc, &argv, &p.action, false);
+               NEXT_ARG_FWD();
+       }
 
        if (argc) {
                if (iok && matches(*argv, "index") == 0) {
index 1e4ff51fe75aea6bd815928ac8311a619bfb76d1..f5de4d4cac9f376b68bccefce3bc524a24b3f443 100644 (file)
@@ -116,6 +116,7 @@ parse_nat(struct action_util *a, int *argc_p, char ***argv_p, int tca_id, struct
 
        parse_action_control_dflt(&argc, &argv, &sel.action, false, TC_ACT_OK);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index 26549eeea8995a001d51a02826dcbf63a0068f9e..dc57f14ae1ce5fae75052d04115eb6e7cef7e07a 100644 (file)
@@ -672,6 +672,7 @@ int parse_pedit(struct action_util *a, int *argc_p, char ***argv_p, int tca_id,
 
        parse_action_control_dflt(&argc, &argv, &sel.sel.action, false, TC_ACT_OK);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index ff5ee6bd1ef63b6f3390811bc5eb7a5f4ce20c0e..31774c0e806b4a3f9fa56163d67c07124bed39a5 100644 (file)
@@ -100,6 +100,7 @@ static int parse_sample(struct action_util *a, int *argc_p, char ***argv_p,
 
        parse_action_control_dflt(&argc, &argv, &p.action, false, TC_ACT_PIPE);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index aa374fcb33ed9b46da3c46cf48eff7a59b56cb5d..c41a7bb082dad1b1982dcba689c03f27023c7ac3 100644 (file)
@@ -123,6 +123,7 @@ parse_skbedit(struct action_util *a, int *argc_p, char ***argv_p, int tca_id,
        parse_action_control_dflt(&argc, &argv, &sel.action,
                                  false, TC_ACT_PIPE);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index 561b73fb8264783b6188b3e0eecbe3c9c4aa519e..bc268dfd5827a2a7809552f88e68921090a64b91 100644 (file)
@@ -124,6 +124,7 @@ static int parse_skbmod(struct action_util *a, int *argc_p, char ***argv_p,
 
        parse_action_control_dflt(&argc, &argv, &p.action, false, TC_ACT_PIPE);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index 1cdd03560c3573bf1142713e4310cdea4477edc7..2dc91879c237566a376bd28b8b3221fabc3de5ad 100644 (file)
@@ -175,6 +175,7 @@ static int parse_tunnel_key(struct action_util *a, int *argc_p, char ***argv_p,
        parse_action_control_dflt(&argc, &argv, &parm.action,
                                  false, TC_ACT_PIPE);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index 161759fd40630734dd775f8911654ef949175137..edae0d1e6f70755c480ab9c9f830ba3516175237 100644 (file)
@@ -131,6 +131,7 @@ static int parse_vlan(struct action_util *a, int *argc_p, char ***argv_p,
        parse_action_control_dflt(&argc, &argv, &parm.action,
                                  false, TC_ACT_PIPE);
 
+       NEXT_ARG_FWD();
        if (argc) {
                if (matches(*argv, "index") == 0) {
                        NEXT_ARG();
index 18879056f30beb9db62eb031b824e984e791c778..ee9a70aa6830c190193c65d36487e28dcf847eb0 100644 (file)
@@ -586,7 +586,6 @@ static int __parse_action_control(int *argc_p, char ***argv_p, int *result_p,
                }
                result |= jump_cnt;
        }
-       NEXT_ARG_FWD();
        *argc_p = argc;
        *argv_p = argv;
        *result_p = result;