This patch allows to set an ethertype for IFE which is zero. There is no
kernel side validation which forbids a type to zero.

Signed-off-by: Alexander Aring <ar...@mojatatu.com>
---
 tc/m_ife.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tc/m_ife.c b/tc/m_ife.c
index e3521e62..e05e2276 100644
--- a/tc/m_ife.c
+++ b/tc/m_ife.c
@@ -63,6 +63,7 @@ static int parse_ife(struct action_util *a, int *argc_p, char 
***argv_p,
        char dbuf[ETH_ALEN];
        char sbuf[ETH_ALEN];
        __u16 ife_type = 0;
+       int user_type = 0;
        __u32 ife_prio = 0;
        __u32 ife_prio_v = 0;
        __u32 ife_mark = 0;
@@ -125,6 +126,7 @@ static int parse_ife(struct action_util *a, int *argc_p, 
char ***argv_p,
                        if (get_u16(&ife_type, *argv, 0))
                                invarg("ife type is invalid", *argv);
                        fprintf(stderr, "IFE type 0x%x\n", ife_type);
+                       user_type = 1;
                } else if (matches(*argv, "dst") == 0) {
                        NEXT_ARG();
                        daddr = *argv;
@@ -185,7 +187,7 @@ static int parse_ife(struct action_util *a, int *argc_p, 
char ***argv_p,
 
        if (daddr)
                addattr_l(n, MAX_MSG, TCA_IFE_DMAC, dbuf, ETH_ALEN);
-       if (ife_type)
+       if (user_type)
                addattr_l(n, MAX_MSG, TCA_IFE_TYPE, &ife_type, 2);
        if (saddr)
                addattr_l(n, MAX_MSG, TCA_IFE_SMAC, sbuf, ETH_ALEN);
-- 
2.11.0

Reply via email to