X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=tc%2Fp_udp.c;h=bab456de9831f3ee93ecd98ba8150e67406b05ce;hb=c9c64b8d1ebed69054f8a170d640b13c3abb1fdb;hp=2b9b88fc19114bf3d275fa77f96e143449d38119;hpb=753ef5bbd60891437739e8ceee711957fa7a4bd2;p=mirror_iproute2.git diff --git a/tc/p_udp.c b/tc/p_udp.c index 2b9b88fc..bab456de 100644 --- a/tc/p_udp.c +++ b/tc/p_udp.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -24,14 +23,44 @@ #include "m_pedit.h" static int -parse_udp(int *argc_p, char ***argv_p,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey) +parse_udp(int *argc_p, char ***argv_p, + struct m_pedit_sel *sel, struct m_pedit_key *tkey) { int res = -1; + int argc = *argc_p; + char **argv = *argv_p; + + if (argc < 2) + return -1; + + if (!sel->extended) + return -1; + + tkey->htype = TCA_PEDIT_KEY_EX_HDR_TYPE_UDP; + + if (strcmp(*argv, "sport") == 0) { + NEXT_ARG(); + tkey->off = 0; + res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey); + goto done; + } + + if (strcmp(*argv, "dport") == 0) { + NEXT_ARG(); + tkey->off = 2; + res = parse_cmd(&argc, &argv, 2, TU32, RU16, sel, tkey); + goto done; + } + + return -1; + +done: + *argc_p = argc; + *argv_p = argv; return res; } struct m_pedit_util p_pedit_udp = { - NULL, - "udp", - parse_udp, + .id = "udp", + .parse_peopt = parse_udp, };