Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[platform/kernel/linux-starfive.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 (!fold && __fl_lookup(fnew->mask, &fnew->mkey)) {
1359                 err = -EEXIST;
1360                 goto errout_mask;
1361         }
1362
1363         err = rhashtable_insert_fast(&fnew->mask->ht, &fnew->ht_node,
1364                                      fnew->mask->filter_ht_params);
1365         if (err)
1366                 goto errout_mask;
1367
1368         if (!tc_skip_hw(fnew->flags)) {
1369                 err = fl_hw_replace_filter(tp, fnew, extack);
1370                 if (err)
1371                         goto errout_mask;
1372         }
1373
1374         if (!tc_in_hw(fnew->flags))
1375                 fnew->flags |= TCA_CLS_FLAGS_NOT_IN_HW;
1376
1377         if (fold) {
1378                 if (!tc_skip_sw(fold->flags))
1379                         rhashtable_remove_fast(&fold->mask->ht,
1380                                                &fold->ht_node,
1381                                                fold->mask->filter_ht_params);
1382                 if (!tc_skip_hw(fold->flags))
1383                         fl_hw_destroy_filter(tp, fold, NULL);
1384         }
1385
1386         *arg = fnew;
1387
1388         if (fold) {
1389                 idr_replace(&head->handle_idr, fnew, fnew->handle);
1390                 list_replace_rcu(&fold->list, &fnew->list);
1391                 tcf_unbind_filter(tp, &fold->res);
1392                 tcf_exts_get_net(&fold->exts);
1393                 tcf_queue_work(&fold->rwork, fl_destroy_filter_work);
1394         } else {
1395                 list_add_tail_rcu(&fnew->list, &fnew->mask->filters);
1396         }
1397
1398         kfree(tb);
1399         return 0;
1400
1401 errout_mask:
1402         fl_mask_put(head, fnew->mask, false);
1403
1404 errout_idr:
1405         if (!fold)
1406                 idr_remove(&head->handle_idr, fnew->handle);
1407 errout:
1408         tcf_exts_destroy(&fnew->exts);
1409         kfree(fnew);
1410 errout_tb:
1411         kfree(tb);
1412         return err;
1413 }
1414
1415 static int fl_delete(struct tcf_proto *tp, void *arg, bool *last,
1416                      struct netlink_ext_ack *extack)
1417 {
1418         struct cls_fl_head *head = rtnl_dereference(tp->root);
1419         struct cls_fl_filter *f = arg;
1420
1421         rhashtable_remove_fast(&f->mask->ht, &f->ht_node,
1422                                f->mask->filter_ht_params);
1423         __fl_delete(tp, f, extack);
1424         *last = list_empty(&head->masks);
1425         return 0;
1426 }
1427
1428 static void fl_walk(struct tcf_proto *tp, struct tcf_walker *arg)
1429 {
1430         struct cls_fl_head *head = rtnl_dereference(tp->root);
1431         struct cls_fl_filter *f;
1432
1433         arg->count = arg->skip;
1434
1435         while ((f = idr_get_next_ul(&head->handle_idr,
1436                                     &arg->cookie)) != NULL) {
1437                 if (arg->fn(tp, f, arg) < 0) {
1438                         arg->stop = 1;
1439                         break;
1440                 }
1441                 arg->cookie = f->handle + 1;
1442                 arg->count++;
1443         }
1444 }
1445
1446 static int fl_reoffload(struct tcf_proto *tp, bool add, tc_setup_cb_t *cb,
1447                         void *cb_priv, struct netlink_ext_ack *extack)
1448 {
1449         struct cls_fl_head *head = rtnl_dereference(tp->root);
1450         struct tc_cls_flower_offload cls_flower = {};
1451         struct tcf_block *block = tp->chain->block;
1452         struct fl_flow_mask *mask;
1453         struct cls_fl_filter *f;
1454         int err;
1455
1456         list_for_each_entry(mask, &head->masks, list) {
1457                 list_for_each_entry(f, &mask->filters, list) {
1458                         if (tc_skip_hw(f->flags))
1459                                 continue;
1460
1461                         tc_cls_common_offload_init(&cls_flower.common, tp,
1462                                                    f->flags, extack);
1463                         cls_flower.command = add ?
1464                                 TC_CLSFLOWER_REPLACE : TC_CLSFLOWER_DESTROY;
1465                         cls_flower.cookie = (unsigned long)f;
1466                         cls_flower.dissector = &mask->dissector;
1467                         cls_flower.mask = &mask->key;
1468                         cls_flower.key = &f->mkey;
1469                         cls_flower.exts = &f->exts;
1470                         cls_flower.classid = f->res.classid;
1471
1472                         err = cb(TC_SETUP_CLSFLOWER, &cls_flower, cb_priv);
1473                         if (err) {
1474                                 if (add && tc_skip_sw(f->flags))
1475                                         return err;
1476                                 continue;
1477                         }
1478
1479                         tc_cls_offload_cnt_update(block, &f->in_hw_count,
1480                                                   &f->flags, add);
1481                 }
1482         }
1483
1484         return 0;
1485 }
1486
1487 static void fl_hw_create_tmplt(struct tcf_chain *chain,
1488                                struct fl_flow_tmplt *tmplt)
1489 {
1490         struct tc_cls_flower_offload cls_flower = {};
1491         struct tcf_block *block = chain->block;
1492         struct tcf_exts dummy_exts = { 0, };
1493
1494         cls_flower.common.chain_index = chain->index;
1495         cls_flower.command = TC_CLSFLOWER_TMPLT_CREATE;
1496         cls_flower.cookie = (unsigned long) tmplt;
1497         cls_flower.dissector = &tmplt->dissector;
1498         cls_flower.mask = &tmplt->mask;
1499         cls_flower.key = &tmplt->dummy_key;
1500         cls_flower.exts = &dummy_exts;
1501
1502         /* We don't care if driver (any of them) fails to handle this
1503          * call. It serves just as a hint for it.
1504          */
1505         tc_setup_cb_call(block, NULL, TC_SETUP_CLSFLOWER,
1506                          &cls_flower, false);
1507 }
1508
1509 static void fl_hw_destroy_tmplt(struct tcf_chain *chain,
1510                                 struct fl_flow_tmplt *tmplt)
1511 {
1512         struct tc_cls_flower_offload cls_flower = {};
1513         struct tcf_block *block = chain->block;
1514
1515         cls_flower.common.chain_index = chain->index;
1516         cls_flower.command = TC_CLSFLOWER_TMPLT_DESTROY;
1517         cls_flower.cookie = (unsigned long) tmplt;
1518
1519         tc_setup_cb_call(block, NULL, TC_SETUP_CLSFLOWER,
1520                          &cls_flower, false);
1521 }
1522
1523 static void *fl_tmplt_create(struct net *net, struct tcf_chain *chain,
1524                              struct nlattr **tca,
1525                              struct netlink_ext_ack *extack)
1526 {
1527         struct fl_flow_tmplt *tmplt;
1528         struct nlattr **tb;
1529         int err;
1530
1531         if (!tca[TCA_OPTIONS])
1532                 return ERR_PTR(-EINVAL);
1533
1534         tb = kcalloc(TCA_FLOWER_MAX + 1, sizeof(struct nlattr *), GFP_KERNEL);
1535         if (!tb)
1536                 return ERR_PTR(-ENOBUFS);
1537         err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS],
1538                                fl_policy, NULL);
1539         if (err)
1540                 goto errout_tb;
1541
1542         tmplt = kzalloc(sizeof(*tmplt), GFP_KERNEL);
1543         if (!tmplt) {
1544                 err = -ENOMEM;
1545                 goto errout_tb;
1546         }
1547         tmplt->chain = chain;
1548         err = fl_set_key(net, tb, &tmplt->dummy_key, &tmplt->mask, extack);
1549         if (err)
1550                 goto errout_tmplt;
1551         kfree(tb);
1552
1553         fl_init_dissector(&tmplt->dissector, &tmplt->mask);
1554
1555         fl_hw_create_tmplt(chain, tmplt);
1556
1557         return tmplt;
1558
1559 errout_tmplt:
1560         kfree(tmplt);
1561 errout_tb:
1562         kfree(tb);
1563         return ERR_PTR(err);
1564 }
1565
1566 static void fl_tmplt_destroy(void *tmplt_priv)
1567 {
1568         struct fl_flow_tmplt *tmplt = tmplt_priv;
1569
1570         fl_hw_destroy_tmplt(tmplt->chain, tmplt);
1571         kfree(tmplt);
1572 }
1573
1574 static int fl_dump_key_val(struct sk_buff *skb,
1575                            void *val, int val_type,
1576                            void *mask, int mask_type, int len)
1577 {
1578         int err;
1579
1580         if (!memchr_inv(mask, 0, len))
1581                 return 0;
1582         err = nla_put(skb, val_type, len, val);
1583         if (err)
1584                 return err;
1585         if (mask_type != TCA_FLOWER_UNSPEC) {
1586                 err = nla_put(skb, mask_type, len, mask);
1587                 if (err)
1588                         return err;
1589         }
1590         return 0;
1591 }
1592
1593 static int fl_dump_key_port_range(struct sk_buff *skb, struct fl_flow_key *key,
1594                                   struct fl_flow_key *mask)
1595 {
1596         if (fl_dump_key_val(skb, &key->tp_min.dst, TCA_FLOWER_KEY_PORT_DST_MIN,
1597                             &mask->tp_min.dst, TCA_FLOWER_UNSPEC,
1598                             sizeof(key->tp_min.dst)) ||
1599             fl_dump_key_val(skb, &key->tp_max.dst, TCA_FLOWER_KEY_PORT_DST_MAX,
1600                             &mask->tp_max.dst, TCA_FLOWER_UNSPEC,
1601                             sizeof(key->tp_max.dst)) ||
1602             fl_dump_key_val(skb, &key->tp_min.src, TCA_FLOWER_KEY_PORT_SRC_MIN,
1603                             &mask->tp_min.src, TCA_FLOWER_UNSPEC,
1604                             sizeof(key->tp_min.src)) ||
1605             fl_dump_key_val(skb, &key->tp_max.src, TCA_FLOWER_KEY_PORT_SRC_MAX,
1606                             &mask->tp_max.src, TCA_FLOWER_UNSPEC,
1607                             sizeof(key->tp_max.src)))
1608                 return -1;
1609
1610         return 0;
1611 }
1612
1613 static int fl_dump_key_mpls(struct sk_buff *skb,
1614                             struct flow_dissector_key_mpls *mpls_key,
1615                             struct flow_dissector_key_mpls *mpls_mask)
1616 {
1617         int err;
1618
1619         if (!memchr_inv(mpls_mask, 0, sizeof(*mpls_mask)))
1620                 return 0;
1621         if (mpls_mask->mpls_ttl) {
1622                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_TTL,
1623                                  mpls_key->mpls_ttl);
1624                 if (err)
1625                         return err;
1626         }
1627         if (mpls_mask->mpls_tc) {
1628                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_TC,
1629                                  mpls_key->mpls_tc);
1630                 if (err)
1631                         return err;
1632         }
1633         if (mpls_mask->mpls_label) {
1634                 err = nla_put_u32(skb, TCA_FLOWER_KEY_MPLS_LABEL,
1635                                   mpls_key->mpls_label);
1636                 if (err)
1637                         return err;
1638         }
1639         if (mpls_mask->mpls_bos) {
1640                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_BOS,
1641                                  mpls_key->mpls_bos);
1642                 if (err)
1643                         return err;
1644         }
1645         return 0;
1646 }
1647
1648 static int fl_dump_key_ip(struct sk_buff *skb, bool encap,
1649                           struct flow_dissector_key_ip *key,
1650                           struct flow_dissector_key_ip *mask)
1651 {
1652         int tos_key = encap ? TCA_FLOWER_KEY_ENC_IP_TOS : TCA_FLOWER_KEY_IP_TOS;
1653         int ttl_key = encap ? TCA_FLOWER_KEY_ENC_IP_TTL : TCA_FLOWER_KEY_IP_TTL;
1654         int tos_mask = encap ? TCA_FLOWER_KEY_ENC_IP_TOS_MASK : TCA_FLOWER_KEY_IP_TOS_MASK;
1655         int ttl_mask = encap ? TCA_FLOWER_KEY_ENC_IP_TTL_MASK : TCA_FLOWER_KEY_IP_TTL_MASK;
1656
1657         if (fl_dump_key_val(skb, &key->tos, tos_key, &mask->tos, tos_mask, sizeof(key->tos)) ||
1658             fl_dump_key_val(skb, &key->ttl, ttl_key, &mask->ttl, ttl_mask, sizeof(key->ttl)))
1659                 return -1;
1660
1661         return 0;
1662 }
1663
1664 static int fl_dump_key_vlan(struct sk_buff *skb,
1665                             int vlan_id_key, int vlan_prio_key,
1666                             struct flow_dissector_key_vlan *vlan_key,
1667                             struct flow_dissector_key_vlan *vlan_mask)
1668 {
1669         int err;
1670
1671         if (!memchr_inv(vlan_mask, 0, sizeof(*vlan_mask)))
1672                 return 0;
1673         if (vlan_mask->vlan_id) {
1674                 err = nla_put_u16(skb, vlan_id_key,
1675                                   vlan_key->vlan_id);
1676                 if (err)
1677                         return err;
1678         }
1679         if (vlan_mask->vlan_priority) {
1680                 err = nla_put_u8(skb, vlan_prio_key,
1681                                  vlan_key->vlan_priority);
1682                 if (err)
1683                         return err;
1684         }
1685         return 0;
1686 }
1687
1688 static void fl_get_key_flag(u32 dissector_key, u32 dissector_mask,
1689                             u32 *flower_key, u32 *flower_mask,
1690                             u32 flower_flag_bit, u32 dissector_flag_bit)
1691 {
1692         if (dissector_mask & dissector_flag_bit) {
1693                 *flower_mask |= flower_flag_bit;
1694                 if (dissector_key & dissector_flag_bit)
1695                         *flower_key |= flower_flag_bit;
1696         }
1697 }
1698
1699 static int fl_dump_key_flags(struct sk_buff *skb, u32 flags_key, u32 flags_mask)
1700 {
1701         u32 key, mask;
1702         __be32 _key, _mask;
1703         int err;
1704
1705         if (!memchr_inv(&flags_mask, 0, sizeof(flags_mask)))
1706                 return 0;
1707
1708         key = 0;
1709         mask = 0;
1710
1711         fl_get_key_flag(flags_key, flags_mask, &key, &mask,
1712                         TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT, FLOW_DIS_IS_FRAGMENT);
1713         fl_get_key_flag(flags_key, flags_mask, &key, &mask,
1714                         TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST,
1715                         FLOW_DIS_FIRST_FRAG);
1716
1717         _key = cpu_to_be32(key);
1718         _mask = cpu_to_be32(mask);
1719
1720         err = nla_put(skb, TCA_FLOWER_KEY_FLAGS, 4, &_key);
1721         if (err)
1722                 return err;
1723
1724         return nla_put(skb, TCA_FLOWER_KEY_FLAGS_MASK, 4, &_mask);
1725 }
1726
1727 static int fl_dump_key_geneve_opt(struct sk_buff *skb,
1728                                   struct flow_dissector_key_enc_opts *enc_opts)
1729 {
1730         struct geneve_opt *opt;
1731         struct nlattr *nest;
1732         int opt_off = 0;
1733
1734         nest = nla_nest_start(skb, TCA_FLOWER_KEY_ENC_OPTS_GENEVE);
1735         if (!nest)
1736                 goto nla_put_failure;
1737
1738         while (enc_opts->len > opt_off) {
1739                 opt = (struct geneve_opt *)&enc_opts->data[opt_off];
1740
1741                 if (nla_put_be16(skb, TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS,
1742                                  opt->opt_class))
1743                         goto nla_put_failure;
1744                 if (nla_put_u8(skb, TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE,
1745                                opt->type))
1746                         goto nla_put_failure;
1747                 if (nla_put(skb, TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA,
1748                             opt->length * 4, opt->opt_data))
1749                         goto nla_put_failure;
1750
1751                 opt_off += sizeof(struct geneve_opt) + opt->length * 4;
1752         }
1753         nla_nest_end(skb, nest);
1754         return 0;
1755
1756 nla_put_failure:
1757         nla_nest_cancel(skb, nest);
1758         return -EMSGSIZE;
1759 }
1760
1761 static int fl_dump_key_options(struct sk_buff *skb, int enc_opt_type,
1762                                struct flow_dissector_key_enc_opts *enc_opts)
1763 {
1764         struct nlattr *nest;
1765         int err;
1766
1767         if (!enc_opts->len)
1768                 return 0;
1769
1770         nest = nla_nest_start(skb, enc_opt_type);
1771         if (!nest)
1772                 goto nla_put_failure;
1773
1774         switch (enc_opts->dst_opt_type) {
1775         case TUNNEL_GENEVE_OPT:
1776                 err = fl_dump_key_geneve_opt(skb, enc_opts);
1777                 if (err)
1778                         goto nla_put_failure;
1779                 break;
1780         default:
1781                 goto nla_put_failure;
1782         }
1783         nla_nest_end(skb, nest);
1784         return 0;
1785
1786 nla_put_failure:
1787         nla_nest_cancel(skb, nest);
1788         return -EMSGSIZE;
1789 }
1790
1791 static int fl_dump_key_enc_opt(struct sk_buff *skb,
1792                                struct flow_dissector_key_enc_opts *key_opts,
1793                                struct flow_dissector_key_enc_opts *msk_opts)
1794 {
1795         int err;
1796
1797         err = fl_dump_key_options(skb, TCA_FLOWER_KEY_ENC_OPTS, key_opts);
1798         if (err)
1799                 return err;
1800
1801         return fl_dump_key_options(skb, TCA_FLOWER_KEY_ENC_OPTS_MASK, msk_opts);
1802 }
1803
1804 static int fl_dump_key(struct sk_buff *skb, struct net *net,
1805                        struct fl_flow_key *key, struct fl_flow_key *mask)
1806 {
1807         if (mask->indev_ifindex) {
1808                 struct net_device *dev;
1809
1810                 dev = __dev_get_by_index(net, key->indev_ifindex);
1811                 if (dev && nla_put_string(skb, TCA_FLOWER_INDEV, dev->name))
1812                         goto nla_put_failure;
1813         }
1814
1815         if (fl_dump_key_val(skb, key->eth.dst, TCA_FLOWER_KEY_ETH_DST,
1816                             mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK,
1817                             sizeof(key->eth.dst)) ||
1818             fl_dump_key_val(skb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC,
1819                             mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK,
1820                             sizeof(key->eth.src)) ||
1821             fl_dump_key_val(skb, &key->basic.n_proto, TCA_FLOWER_KEY_ETH_TYPE,
1822                             &mask->basic.n_proto, TCA_FLOWER_UNSPEC,
1823                             sizeof(key->basic.n_proto)))
1824                 goto nla_put_failure;
1825
1826         if (fl_dump_key_mpls(skb, &key->mpls, &mask->mpls))
1827                 goto nla_put_failure;
1828
1829         if (fl_dump_key_vlan(skb, TCA_FLOWER_KEY_VLAN_ID,
1830                              TCA_FLOWER_KEY_VLAN_PRIO, &key->vlan, &mask->vlan))
1831                 goto nla_put_failure;
1832
1833         if (fl_dump_key_vlan(skb, TCA_FLOWER_KEY_CVLAN_ID,
1834                              TCA_FLOWER_KEY_CVLAN_PRIO,
1835                              &key->cvlan, &mask->cvlan) ||
1836             (mask->cvlan.vlan_tpid &&
1837              nla_put_be16(skb, TCA_FLOWER_KEY_VLAN_ETH_TYPE,
1838                           key->cvlan.vlan_tpid)))
1839                 goto nla_put_failure;
1840
1841         if (mask->basic.n_proto) {
1842                 if (mask->cvlan.vlan_tpid) {
1843                         if (nla_put_be16(skb, TCA_FLOWER_KEY_CVLAN_ETH_TYPE,
1844                                          key->basic.n_proto))
1845                                 goto nla_put_failure;
1846                 } else if (mask->vlan.vlan_tpid) {
1847                         if (nla_put_be16(skb, TCA_FLOWER_KEY_VLAN_ETH_TYPE,
1848                                          key->basic.n_proto))
1849                                 goto nla_put_failure;
1850                 }
1851         }
1852
1853         if ((key->basic.n_proto == htons(ETH_P_IP) ||
1854              key->basic.n_proto == htons(ETH_P_IPV6)) &&
1855             (fl_dump_key_val(skb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO,
1856                             &mask->basic.ip_proto, TCA_FLOWER_UNSPEC,
1857                             sizeof(key->basic.ip_proto)) ||
1858             fl_dump_key_ip(skb, false, &key->ip, &mask->ip)))
1859                 goto nla_put_failure;
1860
1861         if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS &&
1862             (fl_dump_key_val(skb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
1863                              &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
1864                              sizeof(key->ipv4.src)) ||
1865              fl_dump_key_val(skb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST,
1866                              &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK,
1867                              sizeof(key->ipv4.dst))))
1868                 goto nla_put_failure;
1869         else if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS &&
1870                  (fl_dump_key_val(skb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
1871                                   &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
1872                                   sizeof(key->ipv6.src)) ||
1873                   fl_dump_key_val(skb, &key->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST,
1874                                   &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK,
1875                                   sizeof(key->ipv6.dst))))
1876                 goto nla_put_failure;
1877
1878         if (key->basic.ip_proto == IPPROTO_TCP &&
1879             (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC,
1880                              &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK,
1881                              sizeof(key->tp.src)) ||
1882              fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_TCP_DST,
1883                              &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK,
1884                              sizeof(key->tp.dst)) ||
1885              fl_dump_key_val(skb, &key->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS,
1886                              &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK,
1887                              sizeof(key->tcp.flags))))
1888                 goto nla_put_failure;
1889         else if (key->basic.ip_proto == IPPROTO_UDP &&
1890                  (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_UDP_SRC,
1891                                   &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK,
1892                                   sizeof(key->tp.src)) ||
1893                   fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_UDP_DST,
1894                                   &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK,
1895                                   sizeof(key->tp.dst))))
1896                 goto nla_put_failure;
1897         else if (key->basic.ip_proto == IPPROTO_SCTP &&
1898                  (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_SCTP_SRC,
1899                                   &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK,
1900                                   sizeof(key->tp.src)) ||
1901                   fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_SCTP_DST,
1902                                   &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK,
1903                                   sizeof(key->tp.dst))))
1904                 goto nla_put_failure;
1905         else if (key->basic.n_proto == htons(ETH_P_IP) &&
1906                  key->basic.ip_proto == IPPROTO_ICMP &&
1907                  (fl_dump_key_val(skb, &key->icmp.type,
1908                                   TCA_FLOWER_KEY_ICMPV4_TYPE, &mask->icmp.type,
1909                                   TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,
1910                                   sizeof(key->icmp.type)) ||
1911                   fl_dump_key_val(skb, &key->icmp.code,
1912                                   TCA_FLOWER_KEY_ICMPV4_CODE, &mask->icmp.code,
1913                                   TCA_FLOWER_KEY_ICMPV4_CODE_MASK,
1914                                   sizeof(key->icmp.code))))
1915                 goto nla_put_failure;
1916         else if (key->basic.n_proto == htons(ETH_P_IPV6) &&
1917                  key->basic.ip_proto == IPPROTO_ICMPV6 &&
1918                  (fl_dump_key_val(skb, &key->icmp.type,
1919                                   TCA_FLOWER_KEY_ICMPV6_TYPE, &mask->icmp.type,
1920                                   TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,
1921                                   sizeof(key->icmp.type)) ||
1922                   fl_dump_key_val(skb, &key->icmp.code,
1923                                   TCA_FLOWER_KEY_ICMPV6_CODE, &mask->icmp.code,
1924                                   TCA_FLOWER_KEY_ICMPV6_CODE_MASK,
1925                                   sizeof(key->icmp.code))))
1926                 goto nla_put_failure;
1927         else if ((key->basic.n_proto == htons(ETH_P_ARP) ||
1928                   key->basic.n_proto == htons(ETH_P_RARP)) &&
1929                  (fl_dump_key_val(skb, &key->arp.sip,
1930                                   TCA_FLOWER_KEY_ARP_SIP, &mask->arp.sip,
1931                                   TCA_FLOWER_KEY_ARP_SIP_MASK,
1932                                   sizeof(key->arp.sip)) ||
1933                   fl_dump_key_val(skb, &key->arp.tip,
1934                                   TCA_FLOWER_KEY_ARP_TIP, &mask->arp.tip,
1935                                   TCA_FLOWER_KEY_ARP_TIP_MASK,
1936                                   sizeof(key->arp.tip)) ||
1937                   fl_dump_key_val(skb, &key->arp.op,
1938                                   TCA_FLOWER_KEY_ARP_OP, &mask->arp.op,
1939                                   TCA_FLOWER_KEY_ARP_OP_MASK,
1940                                   sizeof(key->arp.op)) ||
1941                   fl_dump_key_val(skb, key->arp.sha, TCA_FLOWER_KEY_ARP_SHA,
1942                                   mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK,
1943                                   sizeof(key->arp.sha)) ||
1944                   fl_dump_key_val(skb, key->arp.tha, TCA_FLOWER_KEY_ARP_THA,
1945                                   mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK,
1946                                   sizeof(key->arp.tha))))
1947                 goto nla_put_failure;
1948
1949         if ((key->basic.ip_proto == IPPROTO_TCP ||
1950              key->basic.ip_proto == IPPROTO_UDP ||
1951              key->basic.ip_proto == IPPROTO_SCTP) &&
1952              fl_dump_key_port_range(skb, key, mask))
1953                 goto nla_put_failure;
1954
1955         if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS &&
1956             (fl_dump_key_val(skb, &key->enc_ipv4.src,
1957                             TCA_FLOWER_KEY_ENC_IPV4_SRC, &mask->enc_ipv4.src,
1958                             TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,
1959                             sizeof(key->enc_ipv4.src)) ||
1960              fl_dump_key_val(skb, &key->enc_ipv4.dst,
1961                              TCA_FLOWER_KEY_ENC_IPV4_DST, &mask->enc_ipv4.dst,
1962                              TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,
1963                              sizeof(key->enc_ipv4.dst))))
1964                 goto nla_put_failure;
1965         else if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS &&
1966                  (fl_dump_key_val(skb, &key->enc_ipv6.src,
1967                             TCA_FLOWER_KEY_ENC_IPV6_SRC, &mask->enc_ipv6.src,
1968                             TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,
1969                             sizeof(key->enc_ipv6.src)) ||
1970                  fl_dump_key_val(skb, &key->enc_ipv6.dst,
1971                                  TCA_FLOWER_KEY_ENC_IPV6_DST,
1972                                  &mask->enc_ipv6.dst,
1973                                  TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,
1974                             sizeof(key->enc_ipv6.dst))))
1975                 goto nla_put_failure;
1976
1977         if (fl_dump_key_val(skb, &key->enc_key_id, TCA_FLOWER_KEY_ENC_KEY_ID,
1978                             &mask->enc_key_id, TCA_FLOWER_UNSPEC,
1979                             sizeof(key->enc_key_id)) ||
1980             fl_dump_key_val(skb, &key->enc_tp.src,
1981                             TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,
1982                             &mask->enc_tp.src,
1983                             TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,
1984                             sizeof(key->enc_tp.src)) ||
1985             fl_dump_key_val(skb, &key->enc_tp.dst,
1986                             TCA_FLOWER_KEY_ENC_UDP_DST_PORT,
1987                             &mask->enc_tp.dst,
1988                             TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,
1989                             sizeof(key->enc_tp.dst)) ||
1990             fl_dump_key_ip(skb, true, &key->enc_ip, &mask->enc_ip) ||
1991             fl_dump_key_enc_opt(skb, &key->enc_opts, &mask->enc_opts))
1992                 goto nla_put_failure;
1993
1994         if (fl_dump_key_flags(skb, key->control.flags, mask->control.flags))
1995                 goto nla_put_failure;
1996
1997         return 0;
1998
1999 nla_put_failure:
2000         return -EMSGSIZE;
2001 }
2002
2003 static int fl_dump(struct net *net, struct tcf_proto *tp, void *fh,
2004                    struct sk_buff *skb, struct tcmsg *t)
2005 {
2006         struct cls_fl_filter *f = fh;
2007         struct nlattr *nest;
2008         struct fl_flow_key *key, *mask;
2009
2010         if (!f)
2011                 return skb->len;
2012
2013         t->tcm_handle = f->handle;
2014
2015         nest = nla_nest_start(skb, TCA_OPTIONS);
2016         if (!nest)
2017                 goto nla_put_failure;
2018
2019         if (f->res.classid &&
2020             nla_put_u32(skb, TCA_FLOWER_CLASSID, f->res.classid))
2021                 goto nla_put_failure;
2022
2023         key = &f->key;
2024         mask = &f->mask->key;
2025
2026         if (fl_dump_key(skb, net, key, mask))
2027                 goto nla_put_failure;
2028
2029         if (!tc_skip_hw(f->flags))
2030                 fl_hw_update_stats(tp, f);
2031
2032         if (f->flags && nla_put_u32(skb, TCA_FLOWER_FLAGS, f->flags))
2033                 goto nla_put_failure;
2034
2035         if (nla_put_u32(skb, TCA_FLOWER_IN_HW_COUNT, f->in_hw_count))
2036                 goto nla_put_failure;
2037
2038         if (tcf_exts_dump(skb, &f->exts))
2039                 goto nla_put_failure;
2040
2041         nla_nest_end(skb, nest);
2042
2043         if (tcf_exts_dump_stats(skb, &f->exts) < 0)
2044                 goto nla_put_failure;
2045
2046         return skb->len;
2047
2048 nla_put_failure:
2049         nla_nest_cancel(skb, nest);
2050         return -1;
2051 }
2052
2053 static int fl_tmplt_dump(struct sk_buff *skb, struct net *net, void *tmplt_priv)
2054 {
2055         struct fl_flow_tmplt *tmplt = tmplt_priv;
2056         struct fl_flow_key *key, *mask;
2057         struct nlattr *nest;
2058
2059         nest = nla_nest_start(skb, TCA_OPTIONS);
2060         if (!nest)
2061                 goto nla_put_failure;
2062
2063         key = &tmplt->dummy_key;
2064         mask = &tmplt->mask;
2065
2066         if (fl_dump_key(skb, net, key, mask))
2067                 goto nla_put_failure;
2068
2069         nla_nest_end(skb, nest);
2070
2071         return skb->len;
2072
2073 nla_put_failure:
2074         nla_nest_cancel(skb, nest);
2075         return -EMSGSIZE;
2076 }
2077
2078 static void fl_bind_class(void *fh, u32 classid, unsigned long cl)
2079 {
2080         struct cls_fl_filter *f = fh;
2081
2082         if (f && f->res.classid == classid)
2083                 f->res.class = cl;
2084 }
2085
2086 static struct tcf_proto_ops cls_fl_ops __read_mostly = {
2087         .kind           = "flower",
2088         .classify       = fl_classify,
2089         .init           = fl_init,
2090         .destroy        = fl_destroy,
2091         .get            = fl_get,
2092         .change         = fl_change,
2093         .delete         = fl_delete,
2094         .walk           = fl_walk,
2095         .reoffload      = fl_reoffload,
2096         .dump           = fl_dump,
2097         .bind_class     = fl_bind_class,
2098         .tmplt_create   = fl_tmplt_create,
2099         .tmplt_destroy  = fl_tmplt_destroy,
2100         .tmplt_dump     = fl_tmplt_dump,
2101         .owner          = THIS_MODULE,
2102 };
2103
2104 static int __init cls_fl_init(void)
2105 {
2106         return register_tcf_proto_ops(&cls_fl_ops);
2107 }
2108
2109 static void __exit cls_fl_exit(void)
2110 {
2111         unregister_tcf_proto_ops(&cls_fl_ops);
2112 }
2113
2114 module_init(cls_fl_init);
2115 module_exit(cls_fl_exit);
2116
2117 MODULE_AUTHOR("Jiri Pirko <jiri@resnulli.us>");
2118 MODULE_DESCRIPTION("Flower classifier");
2119 MODULE_LICENSE("GPL v2");