tc: pedit: parse_cmd: add flags argument
This patch just prepares the flags argument, so it's available to the next patch. Signed-off-by: Asbjørn Sloth Tønnesen <asbjorn@asbjorn.st> Signed-off-by: David Ahern <dsahern@kernel.org>
This commit is contained in:
parent
6acccd52a2
commit
bc5e8473aa
|
|
@ -330,7 +330,7 @@ static 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,
|
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)
|
struct m_pedit_sel *sel, struct m_pedit_key *tkey, int flags)
|
||||||
{
|
{
|
||||||
__u32 mask[4] = { 0 };
|
__u32 mask[4] = { 0 };
|
||||||
__u32 val[4] = { 0 };
|
__u32 val[4] = { 0 };
|
||||||
|
|
@ -502,7 +502,7 @@ done:
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
}
|
}
|
||||||
|
|
||||||
res = parse_cmd(&argc, &argv, len, TU32, retain, sel, tkey);
|
res = parse_cmd(&argc, &argv, len, TU32, retain, sel, tkey, 0);
|
||||||
|
|
||||||
*argc_p = argc;
|
*argc_p = argc;
|
||||||
*argv_p = argv;
|
*argv_p = argv;
|
||||||
|
|
|
||||||
|
|
@ -73,5 +73,5 @@ struct m_pedit_util {
|
||||||
|
|
||||||
int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type,
|
int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type,
|
||||||
__u32 retain,
|
__u32 retain,
|
||||||
struct m_pedit_sel *sel, struct m_pedit_key *tkey);
|
struct m_pedit_sel *sel, struct m_pedit_key *tkey, int flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -41,21 +41,21 @@ parse_eth(int *argc_p, char ***argv_p,
|
||||||
if (strcmp(*argv, "type") == 0) {
|
if (strcmp(*argv, "type") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 12;
|
tkey->off = 12;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(*argv, "dst") == 0) {
|
if (strcmp(*argv, "dst") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 0;
|
tkey->off = 0;
|
||||||
res = parse_cmd(&argc, &argv, 6, TMAC, RU32, sel, tkey);
|
res = parse_cmd(&argc, &argv, 6, TMAC, RU32, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(*argv, "src") == 0) {
|
if (strcmp(*argv, "src") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 6;
|
tkey->off = 6;
|
||||||
res = parse_cmd(&argc, &argv, 6, TMAC, RU32, sel, tkey);
|
res = parse_cmd(&argc, &argv, 6, TMAC, RU32, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
32
tc/p_ip.c
32
tc/p_ip.c
|
|
@ -40,13 +40,13 @@ parse_ip(int *argc_p, char ***argv_p,
|
||||||
if (strcmp(*argv, "src") == 0) {
|
if (strcmp(*argv, "src") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 12;
|
tkey->off = 12;
|
||||||
res = parse_cmd(&argc, &argv, 4, TIPV4, RU32, sel, tkey);
|
res = parse_cmd(&argc, &argv, 4, TIPV4, RU32, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "dst") == 0) {
|
if (strcmp(*argv, "dst") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 16;
|
tkey->off = 16;
|
||||||
res = parse_cmd(&argc, &argv, 4, TIPV4, RU32, sel, tkey);
|
res = parse_cmd(&argc, &argv, 4, TIPV4, RU32, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
/* jamal - look at these and make them either old or new
|
/* jamal - look at these and make them either old or new
|
||||||
|
|
@ -56,64 +56,64 @@ parse_ip(int *argc_p, char ***argv_p,
|
||||||
if (strcmp(*argv, "tos") == 0 || matches(*argv, "dsfield") == 0) {
|
if (strcmp(*argv, "tos") == 0 || matches(*argv, "dsfield") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 1;
|
tkey->off = 1;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "ihl") == 0) {
|
if (strcmp(*argv, "ihl") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 0;
|
tkey->off = 0;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, 0x0f, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, 0x0f, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "ttl") == 0) {
|
if (strcmp(*argv, "ttl") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 8;
|
tkey->off = 8;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "protocol") == 0) {
|
if (strcmp(*argv, "protocol") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 9;
|
tkey->off = 9;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
/* jamal - fix this */
|
/* jamal - fix this */
|
||||||
if (matches(*argv, "precedence") == 0) {
|
if (matches(*argv, "precedence") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 1;
|
tkey->off = 1;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
/* jamal - validate this at some point */
|
/* jamal - validate this at some point */
|
||||||
if (strcmp(*argv, "nofrag") == 0) {
|
if (strcmp(*argv, "nofrag") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 6;
|
tkey->off = 6;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, 0x3F, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, 0x3F, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
/* jamal - validate this at some point */
|
/* jamal - validate this at some point */
|
||||||
if (strcmp(*argv, "firstfrag") == 0) {
|
if (strcmp(*argv, "firstfrag") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 6;
|
tkey->off = 6;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, 0x1F, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, 0x1F, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "ce") == 0) {
|
if (strcmp(*argv, "ce") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 6;
|
tkey->off = 6;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, 0x80, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, 0x80, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "df") == 0) {
|
if (strcmp(*argv, "df") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 6;
|
tkey->off = 6;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, 0x40, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, 0x40, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "mf") == 0) {
|
if (strcmp(*argv, "mf") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 6;
|
tkey->off = 6;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, 0x20, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, 0x20, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -126,25 +126,25 @@ parse_ip(int *argc_p, char ***argv_p,
|
||||||
if (strcmp(*argv, "dport") == 0) {
|
if (strcmp(*argv, "dport") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 22;
|
tkey->off = 22;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "sport") == 0) {
|
if (strcmp(*argv, "sport") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 20;
|
tkey->off = 20;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "icmp_type") == 0) {
|
if (strcmp(*argv, "icmp_type") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 20;
|
tkey->off = 20;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "icmp_code") == 0) {
|
if (strcmp(*argv, "icmp_code") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 20;
|
tkey->off = 20;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
||||||
14
tc/p_ip6.c
14
tc/p_ip6.c
|
|
@ -41,43 +41,43 @@ parse_ip6(int *argc_p, char ***argv_p,
|
||||||
if (strcmp(*argv, "src") == 0) {
|
if (strcmp(*argv, "src") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 8;
|
tkey->off = 8;
|
||||||
res = parse_cmd(&argc, &argv, 16, TIPV6, RU32, sel, tkey);
|
res = parse_cmd(&argc, &argv, 16, TIPV6, RU32, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "dst") == 0) {
|
if (strcmp(*argv, "dst") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 24;
|
tkey->off = 24;
|
||||||
res = parse_cmd(&argc, &argv, 16, TIPV6, RU32, sel, tkey);
|
res = parse_cmd(&argc, &argv, 16, TIPV6, RU32, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "flow_lbl") == 0) {
|
if (strcmp(*argv, "flow_lbl") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 0;
|
tkey->off = 0;
|
||||||
res = parse_cmd(&argc, &argv, 4, TU32, 0x0007ffff, sel, tkey);
|
res = parse_cmd(&argc, &argv, 4, TU32, 0x0007ffff, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "payload_len") == 0) {
|
if (strcmp(*argv, "payload_len") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 4;
|
tkey->off = 4;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "nexthdr") == 0) {
|
if (strcmp(*argv, "nexthdr") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 6;
|
tkey->off = 6;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "hoplimit") == 0) {
|
if (strcmp(*argv, "hoplimit") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 7;
|
tkey->off = 7;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "traffic_class") == 0) {
|
if (strcmp(*argv, "traffic_class") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 1;
|
tkey->off = 1;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
|
|
||||||
/* Shift the field by 4 bits on success. */
|
/* Shift the field by 4 bits on success. */
|
||||||
if (!res) {
|
if (!res) {
|
||||||
|
|
|
||||||
|
|
@ -41,21 +41,21 @@ parse_tcp(int *argc_p, char ***argv_p,
|
||||||
if (strcmp(*argv, "sport") == 0) {
|
if (strcmp(*argv, "sport") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 0;
|
tkey->off = 0;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(*argv, "dport") == 0) {
|
if (strcmp(*argv, "dport") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 2;
|
tkey->off = 2;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(*argv, "flags") == 0) {
|
if (strcmp(*argv, "flags") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 13;
|
tkey->off = 13;
|
||||||
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey);
|
res = parse_cmd(&argc, &argv, 1, TU32, RU8, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,14 +41,14 @@ parse_udp(int *argc_p, char ***argv_p,
|
||||||
if (strcmp(*argv, "sport") == 0) {
|
if (strcmp(*argv, "sport") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 0;
|
tkey->off = 0;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(*argv, "dport") == 0) {
|
if (strcmp(*argv, "dport") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
tkey->off = 2;
|
tkey->off = 2;
|
||||||
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey);
|
res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey, 0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue