GNU Linux-libre 4.14.295-gnu1
[releases.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
28 #include <net/dst.h>
29 #include <net/dst_metadata.h>
30
31 struct fl_flow_key {
32         int     indev_ifindex;
33         struct flow_dissector_key_control control;
34         struct flow_dissector_key_control enc_control;
35         struct flow_dissector_key_basic basic;
36         struct flow_dissector_key_eth_addrs eth;
37         struct flow_dissector_key_vlan vlan;
38         union {
39                 struct flow_dissector_key_ipv4_addrs ipv4;
40                 struct flow_dissector_key_ipv6_addrs ipv6;
41         };
42         struct flow_dissector_key_ports tp;
43         struct flow_dissector_key_icmp icmp;
44         struct flow_dissector_key_arp arp;
45         struct flow_dissector_key_keyid enc_key_id;
46         union {
47                 struct flow_dissector_key_ipv4_addrs enc_ipv4;
48                 struct flow_dissector_key_ipv6_addrs enc_ipv6;
49         };
50         struct flow_dissector_key_ports enc_tp;
51         struct flow_dissector_key_mpls mpls;
52         struct flow_dissector_key_tcp tcp;
53         struct flow_dissector_key_ip ip;
54 } __aligned(BITS_PER_LONG / 8); /* Ensure that we can do comparisons as longs. */
55
56 struct fl_flow_mask_range {
57         unsigned short int start;
58         unsigned short int end;
59 };
60
61 struct fl_flow_mask {
62         struct fl_flow_key key;
63         struct fl_flow_mask_range range;
64         struct rcu_head rcu;
65 };
66
67 struct cls_fl_head {
68         struct rhashtable ht;
69         struct fl_flow_mask mask;
70         struct flow_dissector dissector;
71         bool mask_assigned;
72         struct list_head filters;
73         struct rhashtable_params ht_params;
74         union {
75                 struct work_struct work;
76                 struct rcu_head rcu;
77         };
78         struct idr handle_idr;
79 };
80
81 struct cls_fl_filter {
82         struct rhash_head ht_node;
83         struct fl_flow_key mkey;
84         struct tcf_exts exts;
85         struct tcf_result res;
86         struct fl_flow_key key;
87         struct list_head list;
88         u32 handle;
89         u32 flags;
90         union {
91                 struct work_struct work;
92                 struct rcu_head rcu;
93         };
94         struct net_device *hw_dev;
95 };
96
97 static unsigned short int fl_mask_range(const struct fl_flow_mask *mask)
98 {
99         return mask->range.end - mask->range.start;
100 }
101
102 static void fl_mask_update_range(struct fl_flow_mask *mask)
103 {
104         const u8 *bytes = (const u8 *) &mask->key;
105         size_t size = sizeof(mask->key);
106         size_t i, first = 0, last = size - 1;
107
108         for (i = 0; i < sizeof(mask->key); i++) {
109                 if (bytes[i]) {
110                         if (!first && i)
111                                 first = i;
112                         last = i;
113                 }
114         }
115         mask->range.start = rounddown(first, sizeof(long));
116         mask->range.end = roundup(last + 1, sizeof(long));
117 }
118
119 static void *fl_key_get_start(struct fl_flow_key *key,
120                               const struct fl_flow_mask *mask)
121 {
122         return (u8 *) key + mask->range.start;
123 }
124
125 static void fl_set_masked_key(struct fl_flow_key *mkey, struct fl_flow_key *key,
126                               struct fl_flow_mask *mask)
127 {
128         const long *lkey = fl_key_get_start(key, mask);
129         const long *lmask = fl_key_get_start(&mask->key, mask);
130         long *lmkey = fl_key_get_start(mkey, mask);
131         int i;
132
133         for (i = 0; i < fl_mask_range(mask); i += sizeof(long))
134                 *lmkey++ = *lkey++ & *lmask++;
135 }
136
137 static void fl_clear_masked_range(struct fl_flow_key *key,
138                                   struct fl_flow_mask *mask)
139 {
140         memset(fl_key_get_start(key, mask), 0, fl_mask_range(mask));
141 }
142
143 static struct cls_fl_filter *fl_lookup(struct cls_fl_head *head,
144                                        struct fl_flow_key *mkey)
145 {
146         return rhashtable_lookup_fast(&head->ht,
147                                       fl_key_get_start(mkey, &head->mask),
148                                       head->ht_params);
149 }
150
151 static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp,
152                        struct tcf_result *res)
153 {
154         struct cls_fl_head *head = rcu_dereference_bh(tp->root);
155         struct cls_fl_filter *f;
156         struct fl_flow_key skb_key;
157         struct fl_flow_key skb_mkey;
158         struct ip_tunnel_info *info;
159
160         if (!atomic_read(&head->ht.nelems))
161                 return -1;
162
163         flow_dissector_init_keys(&skb_key.control, &skb_key.basic);
164         fl_clear_masked_range(&skb_key, &head->mask);
165
166         info = skb_tunnel_info(skb);
167         if (info) {
168                 struct ip_tunnel_key *key = &info->key;
169
170                 switch (ip_tunnel_info_af(info)) {
171                 case AF_INET:
172                         skb_key.enc_control.addr_type =
173                                 FLOW_DISSECTOR_KEY_IPV4_ADDRS;
174                         skb_key.enc_ipv4.src = key->u.ipv4.src;
175                         skb_key.enc_ipv4.dst = key->u.ipv4.dst;
176                         break;
177                 case AF_INET6:
178                         skb_key.enc_control.addr_type =
179                                 FLOW_DISSECTOR_KEY_IPV6_ADDRS;
180                         skb_key.enc_ipv6.src = key->u.ipv6.src;
181                         skb_key.enc_ipv6.dst = key->u.ipv6.dst;
182                         break;
183                 }
184
185                 skb_key.enc_key_id.keyid = tunnel_id_to_key32(key->tun_id);
186                 skb_key.enc_tp.src = key->tp_src;
187                 skb_key.enc_tp.dst = key->tp_dst;
188         }
189
190         skb_key.indev_ifindex = skb->skb_iif;
191         /* skb_flow_dissect() does not set n_proto in case an unknown protocol,
192          * so do it rather here.
193          */
194         skb_key.basic.n_proto = skb->protocol;
195         skb_flow_dissect(skb, &head->dissector, &skb_key, 0);
196
197         fl_set_masked_key(&skb_mkey, &skb_key, &head->mask);
198
199         f = fl_lookup(head, &skb_mkey);
200         if (f && !tc_skip_sw(f->flags)) {
201                 *res = f->res;
202                 return tcf_exts_exec(skb, &f->exts, res);
203         }
204         return -1;
205 }
206
207 static int fl_init(struct tcf_proto *tp)
208 {
209         struct cls_fl_head *head;
210
211         head = kzalloc(sizeof(*head), GFP_KERNEL);
212         if (!head)
213                 return -ENOBUFS;
214
215         INIT_LIST_HEAD_RCU(&head->filters);
216         rcu_assign_pointer(tp->root, head);
217         idr_init(&head->handle_idr);
218
219         return 0;
220 }
221
222 static void __fl_destroy_filter(struct cls_fl_filter *f)
223 {
224         tcf_exts_destroy(&f->exts);
225         tcf_exts_put_net(&f->exts);
226         kfree(f);
227 }
228
229 static void fl_destroy_filter_work(struct work_struct *work)
230 {
231         struct cls_fl_filter *f = container_of(work, struct cls_fl_filter, work);
232
233         rtnl_lock();
234         __fl_destroy_filter(f);
235         rtnl_unlock();
236 }
237
238 static void fl_destroy_filter(struct rcu_head *head)
239 {
240         struct cls_fl_filter *f = container_of(head, struct cls_fl_filter, rcu);
241
242         INIT_WORK(&f->work, fl_destroy_filter_work);
243         tcf_queue_work(&f->work);
244 }
245
246 static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f)
247 {
248         struct tc_cls_flower_offload cls_flower = {};
249         struct net_device *dev = f->hw_dev;
250
251         if (!tc_can_offload(dev))
252                 return;
253
254         tc_cls_common_offload_init(&cls_flower.common, tp);
255         cls_flower.command = TC_CLSFLOWER_DESTROY;
256         cls_flower.cookie = (unsigned long) f;
257         cls_flower.egress_dev = f->hw_dev != tp->q->dev_queue->dev;
258
259         dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER, &cls_flower);
260 }
261
262 static int fl_hw_replace_filter(struct tcf_proto *tp,
263                                 struct flow_dissector *dissector,
264                                 struct fl_flow_key *mask,
265                                 struct cls_fl_filter *f)
266 {
267         struct net_device *dev = tp->q->dev_queue->dev;
268         struct tc_cls_flower_offload cls_flower = {};
269         int err;
270
271         if (!tc_can_offload(dev)) {
272                 if (tcf_exts_get_dev(dev, &f->exts, &f->hw_dev) ||
273                     (f->hw_dev && !tc_can_offload(f->hw_dev))) {
274                         f->hw_dev = dev;
275                         return tc_skip_sw(f->flags) ? -EINVAL : 0;
276                 }
277                 dev = f->hw_dev;
278                 cls_flower.egress_dev = true;
279         } else {
280                 f->hw_dev = dev;
281         }
282
283         tc_cls_common_offload_init(&cls_flower.common, tp);
284         cls_flower.command = TC_CLSFLOWER_REPLACE;
285         cls_flower.cookie = (unsigned long) f;
286         cls_flower.dissector = dissector;
287         cls_flower.mask = mask;
288         cls_flower.key = &f->mkey;
289         cls_flower.exts = &f->exts;
290
291         err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER,
292                                             &cls_flower);
293         if (!err)
294                 f->flags |= TCA_CLS_FLAGS_IN_HW;
295
296         if (tc_skip_sw(f->flags))
297                 return err;
298         return 0;
299 }
300
301 static void fl_hw_update_stats(struct tcf_proto *tp, struct cls_fl_filter *f)
302 {
303         struct tc_cls_flower_offload cls_flower = {};
304         struct net_device *dev = f->hw_dev;
305
306         if (!tc_can_offload(dev))
307                 return;
308
309         tc_cls_common_offload_init(&cls_flower.common, tp);
310         cls_flower.command = TC_CLSFLOWER_STATS;
311         cls_flower.cookie = (unsigned long) f;
312         cls_flower.exts = &f->exts;
313         cls_flower.egress_dev = f->hw_dev != tp->q->dev_queue->dev;
314
315         dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER,
316                                       &cls_flower);
317 }
318
319 static void __fl_delete(struct tcf_proto *tp, struct cls_fl_filter *f)
320 {
321         struct cls_fl_head *head = rtnl_dereference(tp->root);
322
323         idr_remove_ext(&head->handle_idr, f->handle);
324         list_del_rcu(&f->list);
325         if (!tc_skip_hw(f->flags))
326                 fl_hw_destroy_filter(tp, f);
327         tcf_unbind_filter(tp, &f->res);
328         if (tcf_exts_get_net(&f->exts))
329                 call_rcu(&f->rcu, fl_destroy_filter);
330         else
331                 __fl_destroy_filter(f);
332 }
333
334 static void fl_destroy_sleepable(struct work_struct *work)
335 {
336         struct cls_fl_head *head = container_of(work, struct cls_fl_head,
337                                                 work);
338         if (head->mask_assigned)
339                 rhashtable_destroy(&head->ht);
340         kfree(head);
341         module_put(THIS_MODULE);
342 }
343
344 static void fl_destroy_rcu(struct rcu_head *rcu)
345 {
346         struct cls_fl_head *head = container_of(rcu, struct cls_fl_head, rcu);
347
348         INIT_WORK(&head->work, fl_destroy_sleepable);
349         schedule_work(&head->work);
350 }
351
352 static void fl_destroy(struct tcf_proto *tp)
353 {
354         struct cls_fl_head *head = rtnl_dereference(tp->root);
355         struct cls_fl_filter *f, *next;
356
357         list_for_each_entry_safe(f, next, &head->filters, list)
358                 __fl_delete(tp, f);
359         idr_destroy(&head->handle_idr);
360
361         __module_get(THIS_MODULE);
362         call_rcu(&head->rcu, fl_destroy_rcu);
363 }
364
365 static void *fl_get(struct tcf_proto *tp, u32 handle)
366 {
367         struct cls_fl_head *head = rtnl_dereference(tp->root);
368
369         return idr_find_ext(&head->handle_idr, handle);
370 }
371
372 static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = {
373         [TCA_FLOWER_UNSPEC]             = { .type = NLA_UNSPEC },
374         [TCA_FLOWER_CLASSID]            = { .type = NLA_U32 },
375         [TCA_FLOWER_INDEV]              = { .type = NLA_STRING,
376                                             .len = IFNAMSIZ },
377         [TCA_FLOWER_KEY_ETH_DST]        = { .len = ETH_ALEN },
378         [TCA_FLOWER_KEY_ETH_DST_MASK]   = { .len = ETH_ALEN },
379         [TCA_FLOWER_KEY_ETH_SRC]        = { .len = ETH_ALEN },
380         [TCA_FLOWER_KEY_ETH_SRC_MASK]   = { .len = ETH_ALEN },
381         [TCA_FLOWER_KEY_ETH_TYPE]       = { .type = NLA_U16 },
382         [TCA_FLOWER_KEY_IP_PROTO]       = { .type = NLA_U8 },
383         [TCA_FLOWER_KEY_IPV4_SRC]       = { .type = NLA_U32 },
384         [TCA_FLOWER_KEY_IPV4_SRC_MASK]  = { .type = NLA_U32 },
385         [TCA_FLOWER_KEY_IPV4_DST]       = { .type = NLA_U32 },
386         [TCA_FLOWER_KEY_IPV4_DST_MASK]  = { .type = NLA_U32 },
387         [TCA_FLOWER_KEY_IPV6_SRC]       = { .len = sizeof(struct in6_addr) },
388         [TCA_FLOWER_KEY_IPV6_SRC_MASK]  = { .len = sizeof(struct in6_addr) },
389         [TCA_FLOWER_KEY_IPV6_DST]       = { .len = sizeof(struct in6_addr) },
390         [TCA_FLOWER_KEY_IPV6_DST_MASK]  = { .len = sizeof(struct in6_addr) },
391         [TCA_FLOWER_KEY_TCP_SRC]        = { .type = NLA_U16 },
392         [TCA_FLOWER_KEY_TCP_DST]        = { .type = NLA_U16 },
393         [TCA_FLOWER_KEY_UDP_SRC]        = { .type = NLA_U16 },
394         [TCA_FLOWER_KEY_UDP_DST]        = { .type = NLA_U16 },
395         [TCA_FLOWER_KEY_VLAN_ID]        = { .type = NLA_U16 },
396         [TCA_FLOWER_KEY_VLAN_PRIO]      = { .type = NLA_U8 },
397         [TCA_FLOWER_KEY_VLAN_ETH_TYPE]  = { .type = NLA_U16 },
398         [TCA_FLOWER_KEY_ENC_KEY_ID]     = { .type = NLA_U32 },
399         [TCA_FLOWER_KEY_ENC_IPV4_SRC]   = { .type = NLA_U32 },
400         [TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK] = { .type = NLA_U32 },
401         [TCA_FLOWER_KEY_ENC_IPV4_DST]   = { .type = NLA_U32 },
402         [TCA_FLOWER_KEY_ENC_IPV4_DST_MASK] = { .type = NLA_U32 },
403         [TCA_FLOWER_KEY_ENC_IPV6_SRC]   = { .len = sizeof(struct in6_addr) },
404         [TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK] = { .len = sizeof(struct in6_addr) },
405         [TCA_FLOWER_KEY_ENC_IPV6_DST]   = { .len = sizeof(struct in6_addr) },
406         [TCA_FLOWER_KEY_ENC_IPV6_DST_MASK] = { .len = sizeof(struct in6_addr) },
407         [TCA_FLOWER_KEY_TCP_SRC_MASK]   = { .type = NLA_U16 },
408         [TCA_FLOWER_KEY_TCP_DST_MASK]   = { .type = NLA_U16 },
409         [TCA_FLOWER_KEY_UDP_SRC_MASK]   = { .type = NLA_U16 },
410         [TCA_FLOWER_KEY_UDP_DST_MASK]   = { .type = NLA_U16 },
411         [TCA_FLOWER_KEY_SCTP_SRC_MASK]  = { .type = NLA_U16 },
412         [TCA_FLOWER_KEY_SCTP_DST_MASK]  = { .type = NLA_U16 },
413         [TCA_FLOWER_KEY_SCTP_SRC]       = { .type = NLA_U16 },
414         [TCA_FLOWER_KEY_SCTP_DST]       = { .type = NLA_U16 },
415         [TCA_FLOWER_KEY_ENC_UDP_SRC_PORT]       = { .type = NLA_U16 },
416         [TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK]  = { .type = NLA_U16 },
417         [TCA_FLOWER_KEY_ENC_UDP_DST_PORT]       = { .type = NLA_U16 },
418         [TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK]  = { .type = NLA_U16 },
419         [TCA_FLOWER_KEY_FLAGS]          = { .type = NLA_U32 },
420         [TCA_FLOWER_KEY_FLAGS_MASK]     = { .type = NLA_U32 },
421         [TCA_FLOWER_KEY_ICMPV4_TYPE]    = { .type = NLA_U8 },
422         [TCA_FLOWER_KEY_ICMPV4_TYPE_MASK] = { .type = NLA_U8 },
423         [TCA_FLOWER_KEY_ICMPV4_CODE]    = { .type = NLA_U8 },
424         [TCA_FLOWER_KEY_ICMPV4_CODE_MASK] = { .type = NLA_U8 },
425         [TCA_FLOWER_KEY_ICMPV6_TYPE]    = { .type = NLA_U8 },
426         [TCA_FLOWER_KEY_ICMPV6_TYPE_MASK] = { .type = NLA_U8 },
427         [TCA_FLOWER_KEY_ICMPV6_CODE]    = { .type = NLA_U8 },
428         [TCA_FLOWER_KEY_ICMPV6_CODE_MASK] = { .type = NLA_U8 },
429         [TCA_FLOWER_KEY_ARP_SIP]        = { .type = NLA_U32 },
430         [TCA_FLOWER_KEY_ARP_SIP_MASK]   = { .type = NLA_U32 },
431         [TCA_FLOWER_KEY_ARP_TIP]        = { .type = NLA_U32 },
432         [TCA_FLOWER_KEY_ARP_TIP_MASK]   = { .type = NLA_U32 },
433         [TCA_FLOWER_KEY_ARP_OP]         = { .type = NLA_U8 },
434         [TCA_FLOWER_KEY_ARP_OP_MASK]    = { .type = NLA_U8 },
435         [TCA_FLOWER_KEY_ARP_SHA]        = { .len = ETH_ALEN },
436         [TCA_FLOWER_KEY_ARP_SHA_MASK]   = { .len = ETH_ALEN },
437         [TCA_FLOWER_KEY_ARP_THA]        = { .len = ETH_ALEN },
438         [TCA_FLOWER_KEY_ARP_THA_MASK]   = { .len = ETH_ALEN },
439         [TCA_FLOWER_KEY_MPLS_TTL]       = { .type = NLA_U8 },
440         [TCA_FLOWER_KEY_MPLS_BOS]       = { .type = NLA_U8 },
441         [TCA_FLOWER_KEY_MPLS_TC]        = { .type = NLA_U8 },
442         [TCA_FLOWER_KEY_MPLS_LABEL]     = { .type = NLA_U32 },
443         [TCA_FLOWER_KEY_TCP_FLAGS]      = { .type = NLA_U16 },
444         [TCA_FLOWER_KEY_TCP_FLAGS_MASK] = { .type = NLA_U16 },
445         [TCA_FLOWER_KEY_IP_TOS]         = { .type = NLA_U8 },
446         [TCA_FLOWER_KEY_IP_TOS_MASK]    = { .type = NLA_U8 },
447         [TCA_FLOWER_KEY_IP_TTL]         = { .type = NLA_U8 },
448         [TCA_FLOWER_KEY_IP_TTL_MASK]    = { .type = NLA_U8 },
449         [TCA_FLOWER_FLAGS]              = { .type = NLA_U32 },
450 };
451
452 static void fl_set_key_val(struct nlattr **tb,
453                            void *val, int val_type,
454                            void *mask, int mask_type, int len)
455 {
456         if (!tb[val_type])
457                 return;
458         memcpy(val, nla_data(tb[val_type]), len);
459         if (mask_type == TCA_FLOWER_UNSPEC || !tb[mask_type])
460                 memset(mask, 0xff, len);
461         else
462                 memcpy(mask, nla_data(tb[mask_type]), len);
463 }
464
465 static int fl_set_key_mpls(struct nlattr **tb,
466                            struct flow_dissector_key_mpls *key_val,
467                            struct flow_dissector_key_mpls *key_mask)
468 {
469         if (tb[TCA_FLOWER_KEY_MPLS_TTL]) {
470                 key_val->mpls_ttl = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TTL]);
471                 key_mask->mpls_ttl = MPLS_TTL_MASK;
472         }
473         if (tb[TCA_FLOWER_KEY_MPLS_BOS]) {
474                 u8 bos = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_BOS]);
475
476                 if (bos & ~MPLS_BOS_MASK)
477                         return -EINVAL;
478                 key_val->mpls_bos = bos;
479                 key_mask->mpls_bos = MPLS_BOS_MASK;
480         }
481         if (tb[TCA_FLOWER_KEY_MPLS_TC]) {
482                 u8 tc = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TC]);
483
484                 if (tc & ~MPLS_TC_MASK)
485                         return -EINVAL;
486                 key_val->mpls_tc = tc;
487                 key_mask->mpls_tc = MPLS_TC_MASK;
488         }
489         if (tb[TCA_FLOWER_KEY_MPLS_LABEL]) {
490                 u32 label = nla_get_u32(tb[TCA_FLOWER_KEY_MPLS_LABEL]);
491
492                 if (label & ~MPLS_LABEL_MASK)
493                         return -EINVAL;
494                 key_val->mpls_label = label;
495                 key_mask->mpls_label = MPLS_LABEL_MASK;
496         }
497         return 0;
498 }
499
500 static void fl_set_key_vlan(struct nlattr **tb,
501                             struct flow_dissector_key_vlan *key_val,
502                             struct flow_dissector_key_vlan *key_mask)
503 {
504 #define VLAN_PRIORITY_MASK      0x7
505
506         if (tb[TCA_FLOWER_KEY_VLAN_ID]) {
507                 key_val->vlan_id =
508                         nla_get_u16(tb[TCA_FLOWER_KEY_VLAN_ID]) & VLAN_VID_MASK;
509                 key_mask->vlan_id = VLAN_VID_MASK;
510         }
511         if (tb[TCA_FLOWER_KEY_VLAN_PRIO]) {
512                 key_val->vlan_priority =
513                         nla_get_u8(tb[TCA_FLOWER_KEY_VLAN_PRIO]) &
514                         VLAN_PRIORITY_MASK;
515                 key_mask->vlan_priority = VLAN_PRIORITY_MASK;
516         }
517 }
518
519 static void fl_set_key_flag(u32 flower_key, u32 flower_mask,
520                             u32 *dissector_key, u32 *dissector_mask,
521                             u32 flower_flag_bit, u32 dissector_flag_bit)
522 {
523         if (flower_mask & flower_flag_bit) {
524                 *dissector_mask |= dissector_flag_bit;
525                 if (flower_key & flower_flag_bit)
526                         *dissector_key |= dissector_flag_bit;
527         }
528 }
529
530 static int fl_set_key_flags(struct nlattr **tb,
531                             u32 *flags_key, u32 *flags_mask)
532 {
533         u32 key, mask;
534
535         /* mask is mandatory for flags */
536         if (!tb[TCA_FLOWER_KEY_FLAGS_MASK])
537                 return -EINVAL;
538
539         key = be32_to_cpu(nla_get_u32(tb[TCA_FLOWER_KEY_FLAGS]));
540         mask = be32_to_cpu(nla_get_u32(tb[TCA_FLOWER_KEY_FLAGS_MASK]));
541
542         *flags_key  = 0;
543         *flags_mask = 0;
544
545         fl_set_key_flag(key, mask, flags_key, flags_mask,
546                         TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT, FLOW_DIS_IS_FRAGMENT);
547
548         return 0;
549 }
550
551 static void fl_set_key_ip(struct nlattr **tb,
552                           struct flow_dissector_key_ip *key,
553                           struct flow_dissector_key_ip *mask)
554 {
555                 fl_set_key_val(tb, &key->tos, TCA_FLOWER_KEY_IP_TOS,
556                                &mask->tos, TCA_FLOWER_KEY_IP_TOS_MASK,
557                                sizeof(key->tos));
558
559                 fl_set_key_val(tb, &key->ttl, TCA_FLOWER_KEY_IP_TTL,
560                                &mask->ttl, TCA_FLOWER_KEY_IP_TTL_MASK,
561                                sizeof(key->ttl));
562 }
563
564 static int fl_set_key(struct net *net, struct nlattr **tb,
565                       struct fl_flow_key *key, struct fl_flow_key *mask)
566 {
567         __be16 ethertype;
568         int ret = 0;
569 #ifdef CONFIG_NET_CLS_IND
570         if (tb[TCA_FLOWER_INDEV]) {
571                 int err = tcf_change_indev(net, tb[TCA_FLOWER_INDEV]);
572                 if (err < 0)
573                         return err;
574                 key->indev_ifindex = err;
575                 mask->indev_ifindex = 0xffffffff;
576         }
577 #endif
578
579         fl_set_key_val(tb, key->eth.dst, TCA_FLOWER_KEY_ETH_DST,
580                        mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK,
581                        sizeof(key->eth.dst));
582         fl_set_key_val(tb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC,
583                        mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK,
584                        sizeof(key->eth.src));
585
586         if (tb[TCA_FLOWER_KEY_ETH_TYPE]) {
587                 ethertype = nla_get_be16(tb[TCA_FLOWER_KEY_ETH_TYPE]);
588
589                 if (ethertype == htons(ETH_P_8021Q)) {
590                         fl_set_key_vlan(tb, &key->vlan, &mask->vlan);
591                         fl_set_key_val(tb, &key->basic.n_proto,
592                                        TCA_FLOWER_KEY_VLAN_ETH_TYPE,
593                                        &mask->basic.n_proto, TCA_FLOWER_UNSPEC,
594                                        sizeof(key->basic.n_proto));
595                 } else {
596                         key->basic.n_proto = ethertype;
597                         mask->basic.n_proto = cpu_to_be16(~0);
598                 }
599         }
600
601         if (key->basic.n_proto == htons(ETH_P_IP) ||
602             key->basic.n_proto == htons(ETH_P_IPV6)) {
603                 fl_set_key_val(tb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO,
604                                &mask->basic.ip_proto, TCA_FLOWER_UNSPEC,
605                                sizeof(key->basic.ip_proto));
606                 fl_set_key_ip(tb, &key->ip, &mask->ip);
607         }
608
609         if (tb[TCA_FLOWER_KEY_IPV4_SRC] || tb[TCA_FLOWER_KEY_IPV4_DST]) {
610                 key->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
611                 mask->control.addr_type = ~0;
612                 fl_set_key_val(tb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
613                                &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
614                                sizeof(key->ipv4.src));
615                 fl_set_key_val(tb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST,
616                                &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK,
617                                sizeof(key->ipv4.dst));
618         } else if (tb[TCA_FLOWER_KEY_IPV6_SRC] || tb[TCA_FLOWER_KEY_IPV6_DST]) {
619                 key->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
620                 mask->control.addr_type = ~0;
621                 fl_set_key_val(tb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
622                                &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
623                                sizeof(key->ipv6.src));
624                 fl_set_key_val(tb, &key->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST,
625                                &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK,
626                                sizeof(key->ipv6.dst));
627         }
628
629         if (key->basic.ip_proto == IPPROTO_TCP) {
630                 fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC,
631                                &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK,
632                                sizeof(key->tp.src));
633                 fl_set_key_val(tb, &key->tp.dst, TCA_FLOWER_KEY_TCP_DST,
634                                &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK,
635                                sizeof(key->tp.dst));
636                 fl_set_key_val(tb, &key->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS,
637                                &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK,
638                                sizeof(key->tcp.flags));
639         } else if (key->basic.ip_proto == IPPROTO_UDP) {
640                 fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_UDP_SRC,
641                                &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK,
642                                sizeof(key->tp.src));
643                 fl_set_key_val(tb, &key->tp.dst, TCA_FLOWER_KEY_UDP_DST,
644                                &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK,
645                                sizeof(key->tp.dst));
646         } else if (key->basic.ip_proto == IPPROTO_SCTP) {
647                 fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_SCTP_SRC,
648                                &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK,
649                                sizeof(key->tp.src));
650                 fl_set_key_val(tb, &key->tp.dst, TCA_FLOWER_KEY_SCTP_DST,
651                                &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK,
652                                sizeof(key->tp.dst));
653         } else if (key->basic.n_proto == htons(ETH_P_IP) &&
654                    key->basic.ip_proto == IPPROTO_ICMP) {
655                 fl_set_key_val(tb, &key->icmp.type, TCA_FLOWER_KEY_ICMPV4_TYPE,
656                                &mask->icmp.type,
657                                TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,
658                                sizeof(key->icmp.type));
659                 fl_set_key_val(tb, &key->icmp.code, TCA_FLOWER_KEY_ICMPV4_CODE,
660                                &mask->icmp.code,
661                                TCA_FLOWER_KEY_ICMPV4_CODE_MASK,
662                                sizeof(key->icmp.code));
663         } else if (key->basic.n_proto == htons(ETH_P_IPV6) &&
664                    key->basic.ip_proto == IPPROTO_ICMPV6) {
665                 fl_set_key_val(tb, &key->icmp.type, TCA_FLOWER_KEY_ICMPV6_TYPE,
666                                &mask->icmp.type,
667                                TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,
668                                sizeof(key->icmp.type));
669                 fl_set_key_val(tb, &key->icmp.code, TCA_FLOWER_KEY_ICMPV6_CODE,
670                                &mask->icmp.code,
671                                TCA_FLOWER_KEY_ICMPV6_CODE_MASK,
672                                sizeof(key->icmp.code));
673         } else if (key->basic.n_proto == htons(ETH_P_MPLS_UC) ||
674                    key->basic.n_proto == htons(ETH_P_MPLS_MC)) {
675                 ret = fl_set_key_mpls(tb, &key->mpls, &mask->mpls);
676                 if (ret)
677                         return ret;
678         } else if (key->basic.n_proto == htons(ETH_P_ARP) ||
679                    key->basic.n_proto == htons(ETH_P_RARP)) {
680                 fl_set_key_val(tb, &key->arp.sip, TCA_FLOWER_KEY_ARP_SIP,
681                                &mask->arp.sip, TCA_FLOWER_KEY_ARP_SIP_MASK,
682                                sizeof(key->arp.sip));
683                 fl_set_key_val(tb, &key->arp.tip, TCA_FLOWER_KEY_ARP_TIP,
684                                &mask->arp.tip, TCA_FLOWER_KEY_ARP_TIP_MASK,
685                                sizeof(key->arp.tip));
686                 fl_set_key_val(tb, &key->arp.op, TCA_FLOWER_KEY_ARP_OP,
687                                &mask->arp.op, TCA_FLOWER_KEY_ARP_OP_MASK,
688                                sizeof(key->arp.op));
689                 fl_set_key_val(tb, key->arp.sha, TCA_FLOWER_KEY_ARP_SHA,
690                                mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK,
691                                sizeof(key->arp.sha));
692                 fl_set_key_val(tb, key->arp.tha, TCA_FLOWER_KEY_ARP_THA,
693                                mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK,
694                                sizeof(key->arp.tha));
695         }
696
697         if (tb[TCA_FLOWER_KEY_ENC_IPV4_SRC] ||
698             tb[TCA_FLOWER_KEY_ENC_IPV4_DST]) {
699                 key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
700                 mask->enc_control.addr_type = ~0;
701                 fl_set_key_val(tb, &key->enc_ipv4.src,
702                                TCA_FLOWER_KEY_ENC_IPV4_SRC,
703                                &mask->enc_ipv4.src,
704                                TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,
705                                sizeof(key->enc_ipv4.src));
706                 fl_set_key_val(tb, &key->enc_ipv4.dst,
707                                TCA_FLOWER_KEY_ENC_IPV4_DST,
708                                &mask->enc_ipv4.dst,
709                                TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,
710                                sizeof(key->enc_ipv4.dst));
711         }
712
713         if (tb[TCA_FLOWER_KEY_ENC_IPV6_SRC] ||
714             tb[TCA_FLOWER_KEY_ENC_IPV6_DST]) {
715                 key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
716                 mask->enc_control.addr_type = ~0;
717                 fl_set_key_val(tb, &key->enc_ipv6.src,
718                                TCA_FLOWER_KEY_ENC_IPV6_SRC,
719                                &mask->enc_ipv6.src,
720                                TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,
721                                sizeof(key->enc_ipv6.src));
722                 fl_set_key_val(tb, &key->enc_ipv6.dst,
723                                TCA_FLOWER_KEY_ENC_IPV6_DST,
724                                &mask->enc_ipv6.dst,
725                                TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,
726                                sizeof(key->enc_ipv6.dst));
727         }
728
729         fl_set_key_val(tb, &key->enc_key_id.keyid, TCA_FLOWER_KEY_ENC_KEY_ID,
730                        &mask->enc_key_id.keyid, TCA_FLOWER_UNSPEC,
731                        sizeof(key->enc_key_id.keyid));
732
733         fl_set_key_val(tb, &key->enc_tp.src, TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,
734                        &mask->enc_tp.src, TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,
735                        sizeof(key->enc_tp.src));
736
737         fl_set_key_val(tb, &key->enc_tp.dst, TCA_FLOWER_KEY_ENC_UDP_DST_PORT,
738                        &mask->enc_tp.dst, TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,
739                        sizeof(key->enc_tp.dst));
740
741         if (tb[TCA_FLOWER_KEY_FLAGS])
742                 ret = fl_set_key_flags(tb, &key->control.flags, &mask->control.flags);
743
744         return ret;
745 }
746
747 static bool fl_mask_eq(struct fl_flow_mask *mask1,
748                        struct fl_flow_mask *mask2)
749 {
750         const long *lmask1 = fl_key_get_start(&mask1->key, mask1);
751         const long *lmask2 = fl_key_get_start(&mask2->key, mask2);
752
753         return !memcmp(&mask1->range, &mask2->range, sizeof(mask1->range)) &&
754                !memcmp(lmask1, lmask2, fl_mask_range(mask1));
755 }
756
757 static const struct rhashtable_params fl_ht_params = {
758         .key_offset = offsetof(struct cls_fl_filter, mkey), /* base offset */
759         .head_offset = offsetof(struct cls_fl_filter, ht_node),
760         .automatic_shrinking = true,
761 };
762
763 static int fl_init_hashtable(struct cls_fl_head *head,
764                              struct fl_flow_mask *mask)
765 {
766         head->ht_params = fl_ht_params;
767         head->ht_params.key_len = fl_mask_range(mask);
768         head->ht_params.key_offset += mask->range.start;
769
770         return rhashtable_init(&head->ht, &head->ht_params);
771 }
772
773 #define FL_KEY_MEMBER_OFFSET(member) offsetof(struct fl_flow_key, member)
774 #define FL_KEY_MEMBER_SIZE(member) (sizeof(((struct fl_flow_key *) 0)->member))
775
776 #define FL_KEY_IS_MASKED(mask, member)                                          \
777         memchr_inv(((char *)mask) + FL_KEY_MEMBER_OFFSET(member),               \
778                    0, FL_KEY_MEMBER_SIZE(member))                               \
779
780 #define FL_KEY_SET(keys, cnt, id, member)                                       \
781         do {                                                                    \
782                 keys[cnt].key_id = id;                                          \
783                 keys[cnt].offset = FL_KEY_MEMBER_OFFSET(member);                \
784                 cnt++;                                                          \
785         } while(0);
786
787 #define FL_KEY_SET_IF_MASKED(mask, keys, cnt, id, member)                       \
788         do {                                                                    \
789                 if (FL_KEY_IS_MASKED(mask, member))                             \
790                         FL_KEY_SET(keys, cnt, id, member);                      \
791         } while(0);
792
793 static void fl_init_dissector(struct cls_fl_head *head,
794                               struct fl_flow_mask *mask)
795 {
796         struct flow_dissector_key keys[FLOW_DISSECTOR_KEY_MAX];
797         size_t cnt = 0;
798
799         FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_CONTROL, control);
800         FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_BASIC, basic);
801         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
802                              FLOW_DISSECTOR_KEY_ETH_ADDRS, eth);
803         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
804                              FLOW_DISSECTOR_KEY_IPV4_ADDRS, ipv4);
805         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
806                              FLOW_DISSECTOR_KEY_IPV6_ADDRS, ipv6);
807         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
808                              FLOW_DISSECTOR_KEY_PORTS, tp);
809         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
810                              FLOW_DISSECTOR_KEY_IP, ip);
811         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
812                              FLOW_DISSECTOR_KEY_TCP, tcp);
813         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
814                              FLOW_DISSECTOR_KEY_ICMP, icmp);
815         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
816                              FLOW_DISSECTOR_KEY_ARP, arp);
817         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
818                              FLOW_DISSECTOR_KEY_MPLS, mpls);
819         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
820                              FLOW_DISSECTOR_KEY_VLAN, vlan);
821         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
822                              FLOW_DISSECTOR_KEY_ENC_KEYID, enc_key_id);
823         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
824                              FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS, enc_ipv4);
825         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
826                              FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS, enc_ipv6);
827         if (FL_KEY_IS_MASKED(&mask->key, enc_ipv4) ||
828             FL_KEY_IS_MASKED(&mask->key, enc_ipv6))
829                 FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_ENC_CONTROL,
830                            enc_control);
831         FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
832                              FLOW_DISSECTOR_KEY_ENC_PORTS, enc_tp);
833
834         skb_flow_dissector_init(&head->dissector, keys, cnt);
835 }
836
837 static int fl_check_assign_mask(struct cls_fl_head *head,
838                                 struct fl_flow_mask *mask)
839 {
840         int err;
841
842         if (head->mask_assigned) {
843                 if (!fl_mask_eq(&head->mask, mask))
844                         return -EINVAL;
845                 else
846                         return 0;
847         }
848
849         /* Mask is not assigned yet. So assign it and init hashtable
850          * according to that.
851          */
852         err = fl_init_hashtable(head, mask);
853         if (err)
854                 return err;
855         memcpy(&head->mask, mask, sizeof(head->mask));
856         head->mask_assigned = true;
857
858         fl_init_dissector(head, mask);
859
860         return 0;
861 }
862
863 static int fl_set_parms(struct net *net, struct tcf_proto *tp,
864                         struct cls_fl_filter *f, struct fl_flow_mask *mask,
865                         unsigned long base, struct nlattr **tb,
866                         struct nlattr *est, bool ovr)
867 {
868         int err;
869
870         err = tcf_exts_validate(net, tp, tb, est, &f->exts, ovr);
871         if (err < 0)
872                 return err;
873
874         if (tb[TCA_FLOWER_CLASSID]) {
875                 f->res.classid = nla_get_u32(tb[TCA_FLOWER_CLASSID]);
876                 tcf_bind_filter(tp, &f->res, base);
877         }
878
879         err = fl_set_key(net, tb, &f->key, &mask->key);
880         if (err)
881                 return err;
882
883         fl_mask_update_range(mask);
884         fl_set_masked_key(&f->mkey, &f->key, mask);
885
886         return 0;
887 }
888
889 static int fl_change(struct net *net, struct sk_buff *in_skb,
890                      struct tcf_proto *tp, unsigned long base,
891                      u32 handle, struct nlattr **tca,
892                      void **arg, bool ovr)
893 {
894         struct cls_fl_head *head = rtnl_dereference(tp->root);
895         struct cls_fl_filter *fold = *arg;
896         struct cls_fl_filter *fnew;
897         struct nlattr **tb;
898         struct fl_flow_mask mask = {};
899         unsigned long idr_index;
900         int err;
901
902         if (!tca[TCA_OPTIONS])
903                 return -EINVAL;
904
905         tb = kcalloc(TCA_FLOWER_MAX + 1, sizeof(struct nlattr *), GFP_KERNEL);
906         if (!tb)
907                 return -ENOBUFS;
908
909         err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS],
910                                fl_policy, NULL);
911         if (err < 0)
912                 goto errout_tb;
913
914         if (fold && handle && fold->handle != handle) {
915                 err = -EINVAL;
916                 goto errout_tb;
917         }
918
919         fnew = kzalloc(sizeof(*fnew), GFP_KERNEL);
920         if (!fnew) {
921                 err = -ENOBUFS;
922                 goto errout_tb;
923         }
924
925         err = tcf_exts_init(&fnew->exts, TCA_FLOWER_ACT, 0);
926         if (err < 0)
927                 goto errout;
928
929         if (!handle) {
930                 err = idr_alloc_ext(&head->handle_idr, fnew, &idr_index,
931                                     1, 0x80000000, GFP_KERNEL);
932                 if (err)
933                         goto errout;
934                 fnew->handle = idr_index;
935         }
936
937         /* user specifies a handle and it doesn't exist */
938         if (handle && !fold) {
939                 err = idr_alloc_ext(&head->handle_idr, fnew, &idr_index,
940                                     handle, handle + 1, GFP_KERNEL);
941                 if (err)
942                         goto errout;
943                 fnew->handle = idr_index;
944         }
945
946         if (tb[TCA_FLOWER_FLAGS]) {
947                 fnew->flags = nla_get_u32(tb[TCA_FLOWER_FLAGS]);
948
949                 if (!tc_flags_valid(fnew->flags)) {
950                         err = -EINVAL;
951                         goto errout_idr;
952                 }
953         }
954
955         err = fl_set_parms(net, tp, fnew, &mask, base, tb, tca[TCA_RATE], ovr);
956         if (err)
957                 goto errout_idr;
958
959         err = fl_check_assign_mask(head, &mask);
960         if (err)
961                 goto errout_idr;
962
963         if (!tc_skip_sw(fnew->flags)) {
964                 if (!fold && fl_lookup(head, &fnew->mkey)) {
965                         err = -EEXIST;
966                         goto errout_idr;
967                 }
968
969                 err = rhashtable_insert_fast(&head->ht, &fnew->ht_node,
970                                              head->ht_params);
971                 if (err)
972                         goto errout_idr;
973         }
974
975         if (!tc_skip_hw(fnew->flags)) {
976                 err = fl_hw_replace_filter(tp,
977                                            &head->dissector,
978                                            &mask.key,
979                                            fnew);
980                 if (err)
981                         goto errout_idr;
982         }
983
984         if (!tc_in_hw(fnew->flags))
985                 fnew->flags |= TCA_CLS_FLAGS_NOT_IN_HW;
986
987         if (fold) {
988                 if (!tc_skip_sw(fold->flags))
989                         rhashtable_remove_fast(&head->ht, &fold->ht_node,
990                                                head->ht_params);
991                 if (!tc_skip_hw(fold->flags))
992                         fl_hw_destroy_filter(tp, fold);
993         }
994
995         *arg = fnew;
996
997         if (fold) {
998                 fnew->handle = handle;
999                 idr_replace_ext(&head->handle_idr, fnew, fnew->handle);
1000                 list_replace_rcu(&fold->list, &fnew->list);
1001                 tcf_unbind_filter(tp, &fold->res);
1002                 tcf_exts_get_net(&fold->exts);
1003                 call_rcu(&fold->rcu, fl_destroy_filter);
1004         } else {
1005                 list_add_tail_rcu(&fnew->list, &head->filters);
1006         }
1007
1008         kfree(tb);
1009         return 0;
1010
1011 errout_idr:
1012         if (!fold)
1013                 idr_remove_ext(&head->handle_idr, fnew->handle);
1014 errout:
1015         tcf_exts_destroy(&fnew->exts);
1016         kfree(fnew);
1017 errout_tb:
1018         kfree(tb);
1019         return err;
1020 }
1021
1022 static int fl_delete(struct tcf_proto *tp, void *arg, bool *last)
1023 {
1024         struct cls_fl_head *head = rtnl_dereference(tp->root);
1025         struct cls_fl_filter *f = arg;
1026
1027         if (!tc_skip_sw(f->flags))
1028                 rhashtable_remove_fast(&head->ht, &f->ht_node,
1029                                        head->ht_params);
1030         __fl_delete(tp, f);
1031         *last = list_empty(&head->filters);
1032         return 0;
1033 }
1034
1035 static void fl_walk(struct tcf_proto *tp, struct tcf_walker *arg)
1036 {
1037         struct cls_fl_head *head = rtnl_dereference(tp->root);
1038         struct cls_fl_filter *f;
1039
1040         list_for_each_entry_rcu(f, &head->filters, list) {
1041                 if (arg->count < arg->skip)
1042                         goto skip;
1043                 if (arg->fn(tp, f, arg) < 0) {
1044                         arg->stop = 1;
1045                         break;
1046                 }
1047 skip:
1048                 arg->count++;
1049         }
1050 }
1051
1052 static int fl_dump_key_val(struct sk_buff *skb,
1053                            void *val, int val_type,
1054                            void *mask, int mask_type, int len)
1055 {
1056         int err;
1057
1058         if (!memchr_inv(mask, 0, len))
1059                 return 0;
1060         err = nla_put(skb, val_type, len, val);
1061         if (err)
1062                 return err;
1063         if (mask_type != TCA_FLOWER_UNSPEC) {
1064                 err = nla_put(skb, mask_type, len, mask);
1065                 if (err)
1066                         return err;
1067         }
1068         return 0;
1069 }
1070
1071 static int fl_dump_key_mpls(struct sk_buff *skb,
1072                             struct flow_dissector_key_mpls *mpls_key,
1073                             struct flow_dissector_key_mpls *mpls_mask)
1074 {
1075         int err;
1076
1077         if (!memchr_inv(mpls_mask, 0, sizeof(*mpls_mask)))
1078                 return 0;
1079         if (mpls_mask->mpls_ttl) {
1080                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_TTL,
1081                                  mpls_key->mpls_ttl);
1082                 if (err)
1083                         return err;
1084         }
1085         if (mpls_mask->mpls_tc) {
1086                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_TC,
1087                                  mpls_key->mpls_tc);
1088                 if (err)
1089                         return err;
1090         }
1091         if (mpls_mask->mpls_label) {
1092                 err = nla_put_u32(skb, TCA_FLOWER_KEY_MPLS_LABEL,
1093                                   mpls_key->mpls_label);
1094                 if (err)
1095                         return err;
1096         }
1097         if (mpls_mask->mpls_bos) {
1098                 err = nla_put_u8(skb, TCA_FLOWER_KEY_MPLS_BOS,
1099                                  mpls_key->mpls_bos);
1100                 if (err)
1101                         return err;
1102         }
1103         return 0;
1104 }
1105
1106 static int fl_dump_key_ip(struct sk_buff *skb,
1107                           struct flow_dissector_key_ip *key,
1108                           struct flow_dissector_key_ip *mask)
1109 {
1110         if (fl_dump_key_val(skb, &key->tos, TCA_FLOWER_KEY_IP_TOS, &mask->tos,
1111                             TCA_FLOWER_KEY_IP_TOS_MASK, sizeof(key->tos)) ||
1112             fl_dump_key_val(skb, &key->ttl, TCA_FLOWER_KEY_IP_TTL, &mask->ttl,
1113                             TCA_FLOWER_KEY_IP_TTL_MASK, sizeof(key->ttl)))
1114                 return -1;
1115
1116         return 0;
1117 }
1118
1119 static int fl_dump_key_vlan(struct sk_buff *skb,
1120                             struct flow_dissector_key_vlan *vlan_key,
1121                             struct flow_dissector_key_vlan *vlan_mask)
1122 {
1123         int err;
1124
1125         if (!memchr_inv(vlan_mask, 0, sizeof(*vlan_mask)))
1126                 return 0;
1127         if (vlan_mask->vlan_id) {
1128                 err = nla_put_u16(skb, TCA_FLOWER_KEY_VLAN_ID,
1129                                   vlan_key->vlan_id);
1130                 if (err)
1131                         return err;
1132         }
1133         if (vlan_mask->vlan_priority) {
1134                 err = nla_put_u8(skb, TCA_FLOWER_KEY_VLAN_PRIO,
1135                                  vlan_key->vlan_priority);
1136                 if (err)
1137                         return err;
1138         }
1139         return 0;
1140 }
1141
1142 static void fl_get_key_flag(u32 dissector_key, u32 dissector_mask,
1143                             u32 *flower_key, u32 *flower_mask,
1144                             u32 flower_flag_bit, u32 dissector_flag_bit)
1145 {
1146         if (dissector_mask & dissector_flag_bit) {
1147                 *flower_mask |= flower_flag_bit;
1148                 if (dissector_key & dissector_flag_bit)
1149                         *flower_key |= flower_flag_bit;
1150         }
1151 }
1152
1153 static int fl_dump_key_flags(struct sk_buff *skb, u32 flags_key, u32 flags_mask)
1154 {
1155         u32 key, mask;
1156         __be32 _key, _mask;
1157         int err;
1158
1159         if (!memchr_inv(&flags_mask, 0, sizeof(flags_mask)))
1160                 return 0;
1161
1162         key = 0;
1163         mask = 0;
1164
1165         fl_get_key_flag(flags_key, flags_mask, &key, &mask,
1166                         TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT, FLOW_DIS_IS_FRAGMENT);
1167
1168         _key = cpu_to_be32(key);
1169         _mask = cpu_to_be32(mask);
1170
1171         err = nla_put(skb, TCA_FLOWER_KEY_FLAGS, 4, &_key);
1172         if (err)
1173                 return err;
1174
1175         return nla_put(skb, TCA_FLOWER_KEY_FLAGS_MASK, 4, &_mask);
1176 }
1177
1178 static int fl_dump(struct net *net, struct tcf_proto *tp, void *fh,
1179                    struct sk_buff *skb, struct tcmsg *t)
1180 {
1181         struct cls_fl_head *head = rtnl_dereference(tp->root);
1182         struct cls_fl_filter *f = fh;
1183         struct nlattr *nest;
1184         struct fl_flow_key *key, *mask;
1185
1186         if (!f)
1187                 return skb->len;
1188
1189         t->tcm_handle = f->handle;
1190
1191         nest = nla_nest_start(skb, TCA_OPTIONS);
1192         if (!nest)
1193                 goto nla_put_failure;
1194
1195         if (f->res.classid &&
1196             nla_put_u32(skb, TCA_FLOWER_CLASSID, f->res.classid))
1197                 goto nla_put_failure;
1198
1199         key = &f->key;
1200         mask = &head->mask.key;
1201
1202         if (mask->indev_ifindex) {
1203                 struct net_device *dev;
1204
1205                 dev = __dev_get_by_index(net, key->indev_ifindex);
1206                 if (dev && nla_put_string(skb, TCA_FLOWER_INDEV, dev->name))
1207                         goto nla_put_failure;
1208         }
1209
1210         if (!tc_skip_hw(f->flags))
1211                 fl_hw_update_stats(tp, f);
1212
1213         if (fl_dump_key_val(skb, key->eth.dst, TCA_FLOWER_KEY_ETH_DST,
1214                             mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK,
1215                             sizeof(key->eth.dst)) ||
1216             fl_dump_key_val(skb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC,
1217                             mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK,
1218                             sizeof(key->eth.src)) ||
1219             fl_dump_key_val(skb, &key->basic.n_proto, TCA_FLOWER_KEY_ETH_TYPE,
1220                             &mask->basic.n_proto, TCA_FLOWER_UNSPEC,
1221                             sizeof(key->basic.n_proto)))
1222                 goto nla_put_failure;
1223
1224         if (fl_dump_key_mpls(skb, &key->mpls, &mask->mpls))
1225                 goto nla_put_failure;
1226
1227         if (fl_dump_key_vlan(skb, &key->vlan, &mask->vlan))
1228                 goto nla_put_failure;
1229
1230         if ((key->basic.n_proto == htons(ETH_P_IP) ||
1231              key->basic.n_proto == htons(ETH_P_IPV6)) &&
1232             (fl_dump_key_val(skb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO,
1233                             &mask->basic.ip_proto, TCA_FLOWER_UNSPEC,
1234                             sizeof(key->basic.ip_proto)) ||
1235             fl_dump_key_ip(skb, &key->ip, &mask->ip)))
1236                 goto nla_put_failure;
1237
1238         if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS &&
1239             (fl_dump_key_val(skb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
1240                              &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
1241                              sizeof(key->ipv4.src)) ||
1242              fl_dump_key_val(skb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST,
1243                              &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK,
1244                              sizeof(key->ipv4.dst))))
1245                 goto nla_put_failure;
1246         else if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS &&
1247                  (fl_dump_key_val(skb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
1248                                   &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
1249                                   sizeof(key->ipv6.src)) ||
1250                   fl_dump_key_val(skb, &key->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST,
1251                                   &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK,
1252                                   sizeof(key->ipv6.dst))))
1253                 goto nla_put_failure;
1254
1255         if (key->basic.ip_proto == IPPROTO_TCP &&
1256             (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC,
1257                              &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK,
1258                              sizeof(key->tp.src)) ||
1259              fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_TCP_DST,
1260                              &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK,
1261                              sizeof(key->tp.dst)) ||
1262              fl_dump_key_val(skb, &key->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS,
1263                              &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK,
1264                              sizeof(key->tcp.flags))))
1265                 goto nla_put_failure;
1266         else if (key->basic.ip_proto == IPPROTO_UDP &&
1267                  (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_UDP_SRC,
1268                                   &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK,
1269                                   sizeof(key->tp.src)) ||
1270                   fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_UDP_DST,
1271                                   &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK,
1272                                   sizeof(key->tp.dst))))
1273                 goto nla_put_failure;
1274         else if (key->basic.ip_proto == IPPROTO_SCTP &&
1275                  (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_SCTP_SRC,
1276                                   &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK,
1277                                   sizeof(key->tp.src)) ||
1278                   fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_SCTP_DST,
1279                                   &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK,
1280                                   sizeof(key->tp.dst))))
1281                 goto nla_put_failure;
1282         else if (key->basic.n_proto == htons(ETH_P_IP) &&
1283                  key->basic.ip_proto == IPPROTO_ICMP &&
1284                  (fl_dump_key_val(skb, &key->icmp.type,
1285                                   TCA_FLOWER_KEY_ICMPV4_TYPE, &mask->icmp.type,
1286                                   TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,
1287                                   sizeof(key->icmp.type)) ||
1288                   fl_dump_key_val(skb, &key->icmp.code,
1289                                   TCA_FLOWER_KEY_ICMPV4_CODE, &mask->icmp.code,
1290                                   TCA_FLOWER_KEY_ICMPV4_CODE_MASK,
1291                                   sizeof(key->icmp.code))))
1292                 goto nla_put_failure;
1293         else if (key->basic.n_proto == htons(ETH_P_IPV6) &&
1294                  key->basic.ip_proto == IPPROTO_ICMPV6 &&
1295                  (fl_dump_key_val(skb, &key->icmp.type,
1296                                   TCA_FLOWER_KEY_ICMPV6_TYPE, &mask->icmp.type,
1297                                   TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,
1298                                   sizeof(key->icmp.type)) ||
1299                   fl_dump_key_val(skb, &key->icmp.code,
1300                                   TCA_FLOWER_KEY_ICMPV6_CODE, &mask->icmp.code,
1301                                   TCA_FLOWER_KEY_ICMPV6_CODE_MASK,
1302                                   sizeof(key->icmp.code))))
1303                 goto nla_put_failure;
1304         else if ((key->basic.n_proto == htons(ETH_P_ARP) ||
1305                   key->basic.n_proto == htons(ETH_P_RARP)) &&
1306                  (fl_dump_key_val(skb, &key->arp.sip,
1307                                   TCA_FLOWER_KEY_ARP_SIP, &mask->arp.sip,
1308                                   TCA_FLOWER_KEY_ARP_SIP_MASK,
1309                                   sizeof(key->arp.sip)) ||
1310                   fl_dump_key_val(skb, &key->arp.tip,
1311                                   TCA_FLOWER_KEY_ARP_TIP, &mask->arp.tip,
1312                                   TCA_FLOWER_KEY_ARP_TIP_MASK,
1313                                   sizeof(key->arp.tip)) ||
1314                   fl_dump_key_val(skb, &key->arp.op,
1315                                   TCA_FLOWER_KEY_ARP_OP, &mask->arp.op,
1316                                   TCA_FLOWER_KEY_ARP_OP_MASK,
1317                                   sizeof(key->arp.op)) ||
1318                   fl_dump_key_val(skb, key->arp.sha, TCA_FLOWER_KEY_ARP_SHA,
1319                                   mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK,
1320                                   sizeof(key->arp.sha)) ||
1321                   fl_dump_key_val(skb, key->arp.tha, TCA_FLOWER_KEY_ARP_THA,
1322                                   mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK,
1323                                   sizeof(key->arp.tha))))
1324                 goto nla_put_failure;
1325
1326         if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS &&
1327             (fl_dump_key_val(skb, &key->enc_ipv4.src,
1328                             TCA_FLOWER_KEY_ENC_IPV4_SRC, &mask->enc_ipv4.src,
1329                             TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,
1330                             sizeof(key->enc_ipv4.src)) ||
1331              fl_dump_key_val(skb, &key->enc_ipv4.dst,
1332                              TCA_FLOWER_KEY_ENC_IPV4_DST, &mask->enc_ipv4.dst,
1333                              TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,
1334                              sizeof(key->enc_ipv4.dst))))
1335                 goto nla_put_failure;
1336         else if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS &&
1337                  (fl_dump_key_val(skb, &key->enc_ipv6.src,
1338                             TCA_FLOWER_KEY_ENC_IPV6_SRC, &mask->enc_ipv6.src,
1339                             TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,
1340                             sizeof(key->enc_ipv6.src)) ||
1341                  fl_dump_key_val(skb, &key->enc_ipv6.dst,
1342                                  TCA_FLOWER_KEY_ENC_IPV6_DST,
1343                                  &mask->enc_ipv6.dst,
1344                                  TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,
1345                             sizeof(key->enc_ipv6.dst))))
1346                 goto nla_put_failure;
1347
1348         if (fl_dump_key_val(skb, &key->enc_key_id, TCA_FLOWER_KEY_ENC_KEY_ID,
1349                             &mask->enc_key_id, TCA_FLOWER_UNSPEC,
1350                             sizeof(key->enc_key_id)) ||
1351             fl_dump_key_val(skb, &key->enc_tp.src,
1352                             TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,
1353                             &mask->enc_tp.src,
1354                             TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,
1355                             sizeof(key->enc_tp.src)) ||
1356             fl_dump_key_val(skb, &key->enc_tp.dst,
1357                             TCA_FLOWER_KEY_ENC_UDP_DST_PORT,
1358                             &mask->enc_tp.dst,
1359                             TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,
1360                             sizeof(key->enc_tp.dst)))
1361                 goto nla_put_failure;
1362
1363         if (fl_dump_key_flags(skb, key->control.flags, mask->control.flags))
1364                 goto nla_put_failure;
1365
1366         if (f->flags && nla_put_u32(skb, TCA_FLOWER_FLAGS, f->flags))
1367                 goto nla_put_failure;
1368
1369         if (tcf_exts_dump(skb, &f->exts))
1370                 goto nla_put_failure;
1371
1372         nla_nest_end(skb, nest);
1373
1374         if (tcf_exts_dump_stats(skb, &f->exts) < 0)
1375                 goto nla_put_failure;
1376
1377         return skb->len;
1378
1379 nla_put_failure:
1380         nla_nest_cancel(skb, nest);
1381         return -1;
1382 }
1383
1384 static void fl_bind_class(void *fh, u32 classid, unsigned long cl)
1385 {
1386         struct cls_fl_filter *f = fh;
1387
1388         if (f && f->res.classid == classid)
1389                 f->res.class = cl;
1390 }
1391
1392 static struct tcf_proto_ops cls_fl_ops __read_mostly = {
1393         .kind           = "flower",
1394         .classify       = fl_classify,
1395         .init           = fl_init,
1396         .destroy        = fl_destroy,
1397         .get            = fl_get,
1398         .change         = fl_change,
1399         .delete         = fl_delete,
1400         .walk           = fl_walk,
1401         .dump           = fl_dump,
1402         .bind_class     = fl_bind_class,
1403         .owner          = THIS_MODULE,
1404 };
1405
1406 static int __init cls_fl_init(void)
1407 {
1408         return register_tcf_proto_ops(&cls_fl_ops);
1409 }
1410
1411 static void __exit cls_fl_exit(void)
1412 {
1413         unregister_tcf_proto_ops(&cls_fl_ops);
1414 }
1415
1416 module_init(cls_fl_init);
1417 module_exit(cls_fl_exit);
1418
1419 MODULE_AUTHOR("Jiri Pirko <jiri@resnulli.us>");
1420 MODULE_DESCRIPTION("Flower classifier");
1421 MODULE_LICENSE("GPL v2");