net: dsa: Make dsa_master_set_mtu() static
[linux-2.6-block.git] / net / sched / cls_flower.c
1 /*
2  * net/sched/cls_flower.c               Flower classifier
3  *
4  * Copyright (c) 2015 Jiri Pirko <jiri@resnulli.us>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  */
11
12 #include <linux/kernel.h>
13 #include <linux/init.h>
14 #include <linux/module.h>
15 #include <linux/rhashtable.h>
16 #include <linux/workqueue.h>
17
18 #include <linux/if_ether.h>
19 #include <linux/in6.h>
20 #include <linux/ip.h>
21 #include <linux/mpls.h>
22
23 #include <net/sch_generic.h>
24 #include <net/pkt_cls.h>
25 #include <net/ip.h>
26 #include <net/flow_dissector.h>
27 #include <net/geneve.h>
28
29 #include <net/dst.h>
30 #include <net/dst_metadata.h>
31
32 struct fl_flow_key {
33         int     indev_ifindex;
34         struct flow_dissector_key_control control;
35         struct flow_dissector_key_control enc_control;
36         struct flow_dissector_key_basic basic;
37         struct flow_dissector_key_eth_addrs eth;
38         struct flow_dissector_key_vlan vlan;
39         struct flow_dissector_key_vlan cvlan;
40         union {
41                 struct flow_dissector_key_ipv4_addrs ipv4;
42                 struct flow_dissector_key_ipv6_addrs ipv6;
43         };
44         struct flow_dissector_key_ports tp;
45         struct flow_dissector_key_icmp icmp;
46         struct flow_dissector_key_arp arp;
47         struct flow_dissector_key_keyid enc_key_id;
48         union {
49                 struct flow_dissector_key_ipv4_addrs enc_ipv4;
50                 struct flow_dissector_key_ipv6_addrs enc_ipv6;
51         };
52         struct flow_dissector_key_ports enc_tp;
53         struct flow_dissector_key_mpls mpls;
54         struct flow_dissector_key_tcp tcp;
55         struct flow_dissector_key_ip ip;
56         struct flow_dissector_key_ip enc_ip;
57         struct flow_dissector_key_enc_opts enc_opts;
58         struct flow_dissector_key_ports tp_min;
59         struct flow_dissector_key_ports tp_max;
60 } __aligned(BITS_PER_LONG / 8); /* Ensure that we can do comparisons as longs. */
61
62 struct fl_flow_mask_range {
63         unsigned short int start;
64         unsigned short int end;
65 };
66
67 struct fl_flow_mask {
68         struct fl_flow_key key;
69         struct fl_flow_mask_range range;
70         u32 flags;
71         struct rhash_head ht_node;
72         struct rhashtable ht;
73         struct rhashtable_params filter_ht_params;
74         struct flow_dissector dissector;
75         struct list_head filters;
76         struct rcu_work rwork;
77         struct list_head list;
78 };
79
80 struct fl_flow_tmplt {
81         struct fl_flow_key dummy_key;
82         struct fl_flow_key mask;
83         struct flow_dissector dissector;
84         struct tcf_chain *chain;
85 };
86
87 struct cls_fl_head {
88         struct rhashtable ht;
89         struct list_head masks;
90         struct rcu_work rwork;
91         struct idr handle_idr;
92 };
93
94 struct cls_fl_filter {
95         struct fl_flow_mask *mask;
96         struct rhash_head ht_node;
97         struct fl_flow_key mkey;
98         struct tcf_exts exts;
99         struct tcf_result res;
100         struct fl_flow_key key;
101         struct list_head list;
102         u32 handle;
103         u32 flags;
104         u32 in_hw_count;
105         struct rcu_work rwork;
106         struct net_device *hw_dev;
107 };
108
109 static const struct rhashtable_params mask_ht_params = {
110         .key_offset = offsetof(struct fl_flow_mask, key),
111         .key_len = sizeof(struct fl_flow_key),
112         .head_offset = offsetof(struct fl_flow_mask, ht_node),
113         .automatic_shrinking = true,
114 };
115
116 static unsigned short int fl_mask_range(const struct fl_flow_mask *mask)
117 {
118         return mask->range.end - mask->range.start;
119 }
120
121 static void fl_mask_update_range(struct fl_flow_mask *mask)
122 {
123         const u8 *bytes = (const u8 *) &mask->key;
124         size_t size = sizeof(mask->key);
125         size_t i, first = 0, last;
126
127         for (i = 0; i < size; i++) {
128                 if (bytes[i]) {
129                         first = i;
130                         break;
131                 }
132         }
133         last = first;
134         for (i = size - 1; i != first; i--) {
135                 if (bytes[i]) {
136                         last = i;
137                         break;
138                 }
139         }
140         mask->range.start = rounddown(first, sizeof(long));
141         mask->range.end = roundup(last + 1, sizeof(long));
142 }
143
144 static void *fl_key_get_start(struct fl_flow_key *key,
145                               const struct fl_flow_mask *mask)
146 {
147         return (u8 *) key + mask->range.start;
148 }
149
150 static void fl_set_masked_key(struct fl_flow_key *mkey, struct fl_flow_key *key,
151                               struct fl_flow_mask *mask)
152 {
153         const long *lkey = fl_key_get_start(key, mask);
154         const long *lmask = fl_key_get_start(&mask->key, mask);
155         long *lmkey = fl_key_get_start(mkey, mask);
156         int i;
157
158         for (i = 0; i < fl_mask_range(mask); i += sizeof(long))
159                 *lmkey++ = *lkey++ & *lmask++;
160 }
161
162 static bool fl_mask_fits_tmplt(struct fl_flow_tmplt *tmplt,
163                                struct fl_flow_mask *mask)
164 {
165         const long *lmask = fl_key_get_start(&mask->key, mask);
166         const long *ltmplt;
167         int i;
168
169         if (!tmplt)
170                 return true;
171         ltmplt = fl_key_get_start(&tmplt->mask, mask);
172         for (i = 0; i < fl_mask_range(mask); i += sizeof(long)) {
173                 if (~*ltmplt++ & *lmask++)
174                         return false;
175         }
176         return true;
177 }
178
179 static void fl_clear_masked_range(struct fl_flow_key *key,
180                                   struct fl_flow_mask *mask)
181 {
182         memset(fl_key_get_start(key, mask), 0, fl_mask_range(mask));
183 }
184
185 static bool fl_range_port_dst_cmp(struct cls_fl_filter *filter,
186                                   struct fl_flow_key *key,
187                                   struct fl_flow_key *mkey)
188 {
189         __be16 min_mask, max_mask, min_val, max_val;
190
191         min_mask = htons(filter->mask->key.tp_min.dst);
192         max_mask = htons(filter->mask->key.tp_max.dst);
193         min_val = htons(filter->key.tp_min.dst);
194         max_val = htons(filter->key.tp_max.dst);
195
196         if (min_mask && max_mask) {
197                 if (htons(key->tp.dst) < min_val ||
198                     htons(key->tp.dst) > max_val)
199                         return false;
200
201                 /* skb does not have min and max values */
202                 mkey->tp_min.dst = filter->mkey.tp_min.dst;
203                 mkey->tp_max.dst = filter->mkey.tp_max.dst;
204         }
205         return true;
206 }
207
208 static bool fl_range_port_src_cmp(struct cls_fl_filter *filter,
209                                   struct fl_flow_key *key,
210                                   struct fl_flow_key *mkey)
211 {
212         __be16 min_mask, max_mask, min_val, max_val;
213
214         min_mask = htons(filter->mask->key.tp_min.src);
215         max_mask = htons(filter->mask->key.tp_max.src);
216         min_val = htons(filter->key.tp_min.src);
217         max_val = htons(filter->key.tp_max.src);
218
219         if (min_mask && max_mask) {
220                 if (htons(key->tp.src) < min_val ||
221                     htons(key->tp.src) > max_val)
222                         return false;
223
224                 /* skb does not have min and max values */
225                 mkey->tp_min.src = filter->mkey.tp_min.src;
226                 mkey->tp_max.src = filter->mkey.tp_max.src;
227         }
228         return true;
229 }
230
231 static struct cls_fl_filter *__fl_lookup(struct fl_flow_mask *mask,
232                                          struct fl_flow_key *mkey)
233 {
234         return rhashtable_lookup_fast(&mask->ht, fl_key_get_start(mkey, mask),
235                                       mask->filter_ht_params);
236 }
237
238 static struct cls_fl_filter *fl_lookup_range(struct fl_flow_mask *mask,
239                                              struct fl_flow_key *mkey,
240                                              struct fl_flow_key *key)
241 {
242         struct cls_fl_filter *filter, *f;
243
244         list_for_each_entry_rcu(filter, &mask->filters, list) {
245                 if (!fl_range_port_dst_cmp(filter, key, mkey))
246                         continue;
247
248                 if (!fl_range_port_src_cmp(filter, key, mkey))
249                         continue;
250
251                 f = __fl_lookup(mask, mkey);
252                 if (f)
253                         return f;
254         }
255         return NULL;
256 }
257
258 static struct cls_fl_filter *fl_lookup(struct fl_flow_mask *mask,
259                                        struct fl_flow_key *mkey,
260                                        struct fl_flow_key *key)
261 {
262         if ((mask->flags & TCA_FLOWER_MASK_FLAGS_RANGE))
263                 return fl_lookup_range(mask, mkey, key);
264
265         return __fl_lookup(mask, mkey);
266 }
267
268 static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp,
269                        struct tcf_result *res)
270 {
271         struct cls_fl_head *head = rcu_dereference_bh(tp->root);
272         struct cls_fl_filter *f;
273         struct fl_flow_mask *mask;
274         struct fl_flow_key skb_key;
275         struct fl_flow_key skb_mkey;
276
277         list_for_each_entry_rcu(mask, &head->masks, list) {
278                 fl_clear_masked_range(&skb_key, mask);
279
280                 skb_key.indev_ifindex = skb->skb_iif;
281                 /* skb_flow_dissect() does not set n_proto in case an unknown
282                  * protocol, so do it rather here.
283                  */
284                 skb_key.basic.n_proto = skb->protocol;
285                 skb_flow_dissect_tunnel_info(skb, &mask->dissector, &skb_key);
286                 skb_flow_dissect(skb, &mask->dissector, &skb_key, 0);
287
288                 fl_set_masked_key(&skb_mkey, &skb_key, mask);
289
290                 f = fl_lookup(mask, &skb_mkey, &skb_key);
291                 if (f && !tc_skip_sw(f->flags)) {
292                         *res = f->res;
293                         return tcf_exts_exec(skb, &f->exts, res);
294                 }
295         }
296         return -1;
297 }
298
299 static int fl_init(struct tcf_proto *tp)
300 {
301         struct cls_fl_head *head;
302
303         head = kzalloc(sizeof(*head), GFP_KERNEL);
304         if (!head)
305                 return -ENOBUFS;
306
307         INIT_LIST_HEAD_RCU(&head->masks);
308         rcu_assign_pointer(tp->root, head);
309         idr_init(&head->handle_idr);
310
311         return rhashtable_init(&head->ht, &mask_ht_params);
312 }
313
314 static void fl_mask_free(struct fl_flow_mask *mask)
315 {
316         rhashtable_destroy(&mask->ht);
317         kfree(mask);
318 }
319
320 static void fl_mask_free_work(struct work_struct *work)
321 {
322         struct fl_flow_mask *mask = container_of(to_rcu_work(work),
323                                                  struct fl_flow_mask, rwork);
324
325         fl_mask_free(mask);
326 }
327
328 static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask,
329                         bool async)
330 {
331         if (!list_empty(&mask->filters))
332                 return false;
333
334         rhashtable_remove_fast(&head->ht, &mask->ht_node, mask_ht_params);
335         list_del_rcu(&mask->list);
336         if (async)
337                 tcf_queue_work(&mask->rwork, fl_mask_free_work);
338         else
339                 fl_mask_free(mask);
340
341         return true;
342 }
343
344 static void __fl_destroy_filter(struct cls_fl_filter *f)
345 {
346         tcf_exts_destroy(&f->exts);
347         tcf_exts_put_net(&f->exts);
348         kfree(f);
349 }
350
351 static void fl_destroy_filter_work(struct work_struct *work)
352 {
353         struct cls_fl_filter *f = container_of(to_rcu_work(work),
354                                         struct cls_fl_filter, rwork);
355
356         rtnl_lock();
357         __fl_destroy_filter(f);
358         rtnl_unlock();
359 }
360
361 static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f,
362                                  struct netlink_ext_ack *extack)
363 {
364         struct tc_cls_flower_offload cls_flower = {};
365         struct tcf_block *block = tp->chain->block;
366
367         tc_cls_common_offload_init(&cls_flower.common, tp, f->flags, extack);
368         cls_flower.command = TC_CLSFLOWER_DESTROY;
369         cls_flower.cookie = (unsigned long) f;
370
371         tc_setup_cb_call(block, &f->exts, TC_SETUP_CLSFLOWER,
372                          &cls_flower, false);
373         tcf_block_offload_dec(block, &f->flags);
374 }
375
376 static int fl_hw_replace_filter(struct tcf_proto *tp,
377                                 struct cls_fl_filter *f,
378                                 struct netlink_ext_ack *extack)
379 {
380         struct tc_cls_flower_offload cls_flower = {};
381         struct tcf_block *block = tp->chain->block;
382         bool skip_sw = tc_skip_sw(f->flags);
383         int err;
384
385         tc_cls_common_offload_init(&cls_flower.common, tp, f->flags, extack);
386         cls_flower.command = TC_CLSFLOWER_REPLACE;
387         cls_flower.cookie = (unsigned long) f;
388         cls_flower.dissector = &f->mask->dissector;
389         cls_flower.mask = &f->mask->key;
390         cls_flower.key = &f->mkey;
391         cls_flower.exts = &f->exts;
392         cls_flower.classid = f->res.classid;
393
394         err = tc_setup_cb_call(block, &f->exts, TC_SETUP_CLSFLOWER,
395                                &cls_flower, skip_sw);
396         if (err < 0) {
397                 fl_hw_destroy_filter(tp, f, NULL);
398                 return err;
399         } else if (err > 0) {
400                 f->in_hw_count = err;
401                 tcf_block_offload_inc(block, &f->flags);
402         }
403
404         if (skip_sw && !(f->flags & TCA_CLS_FLAGS_IN_HW))
405                 return -EINVAL;
406
407         return 0;
408 }
409
410 static void fl_hw_update_stats(struct tcf_proto *tp, struct cls_fl_filter *f)
411 {
412         struct tc_cls_flower_offload cls_flower = {};
413         struct tcf_block *block = tp->chain->block;
414
415         tc_cls_common_offload_init(&cls_flower.common, tp, f->flags, NULL);
416         cls_flower.command = TC_CLSFLOWER_STATS;
417         cls_flower.cookie = (unsigned long) f;
418         cls_flower.exts = &f->exts;
419         cls_flower.classid = f->res.classid;
420
421         tc_setup_cb_call(block, &f->exts, TC_SETUP_CLSFLOWER,
422                          &cls_flower, false);
423 }
424
425 static bool __fl_delete(struct tcf_proto *tp, struct cls_fl_filter *f,
426                         struct netlink_ext_ack *extack)
427 {
428         struct cls_fl_head *head = rtnl_dereference(tp->root);
429         bool async = tcf_exts_get_net(&f->exts);
430         bool last;
431
432         idr_remove(&head->handle_idr, f->handle);
433         list_del_rcu(&f->list);
434         last = fl_mask_put(head, f->mask, async);
435         if (!tc_skip_hw(f->flags))
436                 fl_hw_destroy_filter(tp, f, extack);
437         tcf_unbind_filter(tp, &f->res);
438         if (async)
439                 tcf_queue_work(&f->rwork, fl_destroy_filter_work);
440         else
441                 __fl_destroy_filter(f);
442
443         return last;
444 }
445
446 static void fl_destroy_sleepable(struct work_struct *work)
447 {
448         struct cls_fl_head *head = container_of(to_rcu_work(work),
449                                                 struct cls_fl_head,
450                                                 rwork);
451
452         rhashtable_destroy(&head->ht);
453         kfree(head);
454         module_put(THIS_MODULE);
455 }
456
457 static void fl_destroy(struct tcf_proto *tp, struct netlink_ext_ack *extack)
458 {
459         struct cls_fl_head *head = rtnl_dereference(tp->root);
460         struct fl_flow_mask *mask, *next_mask;
461         struct cls_fl_filter *f, *next;
462
463         list_for_each_entry_safe(mask, next_mask, &head->masks, list) {
464                 list_for_each_entry_safe(f, next, &mask->filters, list) {
465                         if (__fl_delete(tp, f, extack))
466                                 break;
467                 }
468         }
469         idr_destroy(&head->handle_idr);
470
471         __module_get(THIS_MODULE);
472         tcf_queue_work(&head->rwork, fl_destroy_sleepable);
473 }
474
475 static void *fl_get(struct tcf_proto *tp, u32 handle)
476 {
477         struct cls_fl_head *head = rtnl_dereference(tp->root);
478
479         return idr_find(&head->handle_idr, handle);
480 }
481
482 static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = {
483         [TCA_FLOWER_UNSPEC]             = { .type = NLA_UNSPEC },
484         [TCA_FLOWER_CLASSID]            = { .type = NLA_U32 },
485         [TCA_FLOWER_INDEV]              = { .type = NLA_STRING,
486                                             .len = IFNAMSIZ },
487         [TCA_FLOWER_KEY_ETH_DST]        = { .len = ETH_ALEN },
488         [TCA_FLOWER_KEY_ETH_DST_MASK]   = { .len = ETH_ALEN },
489         [TCA_FLOWER_KEY_ETH_SRC]        = { .len = ETH_ALEN },
490         [TCA_FLOWER_KEY_ETH_SRC_MASK]   = { .len = ETH_ALEN },
491         [TCA_FLOWER_KEY_ETH_TYPE]       = { .type = NLA_U16 },
492         [TCA_FLOWER_KEY_IP_PROTO]       = { .type = NLA_U8 },
493         [TCA_FLOWER_KEY_IPV4_SRC]       = { .type = NLA_U32 },
494         [TCA_FLOWER_KEY_IPV4_SRC_MASK]  = { .type = NLA_U32 },
495         [TCA_FLOWER_KEY_IPV4_DST]       = { .type = NLA_U32 },
496         [TCA_FLOWER_KEY_IPV4_DST_MASK]  = { .type = NLA_U32 },
497         [TCA_FLOWER_KEY_IPV6_SRC]       = { .len = sizeof(struct in6_addr) },
498         [TCA_FLOWER_KEY_IPV6_SRC_MASK]  = { .len = sizeof(struct in6_addr) },
499         [TCA_FLOWER_KEY_IPV6_DST]       = { .len = sizeof(struct in6_addr) },
500         [TCA_FLOWER_KEY_IPV6_DST_MASK]  = { .len = sizeof(struct in6_addr) },
501         [TCA_FLOWER_KEY_TCP_SRC]        = { .type = NLA_U16 },
502         [TCA_FLOWER_KEY_TCP_DST]        = { .type = NLA_U16 },
503         [TCA_FLOWER_KEY_UDP_SRC]        = { .type = NLA_U16 },
504         [TCA_FLOWER_KEY_UDP_DST]        = { .type = NLA_U16 },
505         [TCA_FLOWER_KEY_VLAN_ID]        = { .type = NLA_U16 },
506         [TCA_FLOWER_KEY_VLAN_PRIO]      = { .type = NLA_U8 },
507         [TCA_FLOWER_KEY_VLAN_ETH_TYPE]  = { .type = NLA_U16 },
508         [TCA_FLOWER_KEY_ENC_KEY_ID]     = { .type = NLA_U32 },
509         [TCA_FLOWER_KEY_ENC_IPV4_SRC]   = { .type = NLA_U32 },
510         [TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK] = { .type = NLA_U32 },
511         [TCA_FLOWER_KEY_ENC_IPV4_DST]   = { .type = NLA_U32 },
512         [TCA_FLOWER_KEY_ENC_IPV4_DST_MASK] = { .type = NLA_U32 },
513         [TCA_FLOWER_KEY_ENC_IPV6_SRC]   = { .len = sizeof(struct in6_addr) },
514         [TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK] = { .len = sizeof(struct in6_addr) },
515         [TCA_FLOWER_KEY_ENC_IPV6_DST]   = { .len = sizeof(struct in6_addr) },
516         [TCA_FLOWER_KEY_ENC_IPV6_DST_MASK] = { .len = sizeof(struct in6_addr) },
517         [TCA_FLOWER_KEY_TCP_SRC_MASK]   = { .type = NLA_U16 },
518         [TCA_FLOWER_KEY_TCP_DST_MASK]   = { .type = NLA_U16 },
519         [TCA_FLOWER_KEY_UDP_SRC_MASK]   = { .type = NLA_U16 },
520         [TCA_FLOWER_KEY_UDP_DST_MASK]   = { .type = NLA_U16 },
521         [TCA_FLOWER_KEY_SCTP_SRC_MASK]  = { .type = NLA_U16 },
522         [TCA_FLOWER_KEY_SCTP_DST_MASK]  = { .type = NLA_U16 },
523         [TCA_FLOWER_KEY_SCTP_SRC]       = { .type = NLA_U16 },
524         [TCA_FLOWER_KEY_SCTP_DST]       = { .type = NLA_U16 },
525         [TCA_FLOWER_KEY_ENC_UDP_SRC_PORT]       = { .type = NLA_U16 },
526         [TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK]  = { .type = NLA_U16 },
527         [TCA_FLOWER_KEY_ENC_UDP_DST_PORT]       = { .type = NLA_U16 },
528         [TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK]  = { .type = NLA_U16 },
529         [TCA_FLOWER_KEY_FLAGS]          = { .type = NLA_U32 },
530         [TCA_FLOWER_KEY_FLAGS_MASK]     = { .type = NLA_U32 },
531         [TCA_FLOWER_KEY_ICMPV4_TYPE]    = { .type = NLA_U8 },
532         [TCA_FLOWER_KEY_ICMPV4_TYPE_MASK] = { .type = NLA_U8 },
533         [TCA_FLOWER_KEY_ICMPV4_CODE]    = { .type = NLA_U8 },
534         [TCA_FLOWER_KEY_ICMPV4_CODE_MASK] = { .type = NLA_U8 },
535         [TCA_FLOWER_KEY_ICMPV6_TYPE]    = { .type = NLA_U8 },
536         [TCA_FLOWER_KEY_ICMPV6_TYPE_MASK] = { .type = NLA_U8 },
537         [TCA_FLOWER_KEY_ICMPV6_CODE]    = { .type = NLA_U8 },
538         [TCA_FLOWER_KEY_ICMPV6_CODE_MASK] = { .type = NLA_U8 },
539         [TCA_FLOWER_KEY_ARP_SIP]        = { .type = NLA_U32 },
540         [TCA_FLOWER_KEY_ARP_SIP_MASK]   = { .type = NLA_U32 },
541         [TCA_FLOWER_KEY_ARP_TIP]        = { .type = NLA_U32 },
542         [TCA_FLOWER_KEY_ARP_TIP_MASK]   = { .type = NLA_U32 },
543         [TCA_FLOWER_KEY_ARP_OP]         = { .type = NLA_U8 },
544         [TCA_FLOWER_KEY_ARP_OP_MASK]    = { .type = NLA_U8 },
545         [TCA_FLOWER_KEY_ARP_SHA]        = { .len = ETH_ALEN },
546         [TCA_FLOWER_KEY_ARP_SHA_MASK]   = { .len = ETH_ALEN },
547         [TCA_FLOWER_KEY_ARP_THA]        = { .len = ETH_ALEN },
548         [TCA_FLOWER_KEY_ARP_THA_MASK]   = { .len = ETH_ALEN },
549         [TCA_FLOWER_KEY_MPLS_TTL]       = { .type = NLA_U8 },
550         [TCA_FLOWER_KEY_MPLS_BOS]       = { .type = NLA_U8 },
551         [TCA_FLOWER_KEY_MPLS_TC]        = { .type = NLA_U8 },
552         [TCA_FLOWER_KEY_MPLS_LABEL]     = { .type = NLA_U32 },
553         [TCA_FLOWER_KEY_TCP_FLAGS]      = { .type = NLA_U16 },
554         [TCA_FLOWER_KEY_TCP_FLAGS_MASK] = { .type = NLA_U16 },
555         [TCA_FLOWER_KEY_IP_TOS]         = { .type = NLA_U8 },
556         [TCA_FLOWER_KEY_IP_TOS_MASK]    = { .type = NLA_U8 },
557         [TCA_FLOWER_KEY_IP_TTL]         = { .type = NLA_U8 },
558         [TCA_FLOWER_KEY_IP_TTL_MASK]    = { .type = NLA_U8 },
559         [TCA_FLOWER_KEY_CVLAN_ID]       = { .type = NLA_U16 },
560         [TCA_FLOWER_KEY_CVLAN_PRIO]     = { .type = NLA_U8 },
561         [TCA_FLOWER_KEY_CVLAN_ETH_TYPE] = { .type = NLA_U16 },
562         [TCA_FLOWER_KEY_ENC_IP_TOS]     = { .type = NLA_U8 },
563         [TCA_FLOWER_KEY_ENC_IP_TOS_MASK] = { .type = NLA_U8 },
564         [TCA_FLOWER_KEY_ENC_IP_TTL]      = { .type = NLA_U8 },
565         [TCA_FLOWER_KEY_ENC_IP_TTL_MASK] = { .type = NLA_U8 },
566         [TCA_FLOWER_KEY_ENC_OPTS]       = { .type = NLA_NESTED },
567         [TCA_FLOWER_KEY_ENC_OPTS_MASK]  = { .type = NLA_NESTED },
568 };
569
570 static const struct nla_policy
571 enc_opts_policy[TCA_FLOWER_KEY_ENC_OPTS_MAX + 1] = {
572         [TCA_FLOWER_KEY_ENC_OPTS_GENEVE]        = { .type = NLA_NESTED },
573 };
574
575 static const struct nla_policy
576 geneve_opt_policy[TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX + 1] = {
577         [TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS]      = { .type = NLA_U16 },
578         [TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE]       = { .type = NLA_U8 },
579         [TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA]       = { .type = NLA_BINARY,
580                                                        .len = 128 },
581 };
582
583 static void fl_set_key_val(struct nlattr **tb,
584                            void *val, int val_type,
585                            void *mask, int mask_type, int len)
586 {
587         if (!tb[val_type])
588                 return;
589         memcpy(val, nla_data(tb[val_type]), len);
590         if (mask_type == TCA_FLOWER_UNSPEC || !tb[mask_type])
591                 memset(mask, 0xff, len);
592         else
593                 memcpy(mask, nla_data(tb[mask_type]), len);
594 }
595
596 static int fl_set_key_port_range(struct nlattr **tb, struct fl_flow_key *key,
597                                  struct fl_flow_key *mask)
598 {
599         fl_set_key_val(tb, &key->tp_min.dst,
600                        TCA_FLOWER_KEY_PORT_DST_MIN, &mask->tp_min.dst,
601                        TCA_FLOWER_UNSPEC, sizeof(key->tp_min.dst));
602         fl_set_key_val(tb, &key->tp_max.dst,
603                        TCA_FLOWER_KEY_PORT_DST_MAX, &mask->tp_max.dst,
604                        TCA_FLOWER_UNSPEC, sizeof(key->tp_max.dst));
605         fl_set_key_val(tb, &key->tp_min.src,
606                        TCA_FLOWER_KEY_PORT_SRC_MIN, &mask->tp_min.src,
607                        TCA_FLOWER_UNSPEC, sizeof(key->tp_min.src));
608         fl_set_key_val(tb, &key->tp_max.src,
609                        TCA_FLOWER_KEY_PORT_SRC_MAX, &mask->tp_max.src,
610                        TCA_FLOWER_UNSPEC, sizeof(key->tp_max.src));
611
612         if ((mask->tp_min.dst && mask->tp_max.dst &&
613              htons(key->tp_max.dst) <= htons(key->tp_min.dst)) ||
614              (mask->tp_min.src && mask->tp_max.src &&
615               htons(key->tp_max.src) <= htons(key->tp_min.src)))
616                 return -EINVAL;
617
618         return 0;
619 }
620
621 static int fl_set_key_mpls(struct nlattr **tb,
622                            struct flow_dissector_key_mpls *key_val,
623                            struct flow_dissector_key_mpls *key_mask)
624 {
625         if (tb[TCA_FLOWER_KEY_MPLS_TTL]) {
626                 key_val->mpls_ttl = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TTL]);
627                 key_mask->mpls_ttl = MPLS_TTL_MASK;
628         }
629         if (tb[TCA_FLOWER_KEY_MPLS_BOS]) {
630                 u8 bos = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_BOS]);
631
632                 if (bos & ~MPLS_BOS_MASK)
633                         return -EINVAL;
634                 key_val->mpls_bos = bos;
635                 key_mask->mpls_bos = MPLS_BOS_MASK;
636         }
637         if (tb[TCA_FLOWER_KEY_MPLS_TC]) {
638                 u8 tc = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TC]);
639
640                 if (tc & ~MPLS_TC_MASK)
641                         return -EINVAL;
642                 key_val->mpls_tc = tc;
643                 key_mask->mpls_tc = MPLS_TC_MASK;
644         }
645         if (tb[TCA_FLOWER_KEY_MPLS_LABEL]) {
646                 u32 label = nla_get_u32(tb[TCA_FLOWER_KEY_MPLS_LABEL]);
647
648                 if (label & ~MPLS_LABEL_MASK)
649                         return -EINVAL;
650                 key_val->mpls_label = label;
651                 key_mask->mpls_label = MPLS_LABEL_MASK;
652         }
653         return 0;
654 }
655
656 static void fl_set_key_vlan(struct nlattr **tb,
657                             __be16 ethertype,
658                             int vlan_id_key, int vlan_prio_key,
659                             struct flow_dissector_key_vlan *key_val,
660                             struct flow_dissector_key_vlan *key_mask)
661 {
662 #define VLAN_PRIORITY_MASK      0x7
663
664         if (tb[vlan_id_key]) {
665                 key_val->vlan_id =
666                         nla_get_u16(tb[vlan_id_key]) & VLAN_VID_MASK;
667                 key_mask->vlan_id = VLAN_VID_MASK;
668         }
669         if (tb[vlan_prio_key]) {
670                 key_val->vlan_priority =
671                         nla_get_u8(tb[vlan_prio_key]) &
672                         VLAN_PRIORITY_MASK;
673                 key_mask->vlan_priority = VLAN_PRIORITY_MASK;
674         }
675         key_val->vlan_tpid = ethertype;
676         key_mask->vlan_tpid = cpu_to_be16(~0);
677 }
678
679 static void fl_set_key_flag(u32 flower_key, u32 flower_mask,
680                             u32 *dissector_key, u32 *dissector_mask,
681                             u32 flower_flag_bit, u32 dissector_flag_bit)
682 {
683         if (flower_mask & flower_flag_bit) {
684                 *dissector_mask |= dissector_flag_bit;
685                 if (flower_key & flower_flag_bit)
686                         *dissector_key |= dissector_flag_bit;
687         }
688 }
689
690 static int fl_set_key_flags(struct nlattr **tb,
691                             u32 *flags_key, u32 *flags_mask)
692 {
693         u32 key, mask;
694
695         /* mask is mandatory for flags */
696         if (!tb[TCA_FLOWER_KEY_FLAGS_MASK])
697                 return -EINVAL;
698
699         key = be32_to_cpu(nla_get_u32(tb[TCA_FLOWER_KEY_FLAGS]));
700         mask = be32_to_cpu(nla_get_u32(tb[TCA_FLOWER_KEY_FLAGS_MASK]));
701
702         *flags_key  = 0;
703         *flags_mask = 0;
704
705         fl_set_key_flag(key, mask, flags_key, flags_mask,
706                         TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT, FLOW_DIS_IS_FRAGMENT);
707         fl_set_key_flag(key, mask, flags_key, flags_mask,
708                         TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST,
709                         FLOW_DIS_FIRST_FRAG);
710
711         return 0;
712 }
713
714 static void fl_set_key_ip(struct nlattr **tb, bool encap,
715                           struct flow_dissector_key_ip *key,
716                           struct flow_dissector_key_ip *mask)
717 {
718         int tos_key = encap ? TCA_FLOWER_KEY_ENC_IP_TOS : TCA_FLOWER_KEY_IP_TOS;
719         int ttl_key = encap ? TCA_FLOWER_KEY_ENC_IP_TTL : TCA_FLOWER_KEY_IP_TTL;
720         int tos_mask = encap ? TCA_FLOWER_KEY_ENC_IP_TOS_MASK : TCA_FLOWER_KEY_IP_TOS_MASK;
721         int ttl_mask = encap ? TCA_FLOWER_KEY_ENC_IP_TTL_MASK : TCA_FLOWER_KEY_IP_TTL_MASK;
722
723         fl_set_key_val(tb, &key->tos, tos_key, &mask->tos, tos_mask, sizeof(key->tos));
724         fl_set_key_val(tb, &key->ttl, ttl_key, &mask->ttl, ttl_mask, sizeof(key->ttl));
725 }
726
727 static int fl_set_geneve_opt(const struct nlattr *nla, struct fl_flow_key *key,
728                              int depth, int option_len,
729                              struct netlink_ext_ack *extack)
730 {
731         struct nlattr *tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX + 1];
732         struct nlattr *class = NULL, *type = NULL, *data = NULL;
733         struct geneve_opt *opt;
734         int err, data_len = 0;
735
736         if (option_len > sizeof(struct geneve_opt))
737                 data_len = option_len - sizeof(struct geneve_opt);
738
739         opt = (struct geneve_opt *)&key->enc_opts.data[key->enc_opts.len];
740         memset(opt, 0xff, option_len);
741         opt->length = data_len / 4;
742         opt->r1 = 0;
743         opt->r2 = 0;
744         opt->r3 = 0;
745
746         /* If no mask has been prodived we assume an exact match. */
747         if (!depth)
748                 return sizeof(struct geneve_opt) + data_len;
749
750         if (nla_type(nla) != TCA_FLOWER_KEY_ENC_OPTS_GENEVE) {
751                 NL_SET_ERR_MSG(extack, "Non-geneve option type for mask");
752                 return -EINVAL;
753         }
754
755         err = nla_parse_nested(tb, TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX,
756                                nla, geneve_opt_policy, extack);
757         if (err < 0)
758                 return err;
759
760         /* We are not allowed to omit any of CLASS, TYPE or DATA
761          * fields from the key.
762          */
763         if (!option_len &&
764             (!tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS] ||
765              !tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE] ||
766              !tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA])) {
767                 NL_SET_ERR_MSG(extack, "Missing tunnel key geneve option class, type or data");
768                 return -EINVAL;
769         }
770
771         /* Omitting any of CLASS, TYPE or DATA fields is allowed
772          * for the mask.
773          */
774         if (tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA]) {
775                 int new_len = key->enc_opts.len;
776
777                 data = tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA];
778                 data_len = nla_len(data);
779                 if (data_len < 4) {
780                         NL_SET_ERR_MSG(extack, "Tunnel key geneve option data is less than 4 bytes long");
781                         return -ERANGE;
782                 }
783                 if (data_len % 4) {
784                         NL_SET_ERR_MSG(extack, "Tunnel key geneve option data is not a multiple of 4 bytes long");
785                         return -ERANGE;
786                 }
787
788                 new_len += sizeof(struct geneve_opt) + data_len;
789                 BUILD_BUG_ON(FLOW_DIS_TUN_OPTS_MAX != IP_TUNNEL_OPTS_MAX);
790                 if (new_len > FLOW_DIS_TUN_OPTS_MAX) {
791                         NL_SET_ERR_MSG(extack, "Tunnel options exceeds max size");
792                         return -ERANGE;
793                 }
794                 opt->length = data_len / 4;
795                 memcpy(opt->opt_data, nla_data(data), data_len);
796         }
797
798         if (tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS]) {
799                 class = tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS];
800                 opt->opt_class = nla_get_be16(class);
801         }
802
803         if (tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE]) {
804                 type = tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE];
805                 opt->type = nla_get_u8(type);
806         }
807
808         return sizeof(struct geneve_opt) + data_len;
809 }
810
811 static int fl_set_enc_opt(struct nlattr **tb, struct fl_flow_key *key,
812                           struct fl_flow_key *mask,
813                           struct netlink_ext_ack *extack)
814 {
815         const struct nlattr *nla_enc_key, *nla_opt_key, *nla_opt_msk = NULL;
816         int err, option_len, key_depth, msk_depth = 0;
817
818         err = nla_validate_nested(tb[TCA_FLOWER_KEY_ENC_OPTS],
819                                   TCA_FLOWER_KEY_ENC_OPTS_MAX,
820                                   enc_opts_policy, extack);
821         if (err)
822                 return err;
823
824         nla_enc_key = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS]);
825
826         if (tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]) {
827                 err = nla_validate_nested(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK],
828                                           TCA_FLOWER_KEY_ENC_OPTS_MAX,
829                                           enc_opts_policy, extack);
830                 if (err)
831                         return err;
832
833                 nla_opt_msk = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]);
834                 msk_depth = nla_len(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]);
835         }
836
837         nla_for_each_attr(nla_opt_key, nla_enc_key,
838                           nla_len(tb[TCA_FLOWER_KEY_ENC_OPTS]), key_depth) {
839                 switch (nla_type(nla_opt_key)) {
840                 case TCA_FLOWER_KEY_ENC_OPTS_GENEVE:
841                         option_len = 0;
842                         key->enc_opts.dst_opt_type = TUNNEL_GENEVE_OPT;
843                         option_len = fl_set_geneve_opt(nla_opt_key, key,
844                                                        key_depth, option_len,
845                                                        extack);
846                         if (option_len < 0)
847                                 return option_len;
848
849                         key->enc_opts.len += option_len;
850                         /* At the same time we need to parse through the mask
851                          * in order to verify exact and mask attribute lengths.
852                          */
853                         mask->enc_opts.dst_opt_type = TUNNEL_GENEVE_OPT;
854                         option_len = fl_set_geneve_opt(nla_opt_msk, mask,
855                                                        msk_depth, option_len,
856                                                        extack);
857                         if (option_len < 0)
858                                 return option_len;
859
860                         mask->enc_opts.len += option_len;
861                         if (key->enc_opts.len != mask->enc_opts.len) {
862                                 NL_SET_ERR_MSG(extack, "Key and mask miss aligned");
863                                 return -EINVAL;
864                         }
865
866                         if (msk_depth)
867                                 nla_opt_msk = nla_next(nla_opt_msk, &msk_depth);
868                         break;
869                 default:
870                         NL_SET_ERR_MSG(extack, "Unknown tunnel option type");
871                         return -EINVAL;
872                 }
873         }
874
875         return 0;
876 }
877
878 static int fl_set_key(struct net *net, struct nlattr **tb,
879                       struct fl_flow_key *key, struct fl_flow_key *mask,
880                       struct netlink_ext_ack *extack)
881 {
882         __be16 ethertype;
883         int ret = 0;
884 #ifdef CONFIG_NET_CLS_IND
885         if (tb[TCA_FLOWER_INDEV]) {
886                 int err = tcf_change_indev(net, tb[TCA_FLOWER_INDEV], extack);
887                 if (err < 0)
888                         return err;
889                 key->indev_ifindex = err;
890                 mask->indev_ifindex = 0xffffffff;
891         }
892 #endif
893
894         fl_set_key_val(tb, key->eth.dst, TCA_FLOWER_KEY_ETH_DST,
895                        mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK,
896                        sizeof(key->eth.dst));
897         fl_set_key_val(tb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC,
898                        mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK,
899                        sizeof(key->eth.src));
900
901         if (tb[TCA_FLOWER_KEY_ETH_TYPE]) {
902                 ethertype = nla_get_be16(tb[TCA_FLOWER_KEY_ETH_TYPE]);
903
904                 if (eth_type_vlan(ethertype)) {
905                         fl_set_key_vlan(tb, ethertype, TCA_FLOWER_KEY_VLAN_ID,
906                                         TCA_FLOWER_KEY_VLAN_PRIO, &key->vlan,
907                                         &mask->vlan);
908
909                         if (tb[TCA_FLOWER_KEY_VLAN_ETH_TYPE]) {
910                                 ethertype = nla_get_be16(tb[TCA_FLOWER_KEY_VLAN_ETH_TYPE]);
911                                 if (eth_type_vlan(ethertype)) {
912                                         fl_set_key_vlan(tb, ethertype,
913                                                         TCA_FLOWER_KEY_CVLAN_ID,
914                                                         TCA_FLOWER_KEY_CVLAN_PRIO,
915                                                         &key->cvlan, &mask->cvlan);
916                                         fl_set_key_val(tb, &key->basic.n_proto,
917                                                        TCA_FLOWER_KEY_CVLAN_ETH_TYPE,
918                                                        &mask->basic.n_proto,
919                                                        TCA_FLOWER_UNSPEC,
920                                                        sizeof(key->basic.n_proto));
921                                 } else {
922                                         key->basic.n_proto = ethertype;
923                                         mask->basic.n_proto = cpu_to_be16(~0);
924                                 }
925                         }
926                 } else {
927                         key->basic.n_proto = ethertype;
928                         mask->basic.n_proto = cpu_to_be16(~0);
929                 }
930         }
931
932         if (key->basic.n_proto == htons(ETH_P_IP) ||
933             key->basic.n_proto == htons(ETH_P_IPV6)) {
934                 fl_set_key_val(tb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO,
935                                &mask->basic.ip_proto, TCA_FLOWER_UNSPEC,
936                                sizeof(key->basic.ip_proto));
937                 fl_set_key_ip(tb, false, &key->ip, &mask->ip);
938         }
939
940         if (tb[TCA_FLOWER_KEY_IPV4_SRC] || tb[TCA_FLOWER_KEY_IPV4_DST]) {
941                 key->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
942                 mask->control.addr_type = ~0;
943                 fl_set_key_val(tb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
944                                &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
945                                sizeof(key->ipv4.src));
946                 fl_set_key_val(tb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST,
947                                &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK,
948                                sizeof(key->ipv4.dst));
949         } else if (tb[TCA_FLOWER_KEY_IPV6_SRC] || tb[TCA_FLOWER_KEY_IPV6_DST]) {
950                 key->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
951                 mask->control.addr_type = ~0;
952                 fl_set_key_val(tb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
953                                &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
954                                sizeof(key->ipv6.src));
955                 fl_set_key_val(tb, &key->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST,
956                                &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK,
957                                sizeof(key->ipv6.dst));
958         }
959
960         if (key->basic.ip_proto == IPPROTO_TCP) {
961                 fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC,
962                                &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK,
963                                sizeof(key->tp.src));
964                 fl_set_key_val(tb, &key->tp.dst, TCA_FLOWER_KEY_TCP_DST,
965                                &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK,
966                                sizeof(key->tp.dst));
967                 fl_set_key_val(tb, &key->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS,
968                                &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK,
969                                sizeof(key->tcp.flags));
970         } else if (key->basic.ip_proto == IPPROTO_UDP) {
971                 fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_UDP_SRC,
972                                &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK,
973                                sizeof(key->tp.src));
974                 fl_set_key_val(tb, &key->tp.dst, TCA_FLOWER_KEY_UDP_DST,
975                                &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK,
976                                sizeof(key->tp.dst));
977         } else if (key->basic.ip_proto == IPPROTO_SCTP) {
978                 fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_SCTP_SRC,
979                                &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK,
980                                sizeof(key->tp.src));
981                 fl_set_key_val(tb, &key->tp.dst, TCA_FLOWER_KEY_SCTP_DST,
982                                &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK,
983                                sizeof(key->tp.dst));
984         } else if (key->basic.n_proto == htons(ETH_P_IP) &&
985                    key->basic.ip_proto == IPPROTO_ICMP) {
986                 fl_set_key_val(tb, &key->icmp.type, TCA_FLOWER_KEY_ICMPV4_TYPE,
987                                &mask->icmp.type,
988                                TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,
989                                sizeof(key->icmp.type));
990                 fl_set_key_val(tb, &key->icmp.code, TCA_FLOWER_KEY_ICMPV4_CODE,
991                                &mask->icmp.code,
992                                TCA_FLOWER_KEY_ICMPV4_CODE_MASK,
993                                sizeof(key->icmp.code));
994         } else if (key->basic.n_proto == htons(ETH_P_IPV6) &&
995                    key->basic.ip_proto == IPPROTO_ICMPV6) {
996                 fl_set_key_val(tb, &key->icmp.type, TCA_FLOWER_KEY_ICMPV6_TYPE,
997                                &mask->icmp.type,
998                                TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,
999                                sizeof(key->icmp.type));
1000                 fl_set_key_val(tb, &key->icmp.code, TCA_FLOWER_KEY_ICMPV6_CODE,
1001                                &mask->icmp.code,
1002                                TCA_FLOWER_KEY_ICMPV6_CODE_MASK,
1003                                sizeof(key->icmp.code));
1004         } else if (key->basic.n_proto == htons(ETH_P_MPLS_UC) ||
1005                    key->basic.n_proto == htons(ETH_P_MPLS_MC)) {
1006                 ret = fl_set_key_mpls(tb, &key->mpls, &mask->mpls);
1007                 if (ret)
1008                         return ret;
1009         } else if (key->basic.n_proto == htons(ETH_P_ARP) ||
1010                    key->basic.n_proto == htons(ETH_P_RARP)) {
1011                 fl_set_key_val(tb, &key->arp.sip, TCA_FLOWER_KEY_ARP_SIP,
1012                                &mask->arp.sip, TCA_FLOWER_KEY_ARP_SIP_MASK,
1013                                sizeof(key->arp.sip));
1014                 fl_set_key_val(tb, &key->arp.tip, TCA_FLOWER_KEY_ARP_TIP,
1015                                &mask->arp.tip, TCA_FLOWER_KEY_ARP_TIP_MASK,
1016                                sizeof(key->arp.tip));
1017                 fl_set_key_val(tb, &key->arp.op, TCA_FLOWER_KEY_ARP_OP,
1018                                &mask->arp.op, TCA_FLOWER_KEY_ARP_OP_MASK,
1019                                sizeof(key->arp.op));
1020                 fl_set_key_val(tb, key->arp.sha, TCA_FLOWER_KEY_ARP_SHA,
1021                                mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK,
1022                                sizeof(key->arp.sha));
1023                 fl_set_key_val(tb, key->arp.tha, TCA_FLOWER_KEY_ARP_THA,
1024                                mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK,
1025                                sizeof(key->arp.tha));
1026         }
1027
1028         if (key->basic.ip_proto == IPPROTO_TCP ||
1029             key->basic.ip_proto == IPPROTO_UDP ||
1030             key->basic.ip_proto == IPPROTO_SCTP) {
1031                 ret = fl_set_key_port_range(tb, key, mask);
1032                 if (ret)
1033                         return ret;
1034         }
1035
1036         if (tb[TCA_FLOWER_KEY_ENC_IPV4_SRC] ||
1037             tb[TCA_FLOWER_KEY_ENC_IPV4_DST]) {
1038                 key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
1039                 mask->enc_control.addr_type = ~0;
1040                 fl_set_key_val(tb, &key->enc_ipv4.src,
1041                                TCA_FLOWER_KEY_ENC_IPV4_SRC,
1042                                &mask->enc_ipv4.src,
1043                                TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,
1044                                sizeof(key->enc_ipv4.src));
1045                 fl_set_key_val(tb, &key->enc_ipv4.dst,
1046                                TCA_FLOWER_KEY_ENC_IPV4_DST,
1047                                &mask->enc_ipv4.dst,
1048                                TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,
1049                                sizeof(key->enc_ipv4.dst));
1050         }
1051
1052         if (tb[TCA_FLOWER_KEY_ENC_IPV6_SRC] ||
1053             tb[TCA_FLOWER_KEY_ENC_IPV6_DST]) {
1054                 key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
1055                 mask->enc_control.addr_type = ~0;
1056                 fl_set_key_val(tb, &key->enc_ipv6.src,
1057                                TCA_FLOWER_KEY_ENC_IPV6_SRC,
1058                                &mask->enc_ipv6.src,
1059                                TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,
1060                                sizeof(key->enc_ipv6.src));
1061                 fl_set_key_val(tb, &key->enc_ipv6.dst,
1062                                TCA_FLOWER_KEY_ENC_IPV6_DST,
1063                                &mask->enc_ipv6.dst,
1064                                TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,
1065                                sizeof(key->enc_ipv6.dst));
1066         }
1067
1068         fl_set_key_val(tb, &key->enc_key_id.keyid, TCA_FLOWER_KEY_ENC_KEY_ID,
1069                        &mask->enc_key_id.keyid, TCA_FLOWER_UNSPEC,
1070                        sizeof(key->enc_key_id.keyid));
1071
1072         fl_set_key_val(tb, &key->enc_tp.src, TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,
1073                        &mask->enc_tp.src, TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,
1074                        sizeof(key->enc_tp.src));
1075
1076         fl_set_key_val(tb, &key->enc_tp.dst, TCA_FLOWER_KEY_ENC_UDP_DST_PORT,
1077                        &mask->enc_tp.dst, TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,
1078                        sizeof(key->enc_tp.dst));
1079
1080         fl_set_key_ip(tb, true, &key->enc_ip, &mask->enc_ip);
1081
1082         if (tb[TCA_FLOWER_KEY_ENC_OPTS]) {
1083                 ret = fl_set_enc_opt(tb, key, mask, extack);
1084                 if (ret)
1085                         return ret;
1086         }
1087
1088         if (tb[TCA_FLOWER_KEY_FLAGS])
1089                 ret = fl_set_key_flags(tb, &key->control.flags, &mask->control.flags);
1090
1091         return ret;
1092 }
1093
1094 static void fl_mask_copy(struct fl_flow_mask *dst,
1095                          struct fl_flow_mask *src)
1096 {
1097         const void *psrc = fl_key_get_start(&src->key, src);
1098         void *pdst = fl_key_get_start(&dst->key, src);
1099
1100         memcpy(pdst, psrc, fl_mask_range(src));
1101         dst->range = src->range;
1102 }
1103
1104 static const struct rhashtable_params fl_ht_params = {
1105         .key_offset = offsetof(struct cls_fl_filter, mkey), /* base offset */
1106         .head_offset = offsetof(struct cls_fl_filter, ht_node),
1107         .automatic_shrinking = true,
1108 };
1109
1110 static int fl_init_mask_hashtable(struct fl_flow_mask *mask)
1111 {
1112         mask->filter_ht_params = fl_ht_params;
1113         mask->filter_ht_params.key_len = fl_mask_range(mask);
1114         mask->filter_ht_params.key_offset += mask->range.start;
1115
1116         return rhashtable_init(&mask->ht, &mask->filter_ht_params);
1117 }
1118
1119 #define FL_KEY_MEMBER_OFFSET(member) offsetof(struct fl_flow_key, member)
1120 #define FL_KEY_MEMBER_SIZE(member) FIELD_SIZEOF(struct fl_flow_key, member)
1121
1122 #define FL_KEY_IS_MASKED(mask, member)                                          \
1123         memchr_inv(((char *)mask) + FL_KEY_MEMBER_OFFSET(member),               \
1124                    0, FL_KEY_MEMBER_SIZE(member))                               \
1125
1126 #define FL_KEY_SET(keys, cnt, id, member)                                       \
1127         do {                                                                    \
1128                 keys[cnt].key_id = id;                                          \
1129                 keys[cnt].offset = FL_KEY_MEMBER_OFFSET(member);                \
1130                 cnt++;                                                          \
1131         } while(0);
1132
1133 #define FL_KEY_SET_IF_MASKED(mask, keys, cnt, id, member)                       \
1134         do {                                                                    \
1135                 if (FL_KEY_IS_MASKED(mask, member))                             \
1136                         FL_KEY_SET(keys, cnt, id, member);                      \
1137         } while(0);
1138
1139 static void fl_init_dissector(struct flow_dissector *dissector,
1140                               struct fl_flow_key *mask)
1141 {
1142         struct flow_dissector_key keys[FLOW_DISSECTOR_KEY_MAX];
1143         size_t cnt = 0;
1144
1145         FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_CONTROL, control);
1146         FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_BASIC, basic);
1147         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1148                              FLOW_DISSECTOR_KEY_ETH_ADDRS, eth);
1149         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1150                              FLOW_DISSECTOR_KEY_IPV4_ADDRS, ipv4);
1151         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1152                              FLOW_DISSECTOR_KEY_IPV6_ADDRS, ipv6);
1153         if (FL_KEY_IS_MASKED(mask, tp) ||
1154             FL_KEY_IS_MASKED(mask, tp_min) || FL_KEY_IS_MASKED(mask, tp_max))
1155                 FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_PORTS, tp);
1156         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1157                              FLOW_DISSECTOR_KEY_IP, ip);
1158         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1159                              FLOW_DISSECTOR_KEY_TCP, tcp);
1160         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1161                              FLOW_DISSECTOR_KEY_ICMP, icmp);
1162         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1163                              FLOW_DISSECTOR_KEY_ARP, arp);
1164         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1165                              FLOW_DISSECTOR_KEY_MPLS, mpls);
1166         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1167                              FLOW_DISSECTOR_KEY_VLAN, vlan);
1168         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1169                              FLOW_DISSECTOR_KEY_CVLAN, cvlan);
1170         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1171                              FLOW_DISSECTOR_KEY_ENC_KEYID, enc_key_id);
1172         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1173                              FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS, enc_ipv4);
1174         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1175                              FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS, enc_ipv6);
1176         if (FL_KEY_IS_MASKED(mask, enc_ipv4) ||
1177             FL_KEY_IS_MASKED(mask, enc_ipv6))
1178                 FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_ENC_CONTROL,
1179                            enc_control);
1180         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1181                              FLOW_DISSECTOR_KEY_ENC_PORTS, enc_tp);
1182         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1183                              FLOW_DISSECTOR_KEY_ENC_IP, enc_ip);
1184         FL_KEY_SET_IF_MASKED(mask, keys, cnt,
1185                              FLOW_DISSECTOR_KEY_ENC_OPTS, enc_opts);
1186
1187         skb_flow_dissector_init(dissector, keys, cnt);
1188 }
1189
1190 static struct fl_flow_mask *fl_create_new_mask(struct cls_fl_head *head,
1191                                                struct fl_flow_mask *mask)
1192 {
1193         struct fl_flow_mask *newmask;
1194         int err;
1195
1196         newmask = kzalloc(sizeof(*newmask), GFP_KERNEL);
1197         if (!newmask)
1198                 return ERR_PTR(-ENOMEM);
1199
1200         fl_mask_copy(newmask, mask);
1201
1202         if ((newmask->key.tp_min.dst && newmask->key.tp_max.dst) ||
1203             (newmask->key.tp_min.src && newmask->key.tp_max.src))
1204                 newmask->flags |= TCA_FLOWER_MASK_FLAGS_RANGE;
1205
1206         err = fl_init_mask_hashtable(newmask);
1207         if (err)
1208                 goto errout_free;
1209
1210         fl_init_dissector(&newmask->dissector, &newmask->key);
1211
1212         INIT_LIST_HEAD_RCU(&newmask->filters);
1213
1214         err = rhashtable_insert_fast(&head->ht, &newmask->ht_node,
1215                                      mask_ht_params);
1216         if (err)
1217                 goto errout_destroy;
1218
1219         list_add_tail_rcu(&newmask->list, &head->masks);
1220
1221         return newmask;
1222
1223 errout_destroy:
1224         rhashtable_destroy(&newmask->ht);
1225 errout_free:
1226         kfree(newmask);
1227
1228         return ERR_PTR(err);
1229 }
1230
1231 static int fl_check_assign_mask(struct cls_fl_head *head,
1232                                 struct cls_fl_filter *fnew,
1233                                 struct cls_fl_filter *fold,
1234                                 struct fl_flow_mask *mask)
1235 {
1236         struct fl_flow_mask *newmask;
1237
1238         fnew->mask = rhashtable_lookup_fast(&head->ht, mask, mask_ht_params);
1239         if (!fnew->mask) {
1240                 if (fold)
1241                         return -EINVAL;
1242
1243                 newmask = fl_create_new_mask(head, mask);
1244                 if (IS_ERR(newmask))
1245                         return PTR_ERR(newmask);
1246
1247                 fnew->mask = newmask;
1248         } else if (fold && fold->mask != fnew->mask) {
1249                 return -EINVAL;
1250         }
1251
1252         return 0;
1253 }
1254
1255 static int fl_set_parms(struct net *net, struct tcf_proto *tp,
1256                         struct cls_fl_filter *f, struct fl_flow_mask *mask,
1257                         unsigned long base, struct nlattr **tb,
1258                         struct nlattr *est, bool ovr,
1259                         struct fl_flow_tmplt *tmplt,
1260                         struct netlink_ext_ack *extack)
1261 {
1262         int err;
1263
1264         err = tcf_exts_validate(net, tp, tb, est, &f->exts, ovr, extack);
1265         if (err < 0)
1266                 return err;
1267
1268         if (tb[TCA_FLOWER_CLASSID]) {
1269                 f->res.classid = nla_get_u32(tb[TCA_FLOWER_CLASSID]);
1270                 tcf_bind_filter(tp, &f->res, base);
1271         }
1272
1273         err = fl_set_key(net, tb, &f->key, &mask->key, extack);
1274         if (err)
1275                 return err;
1276
1277         fl_mask_update_range(mask);
1278         fl_set_masked_key(&f->mkey, &f->key, mask);
1279
1280         if (!fl_mask_fits_tmplt(tmplt, mask)) {
1281                 NL_SET_ERR_MSG_MOD(extack, "Mask does not fit the template");
1282                 return -EINVAL;
1283         }
1284
1285         return 0;
1286 }
1287
1288 static int fl_change(struct net *net, struct sk_buff *in_skb,
1289                      struct tcf_proto *tp, unsigned long base,
1290                      u32 handle, struct nlattr **tca,
1291                      void **arg, bool ovr, struct netlink_ext_ack *extack)
1292 {
1293         struct cls_fl_head *head = rtnl_dereference(tp->root);
1294         struct cls_fl_filter *fold = *arg;
1295         struct cls_fl_filter *fnew;
1296         struct nlattr **tb;
1297         struct fl_flow_mask mask = {};
1298         int err;
1299
1300         if (!tca[TCA_OPTIONS])
1301                 return -EINVAL;
1302
1303         tb = kcalloc(TCA_FLOWER_MAX + 1, sizeof(struct nlattr *), GFP_KERNEL);
1304         if (!tb)
1305                 return -ENOBUFS;
1306
1307         err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS],
1308                                fl_policy, NULL);
1309         if (err < 0)
1310                 goto errout_tb;
1311
1312         if (fold && handle && fold->handle != handle) {
1313                 err = -EINVAL;
1314                 goto errout_tb;
1315         }
1316
1317         fnew = kzalloc(sizeof(*fnew), GFP_KERNEL);
1318         if (!fnew) {
1319                 err = -ENOBUFS;
1320                 goto errout_tb;
1321         }
1322
1323         err = tcf_exts_init(&fnew->exts, TCA_FLOWER_ACT, 0);
1324         if (err < 0)
1325                 goto errout;
1326
1327         if (!handle) {
1328                 handle = 1;
1329                 err = idr_alloc_u32(&head->handle_idr, fnew, &handle,
1330                                     INT_MAX, GFP_KERNEL);
1331         } else if (!fold) {
1332                 /* user specifies a handle and it doesn't exist */
1333                 err = idr_alloc_u32(&head->handle_idr, fnew, &handle,
1334                                     handle, GFP_KERNEL);
1335         }
1336         if (err)
1337                 goto errout;
1338         fnew->handle = handle;
1339
1340         if (tb[TCA_FLOWER_FLAGS]) {
1341                 fnew->flags = nla_get_u32(tb[TCA_FLOWER_FLAGS]);
1342
1343                 if (!tc_flags_valid(fnew->flags)) {
1344                         err = -EINVAL;
1345                         goto errout_idr;
1346                 }
1347         }
1348
1349         err = fl_set_parms(net, tp, fnew, &mask, base, tb, tca[TCA_RATE], ovr,
1350                            tp->chain->tmplt_priv, extack);
1351         if (err)
1352                 goto errout_idr;
1353
1354         err = fl_check_assign_mask(head, fnew, fold, &mask);
1355         if (err)
1356                 goto errout_idr;
1357
1358         if (!tc_skip_sw(fnew->flags)) {
1359                 if (!fold && __fl_lookup(fnew->mask, &fnew->mkey)) {
1360                         err = -EEXIST;
1361                         goto errout_mask;
1362                 }
1363
1364                 err = rhashtable_insert_fast(&fnew->mask->ht, &fnew->ht_node,
1365                                              fnew->mask->filter_ht_params);
1366                 if (err)
1367                         goto errout_mask;
1368         }
1369
1370         if (!tc_skip_hw(fnew->flags)) {
1371                 err = fl_hw_replace_filter(tp, fnew, extack);
1372                 if (err)
1373                         goto errout_mask;
1374         }
1375
1376         if (!tc_in_hw(fnew->flags))
1377                 fnew->flags |= TCA_CLS_FLAGS_NOT_IN_HW;
1378
1379         if (fold) {
1380                 if (!tc_skip_sw(fold->flags))
1381                         rhashtable_remove_fast(&fold->mask->ht,
1382                                                &fold->ht_node,
1383                                                fold->mask->filter_ht_params);
1384                 if (!tc_skip_hw(fold->flags))
1385                         fl_hw_destroy_filter(tp, fold, NULL);
1386         }
1387
1388         *arg = fnew;
1389
1390         if (fold) {
1391                 idr_replace(&head->handle_idr, fnew, fnew->handle);
1392                 list_replace_rcu(&fold->list, &fnew->list);
1393                 tcf_unbind_filter(tp, &fold->res);
1394                 tcf_exts_get_net(&fold->exts);
1395                 tcf_queue_work(&fold->rwork, fl_destroy_filter_work);
1396         } else {
1397                 list_add_tail_rcu(&fnew->list, &fnew->mask->filters);
1398         }
1399
1400         kfree(tb);
1401         return 0;
1402
1403 errout_mask:
1404         fl_mask_put(head, fnew->mask, false);
1405
1406 errout_idr:
1407         if (!fold)
1408                 idr_remove(&head->handle_idr, fnew->handle);
1409 errout:
1410         tcf_exts_destroy(&fnew->exts);
1411         kfree(fnew);
1412 errout_tb:
1413         kfree(tb);
1414         return err;
1415 }
1416
1417 static int fl_delete(struct tcf_proto *tp, void *arg, bool *last,
1418                      struct netlink_ext_ack *extack)
1419 {
1420         struct cls_fl_head *head = rtnl_dereference(tp->root);
1421         struct cls_fl_filter *f = arg;
1422
1423         if (!tc_skip_sw(f->flags))
1424                 rhashtable_remove_fast(&f->mask->ht, &f->ht_node,
1425                                        f->mask->filter_ht_params);
1426         __fl_delete(tp, f, extack);
1427         *last = list_empty(&head->masks);
1428         return 0;
1429 }
1430
1431 static void fl_walk(struct tcf_proto *tp, struct tcf_walker *arg)
1432 {
1433         struct cls_fl_head *head = rtnl_dereference(tp->root);
1434         struct cls_fl_filter *f;
1435
1436         arg->count = arg->skip;
1437
1438         while ((f = idr_get_next_ul(&head->handle_idr,
1439                                     &arg->cookie)) != NULL) {
1440                 if (arg->fn(tp, f, arg) < 0) {
1441                         arg->stop = 1;
1442                         break;
1443                 }
1444                 arg->cookie = f->handle + 1;
1445                 arg->count++;
1446         }
1447 }
1448
1449 static int fl_reoffload(struct tcf_proto *tp, bool add, tc_setup_cb_t *cb,
1450                         void *cb_priv, struct netlink_ext_ack *extack)
1451 {
1452         struct cls_fl_head *head = rtnl_dereference(tp->root);
1453         struct tc_cls_flower_offload cls_flower = {};
1454         struct tcf_block *block = tp->chain->block;
1455         struct fl_flow_mask *mask;
1456         struct cls_fl_filter *f;
1457         int err;
1458
1459         list_for_each_entry(mask, &head->masks, list) {
1460                 list_for_each_entry(f, &mask->filters, list) {
1461                         if (tc_skip_hw(f->flags))
1462                                 continue;
1463
1464                         tc_cls_common_offload_init(&cls_flower.common, tp,
1465                                                    f->flags, extack);
1466                         cls_flower.command = add ?
1467                                 TC_CLSFLOWER_REPLACE : TC_CLSFLOWER_DESTROY;
1468                         cls_flower.cookie = (unsigned long)f;
1469                         cls_flower.dissector = &mask->dissector;
1470                         cls_flower.mask = &mask->key;
1471                         cls_flower.key = &f->mkey;
1472                         cls_flower.exts = &f->exts;
1473                         cls_flower.classid = f->res.classid;
1474
1475                         err = cb(TC_SETUP_CLSFLOWER, &cls_flower, cb_priv);
1476                         if (err) {
1477                                 if (add && tc_skip_sw(f->flags))
1478                                         return err;
1479                                 continue;
1480                         }
1481
1482                         tc_cls_offload_cnt_update(block, &f->in_hw_count,
1483                                                   &f->flags, add);
1484                 }
1485         }
1486
1487         return 0;
1488 }
1489
1490 static void fl_hw_create_tmplt(struct tcf_chain *chain,
1491                                struct fl_flow_tmplt *tmplt)
1492 {
1493         struct tc_cls_flower_offload cls_flower = {};
1494         struct tcf_block *block = chain->block;
1495         struct tcf_exts dummy_exts = { 0, };
1496
1497         cls_flower.common.chain_index = chain->index;
1498         cls_flower.command = TC_CLSFLOWER_TMPLT_CREATE;
1499         cls_flower.cookie = (unsigned long) tmplt;
1500         cls_flower.dissector = &tmplt->dissector;
1501         cls_flower.mask = &tmplt->mask;
1502         cls_flower.key = &tmplt->dummy_key;
1503         cls_flower.exts = &dummy_exts;
1504
1505         /* We don't care if driver (any of them) fails to handle this
1506          * call. It serves just as a hint for it.
1507          */
1508         tc_setup_cb_call(block, NULL, TC_SETUP_CLSFLOWER,
1509                          &cls_flower, false);
1510 }
1511
1512 static void fl_hw_destroy_tmplt(struct tcf_chain *chain,
1513                                 struct fl_flow_tmplt *tmplt)
1514 {
1515         struct tc_cls_flower_offload cls_flower = {};
1516         struct tcf_block *block = chain->block;
1517
1518         cls_flower.common.chain_index = chain->index;
1519         cls_flower.command = TC_CLSFLOWER_TMPLT_DESTROY;
1520         cls_flower.cookie = (unsigned long) tmplt;
1521
1522         tc_setup_cb_call(block, NULL, TC_SETUP_CLSFLOWER,
1523                          &cls_flower, false);
1524 }
1525
1526 static void *fl_tmplt_create(struct net *net, struct tcf_chain *chain,
1527                              struct nlattr **tca,
1528                              struct netlink_ext_ack *extack)
1529 {
1530         struct fl_flow_tmplt *tmplt;
1531         struct nlattr **tb;
1532         int err;
1533
1534         if (!tca[TCA_OPTIONS])
1535                 return ERR_PTR(-EINVAL);
1536
1537         tb = kcalloc(TCA_FLOWER_MAX + 1, sizeof(struct nlattr *), GFP_KERNEL);
1538         if (!tb)
1539                 return ERR_PTR(-ENOBUFS);
1540         err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS],
1541                                fl_policy, NULL);
1542         if (err)
1543                 goto errout_tb;
1544
1545         tmplt = kzalloc(sizeof(*tmplt), GFP_KERNEL);
1546         if (!tmplt) {
1547                 err = -ENOMEM;
1548                 goto errout_tb;
1549         }
1550         tmplt->chain = chain;
1551         err = fl_set_key(net, tb, &tmplt->dummy_key, &tmplt->mask, extack);
1552         if (err)
1553                 goto errout_tmplt;
1554         kfree(tb);
1555
1556         fl_init_dissector(&tmplt->dissector, &tmplt->mask);
1557
1558         fl_hw_create_tmplt(chain, tmplt);
1559
1560         return tmplt;
1561
1562 errout_tmplt:
1563         kfree(tmplt);
1564 errout_tb:
1565         kfree(tb);
1566         return ERR_PTR(err);
1567 }
1568
1569 static void fl_tmplt_destroy(void *tmplt_priv)
1570 {
1571         struct fl_flow_tmplt *tmplt = tmplt_priv;
1572
1573         fl_hw_destroy_tmplt(tmplt->chain, tmplt);
1574         kfree(tmplt);
1575 }
1576
1577 static int fl_dump_key_val(struct sk_buff *skb,
1578                            void *val, int val_type,
1579                            void *mask, int mask_type, int len)
1580 {
1581         int err;
1582
1583         if (!memchr_inv(mask, 0, len))
1584                 return 0;
1585         err = nla_put(skb, val_type, len, val);
1586         if (err)
1587                 return err;
1588         if (mask_type != TCA_FLOWER_UNSPEC) {
1589                 err = nla_put(skb, mask_type, len, mask);
1590                 if (err)
1591                         return err;
1592         }
1593         return 0;
1594 }
1595
1596 static int fl_dump_key_port_range(struct sk_buff *skb, struct fl_flow_key *key,
1597                                   struct fl_flow_key *mask)
1598 {
1599         if (fl_dump_key_val(skb, &key->tp_min.dst, TCA_FLOWER_KEY_PORT_DST_MIN,
1600                             &mask->tp_min.dst, TCA_FLOWER_UNSPEC,
1601                             sizeof(key->tp_min.dst)) ||
1602             fl_dump_key_val(skb, &key->tp_max.dst, TCA_FLOWER_KEY_PORT_DST_MAX,
1603                             &mask->tp_max.dst, TCA_FLOWER_UNSPEC,
1604                             sizeof(key->tp_max.dst)) ||
1605             fl_dump_key_val(skb, &key->tp_min.src, TCA_FLOWER_KEY_PORT_SRC_MIN,
1606                             &mask->tp_min.src, TCA_FLOWER_UNSPEC,
1607                             sizeof(key->tp_min.src)) ||
1608             fl_dump_key_val(skb, &key->tp_max.src, TCA_FLOWER_KEY_PORT_SRC_MAX,
1609                             &mask->tp_max.src, TCA_FLOWER_UNSPEC,
1610                             sizeof(key->tp_max.src)))
1611                 return -1;
1612
1613         return 0;
1614 }
1615
1616 static int fl_dump_key_mpls(struct sk_buff *skb,
1617                             struct flow_dissector_key_mpls *mpls_key,
1618                             struct flow_dissector_key_mpls *mpls_mask)
1619 {
1620         int err;
1621
1622         if (!memchr_inv(mpls_mask, 0, sizeof(*mpls_mask)))
1623                 return 0;
1624         if (mpls_mask->mpls_ttl) {
1625                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_TTL,
1626                                  mpls_key->mpls_ttl);
1627                 if (err)
1628                         return err;
1629         }
1630         if (mpls_mask->mpls_tc) {
1631                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_TC,
1632                                  mpls_key->mpls_tc);
1633                 if (err)
1634                         return err;
1635         }
1636         if (mpls_mask->mpls_label) {
1637                 err = nla_put_u32(skb, TCA_FLOWER_KEY_MPLS_LABEL,
1638                                   mpls_key->mpls_label);
1639                 if (err)
1640                         return err;
1641         }
1642         if (mpls_mask->mpls_bos) {
1643                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_BOS,
1644                                  mpls_key->mpls_bos);
1645                 if (err)
1646                         return err;
1647         }
1648         return 0;
1649 }
1650
1651 static int fl_dump_key_ip(struct sk_buff *skb, bool encap,
1652                           struct flow_dissector_key_ip *key,
1653                           struct flow_dissector_key_ip *mask)
1654 {
1655         int tos_key = encap ? TCA_FLOWER_KEY_ENC_IP_TOS : TCA_FLOWER_KEY_IP_TOS;
1656         int ttl_key = encap ? TCA_FLOWER_KEY_ENC_IP_TTL : TCA_FLOWER_KEY_IP_TTL;
1657         int tos_mask = encap ? TCA_FLOWER_KEY_ENC_IP_TOS_MASK : TCA_FLOWER_KEY_IP_TOS_MASK;
1658         int ttl_mask = encap ? TCA_FLOWER_KEY_ENC_IP_TTL_MASK : TCA_FLOWER_KEY_IP_TTL_MASK;
1659
1660         if (fl_dump_key_val(skb, &key->tos, tos_key, &mask->tos, tos_mask, sizeof(key->tos)) ||
1661             fl_dump_key_val(skb, &key->ttl, ttl_key, &mask->ttl, ttl_mask, sizeof(key->ttl)))
1662                 return -1;
1663
1664         return 0;
1665 }
1666
1667 static int fl_dump_key_vlan(struct sk_buff *skb,
1668                             int vlan_id_key, int vlan_prio_key,
1669                             struct flow_dissector_key_vlan *vlan_key,
1670                             struct flow_dissector_key_vlan *vlan_mask)
1671 {
1672         int err;
1673
1674         if (!memchr_inv(vlan_mask, 0, sizeof(*vlan_mask)))
1675                 return 0;
1676         if (vlan_mask->vlan_id) {
1677                 err = nla_put_u16(skb, vlan_id_key,
1678                                   vlan_key->vlan_id);
1679                 if (err)
1680                         return err;
1681         }
1682         if (vlan_mask->vlan_priority) {
1683                 err = nla_put_u8(skb, vlan_prio_key,
1684                                  vlan_key->vlan_priority);
1685                 if (err)
1686                         return err;
1687         }
1688         return 0;
1689 }
1690
1691 static void fl_get_key_flag(u32 dissector_key, u32 dissector_mask,
1692                             u32 *flower_key, u32 *flower_mask,
1693                             u32 flower_flag_bit, u32 dissector_flag_bit)
1694 {
1695         if (dissector_mask & dissector_flag_bit) {
1696                 *flower_mask |= flower_flag_bit;
1697                 if (dissector_key & dissector_flag_bit)
1698                         *flower_key |= flower_flag_bit;
1699         }
1700 }
1701
1702 static int fl_dump_key_flags(struct sk_buff *skb, u32 flags_key, u32 flags_mask)
1703 {
1704         u32 key, mask;
1705         __be32 _key, _mask;
1706         int err;
1707
1708         if (!memchr_inv(&flags_mask, 0, sizeof(flags_mask)))
1709                 return 0;
1710
1711         key = 0;
1712         mask = 0;
1713
1714         fl_get_key_flag(flags_key, flags_mask, &key, &mask,
1715                         TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT, FLOW_DIS_IS_FRAGMENT);
1716         fl_get_key_flag(flags_key, flags_mask, &key, &mask,
1717                         TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST,
1718                         FLOW_DIS_FIRST_FRAG);
1719
1720         _key = cpu_to_be32(key);
1721         _mask = cpu_to_be32(mask);
1722
1723         err = nla_put(skb, TCA_FLOWER_KEY_FLAGS, 4, &_key);
1724         if (err)
1725                 return err;
1726
1727         return nla_put(skb, TCA_FLOWER_KEY_FLAGS_MASK, 4, &_mask);
1728 }
1729
1730 static int fl_dump_key_geneve_opt(struct sk_buff *skb,
1731                                   struct flow_dissector_key_enc_opts *enc_opts)
1732 {
1733         struct geneve_opt *opt;
1734         struct nlattr *nest;
1735         int opt_off = 0;
1736
1737         nest = nla_nest_start(skb, TCA_FLOWER_KEY_ENC_OPTS_GENEVE);
1738         if (!nest)
1739                 goto nla_put_failure;
1740
1741         while (enc_opts->len > opt_off) {
1742                 opt = (struct geneve_opt *)&enc_opts->data[opt_off];
1743
1744                 if (nla_put_be16(skb, TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS,
1745                                  opt->opt_class))
1746                         goto nla_put_failure;
1747                 if (nla_put_u8(skb, TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE,
1748                                opt->type))
1749                         goto nla_put_failure;
1750                 if (nla_put(skb, TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA,
1751                             opt->length * 4, opt->opt_data))
1752                         goto nla_put_failure;
1753
1754                 opt_off += sizeof(struct geneve_opt) + opt->length * 4;
1755         }
1756         nla_nest_end(skb, nest);
1757         return 0;
1758
1759 nla_put_failure:
1760         nla_nest_cancel(skb, nest);
1761         return -EMSGSIZE;
1762 }
1763
1764 static int fl_dump_key_options(struct sk_buff *skb, int enc_opt_type,
1765                                struct flow_dissector_key_enc_opts *enc_opts)
1766 {
1767         struct nlattr *nest;
1768         int err;
1769
1770         if (!enc_opts->len)
1771                 return 0;
1772
1773         nest = nla_nest_start(skb, enc_opt_type);
1774         if (!nest)
1775                 goto nla_put_failure;
1776
1777         switch (enc_opts->dst_opt_type) {
1778         case TUNNEL_GENEVE_OPT:
1779                 err = fl_dump_key_geneve_opt(skb, enc_opts);
1780                 if (err)
1781                         goto nla_put_failure;
1782                 break;
1783         default:
1784                 goto nla_put_failure;
1785         }
1786         nla_nest_end(skb, nest);
1787         return 0;
1788
1789 nla_put_failure:
1790         nla_nest_cancel(skb, nest);
1791         return -EMSGSIZE;
1792 }
1793
1794 static int fl_dump_key_enc_opt(struct sk_buff *skb,
1795                                struct flow_dissector_key_enc_opts *key_opts,
1796                                struct flow_dissector_key_enc_opts *msk_opts)
1797 {
1798         int err;
1799
1800         err = fl_dump_key_options(skb, TCA_FLOWER_KEY_ENC_OPTS, key_opts);
1801         if (err)
1802                 return err;
1803
1804         return fl_dump_key_options(skb, TCA_FLOWER_KEY_ENC_OPTS_MASK, msk_opts);
1805 }
1806
1807 static int fl_dump_key(struct sk_buff *skb, struct net *net,
1808                        struct fl_flow_key *key, struct fl_flow_key *mask)
1809 {
1810         if (mask->indev_ifindex) {
1811                 struct net_device *dev;
1812
1813                 dev = __dev_get_by_index(net, key->indev_ifindex);
1814                 if (dev && nla_put_string(skb, TCA_FLOWER_INDEV, dev->name))
1815                         goto nla_put_failure;
1816         }
1817
1818         if (fl_dump_key_val(skb, key->eth.dst, TCA_FLOWER_KEY_ETH_DST,
1819                             mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK,
1820                             sizeof(key->eth.dst)) ||
1821             fl_dump_key_val(skb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC,
1822                             mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK,
1823                             sizeof(key->eth.src)) ||
1824             fl_dump_key_val(skb, &key->basic.n_proto, TCA_FLOWER_KEY_ETH_TYPE,
1825                             &mask->basic.n_proto, TCA_FLOWER_UNSPEC,
1826                             sizeof(key->basic.n_proto)))
1827                 goto nla_put_failure;
1828
1829         if (fl_dump_key_mpls(skb, &key->mpls, &mask->mpls))
1830                 goto nla_put_failure;
1831
1832         if (fl_dump_key_vlan(skb, TCA_FLOWER_KEY_VLAN_ID,
1833                              TCA_FLOWER_KEY_VLAN_PRIO, &key->vlan, &mask->vlan))
1834                 goto nla_put_failure;
1835
1836         if (fl_dump_key_vlan(skb, TCA_FLOWER_KEY_CVLAN_ID,
1837                              TCA_FLOWER_KEY_CVLAN_PRIO,
1838                              &key->cvlan, &mask->cvlan) ||
1839             (mask->cvlan.vlan_tpid &&
1840              nla_put_be16(skb, TCA_FLOWER_KEY_VLAN_ETH_TYPE,
1841                           key->cvlan.vlan_tpid)))
1842                 goto nla_put_failure;
1843
1844         if (mask->basic.n_proto) {
1845                 if (mask->cvlan.vlan_tpid) {
1846                         if (nla_put_be16(skb, TCA_FLOWER_KEY_CVLAN_ETH_TYPE,
1847                                          key->basic.n_proto))
1848                                 goto nla_put_failure;
1849                 } else if (mask->vlan.vlan_tpid) {
1850                         if (nla_put_be16(skb, TCA_FLOWER_KEY_VLAN_ETH_TYPE,
1851                                          key->basic.n_proto))
1852                                 goto nla_put_failure;
1853                 }
1854         }
1855
1856         if ((key->basic.n_proto == htons(ETH_P_IP) ||
1857              key->basic.n_proto == htons(ETH_P_IPV6)) &&
1858             (fl_dump_key_val(skb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO,
1859                             &mask->basic.ip_proto, TCA_FLOWER_UNSPEC,
1860                             sizeof(key->basic.ip_proto)) ||
1861             fl_dump_key_ip(skb, false, &key->ip, &mask->ip)))
1862                 goto nla_put_failure;
1863
1864         if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS &&
1865             (fl_dump_key_val(skb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
1866                              &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
1867                              sizeof(key->ipv4.src)) ||
1868              fl_dump_key_val(skb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST,
1869                              &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK,
1870                              sizeof(key->ipv4.dst))))
1871                 goto nla_put_failure;
1872         else if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS &&
1873                  (fl_dump_key_val(skb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
1874                                   &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
1875                                   sizeof(key->ipv6.src)) ||
1876                   fl_dump_key_val(skb, &key->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST,
1877                                   &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK,
1878                                   sizeof(key->ipv6.dst))))
1879                 goto nla_put_failure;
1880
1881         if (key->basic.ip_proto == IPPROTO_TCP &&
1882             (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC,
1883                              &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK,
1884                              sizeof(key->tp.src)) ||
1885              fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_TCP_DST,
1886                              &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK,
1887                              sizeof(key->tp.dst)) ||
1888              fl_dump_key_val(skb, &key->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS,
1889                              &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK,
1890                              sizeof(key->tcp.flags))))
1891                 goto nla_put_failure;
1892         else if (key->basic.ip_proto == IPPROTO_UDP &&
1893                  (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_UDP_SRC,
1894                                   &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK,
1895                                   sizeof(key->tp.src)) ||
1896                   fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_UDP_DST,
1897                                   &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK,
1898                                   sizeof(key->tp.dst))))
1899                 goto nla_put_failure;
1900         else if (key->basic.ip_proto == IPPROTO_SCTP &&
1901                  (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_SCTP_SRC,
1902                                   &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK,
1903                                   sizeof(key->tp.src)) ||
1904                   fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_SCTP_DST,
1905                                   &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK,
1906                                   sizeof(key->tp.dst))))
1907                 goto nla_put_failure;
1908         else if (key->basic.n_proto == htons(ETH_P_IP) &&
1909                  key->basic.ip_proto == IPPROTO_ICMP &&
1910                  (fl_dump_key_val(skb, &key->icmp.type,
1911                                   TCA_FLOWER_KEY_ICMPV4_TYPE, &mask->icmp.type,
1912                                   TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,
1913                                   sizeof(key->icmp.type)) ||
1914                   fl_dump_key_val(skb, &key->icmp.code,
1915                                   TCA_FLOWER_KEY_ICMPV4_CODE, &mask->icmp.code,
1916                                   TCA_FLOWER_KEY_ICMPV4_CODE_MASK,
1917                                   sizeof(key->icmp.code))))
1918                 goto nla_put_failure;
1919         else if (key->basic.n_proto == htons(ETH_P_IPV6) &&
1920                  key->basic.ip_proto == IPPROTO_ICMPV6 &&
1921                  (fl_dump_key_val(skb, &key->icmp.type,
1922                                   TCA_FLOWER_KEY_ICMPV6_TYPE, &mask->icmp.type,
1923                                   TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,
1924                                   sizeof(key->icmp.type)) ||
1925                   fl_dump_key_val(skb, &key->icmp.code,
1926                                   TCA_FLOWER_KEY_ICMPV6_CODE, &mask->icmp.code,
1927                                   TCA_FLOWER_KEY_ICMPV6_CODE_MASK,
1928                                   sizeof(key->icmp.code))))
1929                 goto nla_put_failure;
1930         else if ((key->basic.n_proto == htons(ETH_P_ARP) ||
1931                   key->basic.n_proto == htons(ETH_P_RARP)) &&
1932                  (fl_dump_key_val(skb, &key->arp.sip,
1933                                   TCA_FLOWER_KEY_ARP_SIP, &mask->arp.sip,
1934                                   TCA_FLOWER_KEY_ARP_SIP_MASK,
1935                                   sizeof(key->arp.sip)) ||
1936                   fl_dump_key_val(skb, &key->arp.tip,
1937                                   TCA_FLOWER_KEY_ARP_TIP, &mask->arp.tip,
1938                                   TCA_FLOWER_KEY_ARP_TIP_MASK,
1939                                   sizeof(key->arp.tip)) ||
1940                   fl_dump_key_val(skb, &key->arp.op,
1941                                   TCA_FLOWER_KEY_ARP_OP, &mask->arp.op,
1942                                   TCA_FLOWER_KEY_ARP_OP_MASK,
1943                                   sizeof(key->arp.op)) ||
1944                   fl_dump_key_val(skb, key->arp.sha, TCA_FLOWER_KEY_ARP_SHA,
1945                                   mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK,
1946                                   sizeof(key->arp.sha)) ||
1947                   fl_dump_key_val(skb, key->arp.tha, TCA_FLOWER_KEY_ARP_THA,
1948                                   mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK,
1949                                   sizeof(key->arp.tha))))
1950                 goto nla_put_failure;
1951
1952         if ((key->basic.ip_proto == IPPROTO_TCP ||
1953              key->basic.ip_proto == IPPROTO_UDP ||
1954              key->basic.ip_proto == IPPROTO_SCTP) &&
1955              fl_dump_key_port_range(skb, key, mask))
1956                 goto nla_put_failure;
1957
1958         if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS &&
1959             (fl_dump_key_val(skb, &key->enc_ipv4.src,
1960                             TCA_FLOWER_KEY_ENC_IPV4_SRC, &mask->enc_ipv4.src,
1961                             TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,
1962                             sizeof(key->enc_ipv4.src)) ||
1963              fl_dump_key_val(skb, &key->enc_ipv4.dst,
1964                              TCA_FLOWER_KEY_ENC_IPV4_DST, &mask->enc_ipv4.dst,
1965                              TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,
1966                              sizeof(key->enc_ipv4.dst))))
1967                 goto nla_put_failure;
1968         else if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS &&
1969                  (fl_dump_key_val(skb, &key->enc_ipv6.src,
1970                             TCA_FLOWER_KEY_ENC_IPV6_SRC, &mask->enc_ipv6.src,
1971                             TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,
1972                             sizeof(key->enc_ipv6.src)) ||
1973                  fl_dump_key_val(skb, &key->enc_ipv6.dst,
1974                                  TCA_FLOWER_KEY_ENC_IPV6_DST,
1975                                  &mask->enc_ipv6.dst,
1976                                  TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,
1977                             sizeof(key->enc_ipv6.dst))))
1978                 goto nla_put_failure;
1979
1980         if (fl_dump_key_val(skb, &key->enc_key_id, TCA_FLOWER_KEY_ENC_KEY_ID,
1981                             &mask->enc_key_id, TCA_FLOWER_UNSPEC,
1982                             sizeof(key->enc_key_id)) ||
1983             fl_dump_key_val(skb, &key->enc_tp.src,
1984                             TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,
1985                             &mask->enc_tp.src,
1986                             TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,
1987                             sizeof(key->enc_tp.src)) ||
1988             fl_dump_key_val(skb, &key->enc_tp.dst,
1989                             TCA_FLOWER_KEY_ENC_UDP_DST_PORT,
1990                             &mask->enc_tp.dst,
1991                             TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,
1992                             sizeof(key->enc_tp.dst)) ||
1993             fl_dump_key_ip(skb, true, &key->enc_ip, &mask->enc_ip) ||
1994             fl_dump_key_enc_opt(skb, &key->enc_opts, &mask->enc_opts))
1995                 goto nla_put_failure;
1996
1997         if (fl_dump_key_flags(skb, key->control.flags, mask->control.flags))
1998                 goto nla_put_failure;
1999
2000         return 0;
2001
2002 nla_put_failure:
2003         return -EMSGSIZE;
2004 }
2005
2006 static int fl_dump(struct net *net, struct tcf_proto *tp, void *fh,
2007                    struct sk_buff *skb, struct tcmsg *t)
2008 {
2009         struct cls_fl_filter *f = fh;
2010         struct nlattr *nest;
2011         struct fl_flow_key *key, *mask;
2012
2013         if (!f)
2014                 return skb->len;
2015
2016         t->tcm_handle = f->handle;
2017
2018         nest = nla_nest_start(skb, TCA_OPTIONS);
2019         if (!nest)
2020                 goto nla_put_failure;
2021
2022         if (f->res.classid &&
2023             nla_put_u32(skb, TCA_FLOWER_CLASSID, f->res.classid))
2024                 goto nla_put_failure;
2025
2026         key = &f->key;
2027         mask = &f->mask->key;
2028
2029         if (fl_dump_key(skb, net, key, mask))
2030                 goto nla_put_failure;
2031
2032         if (!tc_skip_hw(f->flags))
2033                 fl_hw_update_stats(tp, f);
2034
2035         if (f->flags && nla_put_u32(skb, TCA_FLOWER_FLAGS, f->flags))
2036                 goto nla_put_failure;
2037
2038         if (nla_put_u32(skb, TCA_FLOWER_IN_HW_COUNT, f->in_hw_count))
2039                 goto nla_put_failure;
2040
2041         if (tcf_exts_dump(skb, &f->exts))
2042                 goto nla_put_failure;
2043
2044         nla_nest_end(skb, nest);
2045
2046         if (tcf_exts_dump_stats(skb, &f->exts) < 0)
2047                 goto nla_put_failure;
2048
2049         return skb->len;
2050
2051 nla_put_failure:
2052         nla_nest_cancel(skb, nest);
2053         return -1;
2054 }
2055
2056 static int fl_tmplt_dump(struct sk_buff *skb, struct net *net, void *tmplt_priv)
2057 {
2058         struct fl_flow_tmplt *tmplt = tmplt_priv;
2059         struct fl_flow_key *key, *mask;
2060         struct nlattr *nest;
2061
2062         nest = nla_nest_start(skb, TCA_OPTIONS);
2063         if (!nest)
2064                 goto nla_put_failure;
2065
2066         key = &tmplt->dummy_key;
2067         mask = &tmplt->mask;
2068
2069         if (fl_dump_key(skb, net, key, mask))
2070                 goto nla_put_failure;
2071
2072         nla_nest_end(skb, nest);
2073
2074         return skb->len;
2075
2076 nla_put_failure:
2077         nla_nest_cancel(skb, nest);
2078         return -EMSGSIZE;
2079 }
2080
2081 static void fl_bind_class(void *fh, u32 classid, unsigned long cl)
2082 {
2083         struct cls_fl_filter *f = fh;
2084
2085         if (f && f->res.classid == classid)
2086                 f->res.class = cl;
2087 }
2088
2089 static struct tcf_proto_ops cls_fl_ops __read_mostly = {
2090         .kind           = "flower",
2091         .classify       = fl_classify,
2092         .init           = fl_init,
2093         .destroy        = fl_destroy,
2094         .get            = fl_get,
2095         .change         = fl_change,
2096         .delete         = fl_delete,
2097         .walk           = fl_walk,
2098         .reoffload      = fl_reoffload,
2099         .dump           = fl_dump,
2100         .bind_class     = fl_bind_class,
2101         .tmplt_create   = fl_tmplt_create,
2102         .tmplt_destroy  = fl_tmplt_destroy,
2103         .tmplt_dump     = fl_tmplt_dump,
2104         .owner          = THIS_MODULE,
2105 };
2106
2107 static int __init cls_fl_init(void)
2108 {
2109         return register_tcf_proto_ops(&cls_fl_ops);
2110 }
2111
2112 static void __exit cls_fl_exit(void)
2113 {
2114         unregister_tcf_proto_ops(&cls_fl_ops);
2115 }
2116
2117 module_init(cls_fl_init);
2118 module_exit(cls_fl_exit);
2119
2120 MODULE_AUTHOR("Jiri Pirko <jiri@resnulli.us>");
2121 MODULE_DESCRIPTION("Flower classifier");
2122 MODULE_LICENSE("GPL v2");