Skip to content

Commit

Permalink
net sched: ife action fix late binding
Browse files Browse the repository at this point in the history
The process below was broken and is fixed with this patch.

//add an ife action and give it an instance id of 1
sudo tc actions add action ife encode \
type 0xDEAD allow mark dst 02:15:15:15:15:15 index 1

//create a filter which binds to ife action id 1
sudo tc filter add dev $DEV parent ffff: protocol ip prio 1 u32\
match ip dst 17.0.0.1/32 flowid 1:11 action ife index 1

Message before fix was:
RTNETLINK answers: Invalid argument
We have an error talking to the kernel

Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jamal Hadi Salim authored and David S. Miller committed May 11, 2016
1 parent 5e1567a commit 4e8c861
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions net/sched/act_ife.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
u16 ife_type = 0;
u8 *daddr = NULL;
u8 *saddr = NULL;
int ret = 0;
int ret = 0, exists = 0;
int err;

err = nla_parse_nested(tb, TCA_IFE_MAX, nla, ife_policy);
Expand All @@ -435,25 +435,29 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,

parm = nla_data(tb[TCA_IFE_PARMS]);

exists = tcf_hash_check(tn, parm->index, a, bind);
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 (!tcf_hash_check(tn, parm->index, a, bind)) {
if (!exists) {
ret = tcf_hash_create(tn, parm->index, est, a, sizeof(*ife),
bind, false);
if (ret)
return ret;
ret = ACT_P_CREATED;
} else {
if (bind) /* dont override defaults */
return 0;
tcf_hash_release(a, bind);
if (!ovr)
return -EEXIST;
Expand Down Expand Up @@ -495,6 +499,8 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
NULL);
if (err) {
metadata_parse_err:
if (exists)
tcf_hash_release(a, bind);
if (ret == ACT_P_CREATED)
_tcf_ife_cleanup(a, bind);

Expand Down

0 comments on commit 4e8c861

Please sign in to comment.