}
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 val[4] = { 0 };
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;
*argv_p = argv;
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);
#endif
if (strcmp(*argv, "type") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "dst") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "src") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "src") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "dst") == 0) {
NEXT_ARG();
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;
}
/* jamal - look at these and make them either old or new
if (strcmp(*argv, "tos") == 0 || matches(*argv, "dsfield") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "ihl") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "ttl") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "protocol") == 0) {
NEXT_ARG();
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;
}
/* jamal - fix this */
if (matches(*argv, "precedence") == 0) {
NEXT_ARG();
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;
}
/* jamal - validate this at some point */
if (strcmp(*argv, "nofrag") == 0) {
NEXT_ARG();
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;
}
/* jamal - validate this at some point */
if (strcmp(*argv, "firstfrag") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "ce") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "df") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "mf") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "dport") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "sport") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "icmp_type") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "icmp_code") == 0) {
NEXT_ARG();
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;
}
return -1;
if (strcmp(*argv, "src") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "dst") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "flow_lbl") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "payload_len") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "nexthdr") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "hoplimit") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "traffic_class") == 0) {
NEXT_ARG();
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. */
if (!res) {
if (strcmp(*argv, "sport") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "dport") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "flags") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "sport") == 0) {
NEXT_ARG();
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;
}
if (strcmp(*argv, "dport") == 0) {
NEXT_ARG();
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;
}