Skip to content

Commit 66530bd

Browse files
jhsmtdavem330
authored andcommitted
sched,cls_flower: set key address type when present
only when user space passes the addresses should we consider their presence Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com> Acked-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 83d15e7 commit 66530bd

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

net/sched/cls_flower.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,30 +252,36 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
252252
fl_set_key_val(tb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC,
253253
mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK,
254254
sizeof(key->eth.src));
255+
255256
fl_set_key_val(tb, &key->basic.n_proto, TCA_FLOWER_KEY_ETH_TYPE,
256257
&mask->basic.n_proto, TCA_FLOWER_UNSPEC,
257258
sizeof(key->basic.n_proto));
259+
258260
if (key->basic.n_proto == htons(ETH_P_IP) ||
259261
key->basic.n_proto == htons(ETH_P_IPV6)) {
260262
fl_set_key_val(tb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO,
261263
&mask->basic.ip_proto, TCA_FLOWER_UNSPEC,
262264
sizeof(key->basic.ip_proto));
263265
}
264-
if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
266+
267+
if (tb[TCA_FLOWER_KEY_IPV4_SRC] || tb[TCA_FLOWER_KEY_IPV4_DST]) {
268+
key->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
265269
fl_set_key_val(tb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
266270
&mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
267271
sizeof(key->ipv4.src));
268272
fl_set_key_val(tb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST,
269273
&mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK,
270274
sizeof(key->ipv4.dst));
271-
} else if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
275+
} else if (tb[TCA_FLOWER_KEY_IPV6_SRC] || tb[TCA_FLOWER_KEY_IPV6_DST]) {
276+
key->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
272277
fl_set_key_val(tb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
273278
&mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
274279
sizeof(key->ipv6.src));
275280
fl_set_key_val(tb, &key->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST,
276281
&mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK,
277282
sizeof(key->ipv6.dst));
278283
}
284+
279285
if (key->basic.ip_proto == IPPROTO_TCP) {
280286
fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC,
281287
&mask->tp.src, TCA_FLOWER_UNSPEC,

0 commit comments

Comments
 (0)