act_ife: use registered ife_type as fallback
authorAlexander Aring <aring@mojatatu.com>
Mon, 28 Aug 2017 19:03:14 +0000 (15:03 -0400)
committerDavid S. Miller <davem@davemloft.net>
Tue, 29 Aug 2017 22:14:18 +0000 (15:14 -0700)
This patch handles a default IFE type if it's not given by user space
netlink api. The default IFE type will be the registered ethertype by
IEEE for IFE ForCES.

Signed-off-by: Alexander Aring <aring@mojatatu.com>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/act_ife.c

index c5dec308b8b1eb29505fed1b9a71b3ef70f5e91a..7ed1be80ee86826bb16286ec8eb11db9b1362960 100644 (file)
@@ -435,8 +435,8 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
        struct nlattr *tb[TCA_IFE_MAX + 1];
        struct nlattr *tb2[IFE_META_MAX + 1];
        struct tcf_ife_info *ife;
+       u16 ife_type = ETH_P_IFE;
        struct tc_ife *parm;
-       u16 ife_type = 0;
        u8 *daddr = NULL;
        u8 *saddr = NULL;
        bool exists = false;
@@ -456,18 +456,6 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
        if (exists && bind)
                return 0;
 
-       if (parm->flags & IFE_ENCODE) {
-               /* Until we get issued the ethertype, we cant have
-                * a default..
-               **/
-               if (!tb[TCA_IFE_TYPE]) {
-                       if (exists)
-                               tcf_hash_release(*a, bind);
-                       pr_info("You MUST pass etherype for encoding\n");
-                       return -EINVAL;
-               }
-       }
-
        if (!exists) {
                ret = tcf_hash_create(tn, parm->index, est, a, &act_ife_ops,
                                      bind, false);
@@ -484,7 +472,8 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
        ife->flags = parm->flags;
 
        if (parm->flags & IFE_ENCODE) {
-               ife_type = nla_get_u16(tb[TCA_IFE_TYPE]);
+               if (tb[TCA_IFE_TYPE])
+                       ife_type = nla_get_u16(tb[TCA_IFE_TYPE]);
                if (tb[TCA_IFE_DMAC])
                        daddr = nla_data(tb[TCA_IFE_DMAC]);
                if (tb[TCA_IFE_SMAC])