diff options
Diffstat (limited to 'net/sched/cls_flow.c')
| -rw-r--r-- | net/sched/cls_flow.c | 19 | 
1 files changed, 8 insertions, 11 deletions
diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c index 7881e2fccbc..35be16f7c19 100644 --- a/net/sched/cls_flow.c +++ b/net/sched/cls_flow.c @@ -56,11 +56,6 @@ struct flow_filter {  	u32			hashrnd;  }; -static const struct tcf_ext_map flow_ext_map = { -	.action	= TCA_FLOW_ACT, -	.police	= TCA_FLOW_POLICE, -}; -  static inline u32 addr_fold(void *addr)  {  	unsigned long a = (unsigned long)addr; @@ -220,7 +215,7 @@ static u32 flow_get_vlan_tag(const struct sk_buff *skb)  static u32 flow_get_rxhash(struct sk_buff *skb)  { -	return skb_get_rxhash(skb); +	return skb_get_hash(skb);  }  static u32 flow_key_get(struct sk_buff *skb, int key, struct flow_keys *flow) @@ -354,7 +349,7 @@ static const struct nla_policy flow_policy[TCA_FLOW_MAX + 1] = {  static int flow_change(struct net *net, struct sk_buff *in_skb,  		       struct tcf_proto *tp, unsigned long base,  		       u32 handle, struct nlattr **tca, -		       unsigned long *arg) +		       unsigned long *arg, bool ovr)  {  	struct flow_head *head = tp->root;  	struct flow_filter *f; @@ -397,7 +392,8 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,  			return -EOPNOTSUPP;  	} -	err = tcf_exts_validate(net, tp, tb, tca[TCA_RATE], &e, &flow_ext_map); +	tcf_exts_init(&e, TCA_FLOW_ACT, TCA_FLOW_POLICE); +	err = tcf_exts_validate(net, tp, tb, tca[TCA_RATE], &e, ovr);  	if (err < 0)  		return err; @@ -455,6 +451,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,  		f->handle = handle;  		f->mask	  = ~0U; +		tcf_exts_init(&f->exts, TCA_FLOW_ACT, TCA_FLOW_POLICE);  		get_random_bytes(&f->hashrnd, 4);  		f->perturb_timer.function = flow_perturbation; @@ -566,7 +563,7 @@ static void flow_put(struct tcf_proto *tp, unsigned long f)  {  } -static int flow_dump(struct tcf_proto *tp, unsigned long fh, +static int flow_dump(struct net *net, struct tcf_proto *tp, unsigned long fh,  		     struct sk_buff *skb, struct tcmsg *t)  {  	struct flow_filter *f = (struct flow_filter *)fh; @@ -608,7 +605,7 @@ static int flow_dump(struct tcf_proto *tp, unsigned long fh,  	    nla_put_u32(skb, TCA_FLOW_PERTURB, f->perturb_period / HZ))  		goto nla_put_failure; -	if (tcf_exts_dump(skb, &f->exts, &flow_ext_map) < 0) +	if (tcf_exts_dump(skb, &f->exts) < 0)  		goto nla_put_failure;  #ifdef CONFIG_NET_EMATCH  	if (f->ematches.hdr.nmatches && @@ -617,7 +614,7 @@ static int flow_dump(struct tcf_proto *tp, unsigned long fh,  #endif  	nla_nest_end(skb, nest); -	if (tcf_exts_dump_stats(skb, &f->exts, &flow_ext_map) < 0) +	if (tcf_exts_dump_stats(skb, &f->exts) < 0)  		goto nla_put_failure;  	return skb->len;  | 
