datapath: Don't directly access port array in query_port().
[sliver-openvswitch.git] / datapath / datapath.c
1 /*
2  * Copyright (c) 2007, 2008, 2009, 2010 Nicira Networks.
3  * Distributed under the terms of the GNU GPL version 2.
4  *
5  * Significant portions of this file may be copied from parts of the Linux
6  * kernel, by Linus Torvalds and others.
7  */
8
9 /* Functions for managing the dp interface/device. */
10
11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
13 #include <linux/init.h>
14 #include <linux/module.h>
15 #include <linux/fs.h>
16 #include <linux/if_arp.h>
17 #include <linux/if_vlan.h>
18 #include <linux/in.h>
19 #include <linux/ip.h>
20 #include <linux/delay.h>
21 #include <linux/time.h>
22 #include <linux/etherdevice.h>
23 #include <linux/kernel.h>
24 #include <linux/kthread.h>
25 #include <linux/mutex.h>
26 #include <linux/percpu.h>
27 #include <linux/rcupdate.h>
28 #include <linux/tcp.h>
29 #include <linux/udp.h>
30 #include <linux/version.h>
31 #include <linux/ethtool.h>
32 #include <linux/wait.h>
33 #include <asm/system.h>
34 #include <asm/div64.h>
35 #include <asm/bug.h>
36 #include <linux/highmem.h>
37 #include <linux/netfilter_bridge.h>
38 #include <linux/netfilter_ipv4.h>
39 #include <linux/inetdevice.h>
40 #include <linux/list.h>
41 #include <linux/rculist.h>
42 #include <linux/dmi.h>
43 #include <net/inet_ecn.h>
44 #include <linux/compat.h>
45
46 #include "openvswitch/datapath-protocol.h"
47 #include "checksum.h"
48 #include "datapath.h"
49 #include "actions.h"
50 #include "flow.h"
51 #include "loop_counter.h"
52 #include "odp-compat.h"
53 #include "table.h"
54 #include "vport-internal_dev.h"
55
56 #include "compat.h"
57
58 int (*dp_ioctl_hook)(struct net_device *dev, struct ifreq *rq, int cmd);
59 EXPORT_SYMBOL(dp_ioctl_hook);
60
61 /* Datapaths.  Protected on the read side by rcu_read_lock, on the write side
62  * by dp_mutex.
63  *
64  * dp_mutex nests inside the RTNL lock: if you need both you must take the RTNL
65  * lock first.
66  *
67  * It is safe to access the datapath and vport structures with just
68  * dp_mutex.
69  */
70 static struct datapath __rcu *dps[ODP_MAX];
71 static DEFINE_MUTEX(dp_mutex);
72
73 static int new_vport(struct datapath *, struct odp_port *, int port_no);
74
75 /* Must be called with rcu_read_lock or dp_mutex. */
76 struct datapath *get_dp(int dp_idx)
77 {
78         if (dp_idx < 0 || dp_idx >= ODP_MAX)
79                 return NULL;
80         return rcu_dereference_check(dps[dp_idx], rcu_read_lock_held() ||
81                                          lockdep_is_held(&dp_mutex));
82 }
83 EXPORT_SYMBOL_GPL(get_dp);
84
85 static struct datapath *get_dp_locked(int dp_idx)
86 {
87         struct datapath *dp;
88
89         mutex_lock(&dp_mutex);
90         dp = get_dp(dp_idx);
91         if (dp)
92                 mutex_lock(&dp->mutex);
93         mutex_unlock(&dp_mutex);
94         return dp;
95 }
96
97 static struct tbl *get_table_protected(const struct datapath *dp)
98 {
99         return rcu_dereference_protected(dp->table,
100                                          lockdep_is_held(&dp->mutex));
101 }
102
103 static struct vport *get_vport_protected(const struct datapath *dp,
104                                          u16 port_no)
105 {
106         return rcu_dereference_protected(dp->ports[port_no],
107                                          lockdep_is_held(&dp->mutex));
108 }
109
110 /* Must be called with rcu_read_lock or RTNL lock. */
111 const char *dp_name(const struct datapath *dp)
112 {
113         return vport_get_name(rcu_dereference_rtnl(dp->ports[ODPP_LOCAL]));
114 }
115
116 static inline size_t br_nlmsg_size(void)
117 {
118         return NLMSG_ALIGN(sizeof(struct ifinfomsg))
119                + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
120                + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
121                + nla_total_size(4) /* IFLA_MASTER */
122                + nla_total_size(4) /* IFLA_MTU */
123                + nla_total_size(4) /* IFLA_LINK */
124                + nla_total_size(1); /* IFLA_OPERSTATE */
125 }
126
127 static int dp_fill_ifinfo(struct sk_buff *skb,
128                           const struct vport *port,
129                           int event, unsigned int flags)
130 {
131         const struct datapath *dp = port->dp;
132         int ifindex = vport_get_ifindex(port);
133         int iflink = vport_get_iflink(port);
134         struct ifinfomsg *hdr;
135         struct nlmsghdr *nlh;
136
137         if (ifindex < 0)
138                 return ifindex;
139
140         if (iflink < 0)
141                 return iflink;
142
143         nlh = nlmsg_put(skb, 0, 0, event, sizeof(*hdr), flags);
144         if (nlh == NULL)
145                 return -EMSGSIZE;
146
147         hdr = nlmsg_data(nlh);
148         hdr->ifi_family = AF_BRIDGE;
149         hdr->__ifi_pad = 0;
150         hdr->ifi_type = ARPHRD_ETHER;
151         hdr->ifi_index = ifindex;
152         hdr->ifi_flags = vport_get_flags(port);
153         hdr->ifi_change = 0;
154
155         NLA_PUT_STRING(skb, IFLA_IFNAME, vport_get_name(port));
156         NLA_PUT_U32(skb, IFLA_MASTER,
157                 vport_get_ifindex(get_vport_protected(dp, ODPP_LOCAL)));
158         NLA_PUT_U32(skb, IFLA_MTU, vport_get_mtu(port));
159 #ifdef IFLA_OPERSTATE
160         NLA_PUT_U8(skb, IFLA_OPERSTATE,
161                    vport_is_running(port)
162                         ? vport_get_operstate(port)
163                         : IF_OPER_DOWN);
164 #endif
165
166         NLA_PUT(skb, IFLA_ADDRESS, ETH_ALEN, vport_get_addr(port));
167
168         if (ifindex != iflink)
169                 NLA_PUT_U32(skb, IFLA_LINK,iflink);
170
171         return nlmsg_end(skb, nlh);
172
173 nla_put_failure:
174         nlmsg_cancel(skb, nlh);
175         return -EMSGSIZE;
176 }
177
178 static void dp_ifinfo_notify(int event, struct vport *port)
179 {
180         struct sk_buff *skb;
181         int err = -ENOBUFS;
182
183         skb = nlmsg_new(br_nlmsg_size(), GFP_KERNEL);
184         if (skb == NULL)
185                 goto errout;
186
187         err = dp_fill_ifinfo(skb, port, event, 0);
188         if (err < 0) {
189                 /* -EMSGSIZE implies BUG in br_nlmsg_size() */
190                 WARN_ON(err == -EMSGSIZE);
191                 kfree_skb(skb);
192                 goto errout;
193         }
194         rtnl_notify(skb, &init_net, 0, RTNLGRP_LINK, NULL, GFP_KERNEL);
195         return;
196 errout:
197         if (err < 0)
198                 rtnl_set_sk_err(&init_net, RTNLGRP_LINK, err);
199 }
200
201 static void release_dp(struct kobject *kobj)
202 {
203         struct datapath *dp = container_of(kobj, struct datapath, ifobj);
204         kfree(dp);
205 }
206
207 static struct kobj_type dp_ktype = {
208         .release = release_dp
209 };
210
211 static int create_dp(int dp_idx, const char __user *devnamep)
212 {
213         struct odp_port internal_dev_port;
214         char devname[IFNAMSIZ];
215         struct datapath *dp;
216         int err;
217         int i;
218
219         if (devnamep) {
220                 int retval = strncpy_from_user(devname, devnamep, IFNAMSIZ);
221                 if (retval < 0) {
222                         err = -EFAULT;
223                         goto err;
224                 } else if (retval >= IFNAMSIZ) {
225                         err = -ENAMETOOLONG;
226                         goto err;
227                 }
228         } else {
229                 snprintf(devname, sizeof devname, "of%d", dp_idx);
230         }
231
232         rtnl_lock();
233         mutex_lock(&dp_mutex);
234         err = -ENODEV;
235         if (!try_module_get(THIS_MODULE))
236                 goto err_unlock;
237
238         /* Exit early if a datapath with that number already exists.
239          * (We don't use -EEXIST because that's ambiguous with 'devname'
240          * conflicting with an existing network device name.) */
241         err = -EBUSY;
242         if (get_dp(dp_idx))
243                 goto err_put_module;
244
245         err = -ENOMEM;
246         dp = kzalloc(sizeof *dp, GFP_KERNEL);
247         if (dp == NULL)
248                 goto err_put_module;
249         INIT_LIST_HEAD(&dp->port_list);
250         mutex_init(&dp->mutex);
251         dp->dp_idx = dp_idx;
252         for (i = 0; i < DP_N_QUEUES; i++)
253                 skb_queue_head_init(&dp->queues[i]);
254         init_waitqueue_head(&dp->waitqueue);
255
256         /* Initialize kobject for bridge.  This will be added as
257          * /sys/class/net/<devname>/brif later, if sysfs is enabled. */
258         dp->ifobj.kset = NULL;
259         kobject_init(&dp->ifobj, &dp_ktype);
260
261         /* Allocate table. */
262         err = -ENOMEM;
263         rcu_assign_pointer(dp->table, tbl_create(TBL_MIN_BUCKETS));
264         if (!dp->table)
265                 goto err_free_dp;
266
267         /* Set up our datapath device. */
268         BUILD_BUG_ON(sizeof(internal_dev_port.devname) != sizeof(devname));
269         strcpy(internal_dev_port.devname, devname);
270         strcpy(internal_dev_port.type, "internal");
271         err = new_vport(dp, &internal_dev_port, ODPP_LOCAL);
272         if (err) {
273                 if (err == -EBUSY)
274                         err = -EEXIST;
275
276                 goto err_destroy_table;
277         }
278
279         dp->drop_frags = 0;
280         dp->stats_percpu = alloc_percpu(struct dp_stats_percpu);
281         if (!dp->stats_percpu) {
282                 err = -ENOMEM;
283                 goto err_destroy_local_port;
284         }
285
286         rcu_assign_pointer(dps[dp_idx], dp);
287         dp_sysfs_add_dp(dp);
288
289         mutex_unlock(&dp_mutex);
290         rtnl_unlock();
291
292         return 0;
293
294 err_destroy_local_port:
295         dp_detach_port(get_vport_protected(dp, ODPP_LOCAL));
296 err_destroy_table:
297         tbl_destroy(get_table_protected(dp), NULL);
298 err_free_dp:
299         kfree(dp);
300 err_put_module:
301         module_put(THIS_MODULE);
302 err_unlock:
303         mutex_unlock(&dp_mutex);
304         rtnl_unlock();
305 err:
306         return err;
307 }
308
309 static void do_destroy_dp(struct datapath *dp)
310 {
311         struct vport *p, *n;
312         int i;
313
314         list_for_each_entry_safe (p, n, &dp->port_list, node)
315                 if (p->port_no != ODPP_LOCAL)
316                         dp_detach_port(p);
317
318         dp_sysfs_del_dp(dp);
319
320         rcu_assign_pointer(dps[dp->dp_idx], NULL);
321
322         dp_detach_port(get_vport_protected(dp, ODPP_LOCAL));
323         tbl_destroy(get_table_protected(dp), flow_free_tbl);
324
325         for (i = 0; i < DP_N_QUEUES; i++)
326                 skb_queue_purge(&dp->queues[i]);
327         free_percpu(dp->stats_percpu);
328         kobject_put(&dp->ifobj);
329         module_put(THIS_MODULE);
330 }
331
332 static int destroy_dp(int dp_idx)
333 {
334         struct datapath *dp;
335         int err;
336
337         rtnl_lock();
338         mutex_lock(&dp_mutex);
339         dp = get_dp(dp_idx);
340         err = -ENODEV;
341         if (!dp)
342                 goto err_unlock;
343
344         do_destroy_dp(dp);
345         err = 0;
346
347 err_unlock:
348         mutex_unlock(&dp_mutex);
349         rtnl_unlock();
350         return err;
351 }
352
353 /* Called with RTNL lock and dp_mutex. */
354 static int new_vport(struct datapath *dp, struct odp_port *odp_port, int port_no)
355 {
356         struct vport_parms parms;
357         struct vport *vport;
358
359         parms.name = odp_port->devname;
360         parms.type = odp_port->type;
361         parms.config = odp_port->config;
362         parms.dp = dp;
363         parms.port_no = port_no;
364
365         vport_lock();
366         vport = vport_add(&parms);
367         vport_unlock();
368
369         if (IS_ERR(vport))
370                 return PTR_ERR(vport);
371
372         rcu_assign_pointer(dp->ports[port_no], vport);
373         list_add_rcu(&vport->node, &dp->port_list);
374         dp->n_ports++;
375
376         dp_ifinfo_notify(RTM_NEWLINK, vport);
377
378         return 0;
379 }
380
381 static int attach_port(int dp_idx, struct odp_port __user *portp)
382 {
383         struct datapath *dp;
384         struct odp_port port;
385         int port_no;
386         int err;
387
388         err = -EFAULT;
389         if (copy_from_user(&port, portp, sizeof port))
390                 goto out;
391         port.devname[IFNAMSIZ - 1] = '\0';
392         port.type[VPORT_TYPE_SIZE - 1] = '\0';
393
394         rtnl_lock();
395         dp = get_dp_locked(dp_idx);
396         err = -ENODEV;
397         if (!dp)
398                 goto out_unlock_rtnl;
399
400         for (port_no = 1; port_no < DP_MAX_PORTS; port_no++)
401                 if (!dp->ports[port_no])
402                         goto got_port_no;
403         err = -EFBIG;
404         goto out_unlock_dp;
405
406 got_port_no:
407         err = new_vport(dp, &port, port_no);
408         if (err)
409                 goto out_unlock_dp;
410
411         set_internal_devs_mtu(dp);
412         dp_sysfs_add_if(get_vport_protected(dp, port_no));
413
414         err = put_user(port_no, &portp->port);
415
416 out_unlock_dp:
417         mutex_unlock(&dp->mutex);
418 out_unlock_rtnl:
419         rtnl_unlock();
420 out:
421         return err;
422 }
423
424 int dp_detach_port(struct vport *p)
425 {
426         int err;
427
428         ASSERT_RTNL();
429
430         if (p->port_no != ODPP_LOCAL)
431                 dp_sysfs_del_if(p);
432         dp_ifinfo_notify(RTM_DELLINK, p);
433
434         /* First drop references to device. */
435         p->dp->n_ports--;
436         list_del_rcu(&p->node);
437         rcu_assign_pointer(p->dp->ports[p->port_no], NULL);
438
439         /* Then destroy it. */
440         vport_lock();
441         err = vport_del(p);
442         vport_unlock();
443
444         return err;
445 }
446
447 static int detach_port(int dp_idx, int port_no)
448 {
449         struct vport *p;
450         struct datapath *dp;
451         int err;
452
453         err = -EINVAL;
454         if (port_no < 0 || port_no >= DP_MAX_PORTS || port_no == ODPP_LOCAL)
455                 goto out;
456
457         rtnl_lock();
458         dp = get_dp_locked(dp_idx);
459         err = -ENODEV;
460         if (!dp)
461                 goto out_unlock_rtnl;
462
463         p = get_vport_protected(dp, port_no);
464         err = -ENOENT;
465         if (!p)
466                 goto out_unlock_dp;
467
468         err = dp_detach_port(p);
469
470 out_unlock_dp:
471         mutex_unlock(&dp->mutex);
472 out_unlock_rtnl:
473         rtnl_unlock();
474 out:
475         return err;
476 }
477
478 /* Must be called with rcu_read_lock. */
479 void dp_process_received_packet(struct vport *p, struct sk_buff *skb)
480 {
481         struct datapath *dp = p->dp;
482         struct dp_stats_percpu *stats;
483         int stats_counter_off;
484         struct sw_flow_actions *acts;
485         struct loop_counter *loop;
486         int error;
487
488         OVS_CB(skb)->vport = p;
489
490         if (!OVS_CB(skb)->flow) {
491                 struct odp_flow_key key;
492                 struct tbl_node *flow_node;
493                 bool is_frag;
494
495                 /* Extract flow from 'skb' into 'key'. */
496                 error = flow_extract(skb, p ? p->port_no : ODPP_NONE, &key, &is_frag);
497                 if (unlikely(error)) {
498                         kfree_skb(skb);
499                         return;
500                 }
501
502                 if (is_frag && dp->drop_frags) {
503                         kfree_skb(skb);
504                         stats_counter_off = offsetof(struct dp_stats_percpu, n_frags);
505                         goto out;
506                 }
507
508                 /* Look up flow. */
509                 flow_node = tbl_lookup(rcu_dereference(dp->table), &key,
510                                         flow_hash(&key), flow_cmp);
511                 if (unlikely(!flow_node)) {
512                         dp_output_control(dp, skb, _ODPL_MISS_NR,
513                                          (__force u64)OVS_CB(skb)->tun_id);
514                         stats_counter_off = offsetof(struct dp_stats_percpu, n_missed);
515                         goto out;
516                 }
517
518                 OVS_CB(skb)->flow = flow_cast(flow_node);
519         }
520
521         stats_counter_off = offsetof(struct dp_stats_percpu, n_hit);
522         flow_used(OVS_CB(skb)->flow, skb);
523
524         acts = rcu_dereference(OVS_CB(skb)->flow->sf_acts);
525
526         /* Check whether we've looped too much. */
527         loop = loop_get_counter();
528         if (unlikely(++loop->count > MAX_LOOPS))
529                 loop->looping = true;
530         if (unlikely(loop->looping)) {
531                 loop_suppress(dp, acts);
532                 kfree_skb(skb);
533                 goto out_loop;
534         }
535
536         /* Execute actions. */
537         execute_actions(dp, skb, &OVS_CB(skb)->flow->key, acts->actions,
538                         acts->actions_len);
539
540         /* Check whether sub-actions looped too much. */
541         if (unlikely(loop->looping))
542                 loop_suppress(dp, acts);
543
544 out_loop:
545         /* Decrement loop counter. */
546         if (!--loop->count)
547                 loop->looping = false;
548         loop_put_counter();
549
550 out:
551         /* Update datapath statistics. */
552         local_bh_disable();
553         stats = per_cpu_ptr(dp->stats_percpu, smp_processor_id());
554
555         write_seqcount_begin(&stats->seqlock);
556         (*(u64 *)((u8 *)stats + stats_counter_off))++;
557         write_seqcount_end(&stats->seqlock);
558
559         local_bh_enable();
560 }
561
562 /* Append each packet in 'skb' list to 'queue'.  There will be only one packet
563  * unless we broke up a GSO packet. */
564 static int queue_control_packets(struct sk_buff *skb, struct sk_buff_head *queue,
565                                  int queue_no, u64 arg)
566 {
567         struct sk_buff *nskb;
568         int port_no;
569         int err;
570
571         if (OVS_CB(skb)->vport)
572                 port_no = OVS_CB(skb)->vport->port_no;
573         else
574                 port_no = ODPP_LOCAL;
575
576         do {
577                 struct odp_msg *header;
578
579                 nskb = skb->next;
580                 skb->next = NULL;
581
582                 err = skb_cow(skb, sizeof *header);
583                 if (err)
584                         goto err_kfree_skbs;
585
586                 header = (struct odp_msg*)__skb_push(skb, sizeof *header);
587                 header->type = queue_no;
588                 header->length = skb->len;
589                 header->port = port_no;
590                 header->arg = arg;
591                 skb_queue_tail(queue, skb);
592
593                 skb = nskb;
594         } while (skb);
595         return 0;
596
597 err_kfree_skbs:
598         kfree_skb(skb);
599         while ((skb = nskb) != NULL) {
600                 nskb = skb->next;
601                 kfree_skb(skb);
602         }
603         return err;
604 }
605
606 int dp_output_control(struct datapath *dp, struct sk_buff *skb, int queue_no,
607                       u64 arg)
608 {
609         struct dp_stats_percpu *stats;
610         struct sk_buff_head *queue;
611         int err;
612
613         WARN_ON_ONCE(skb_shared(skb));
614         BUG_ON(queue_no != _ODPL_MISS_NR && queue_no != _ODPL_ACTION_NR && queue_no != _ODPL_SFLOW_NR);
615         queue = &dp->queues[queue_no];
616         err = -ENOBUFS;
617         if (skb_queue_len(queue) >= DP_MAX_QUEUE_LEN)
618                 goto err_kfree_skb;
619
620         forward_ip_summed(skb);
621
622         err = vswitch_skb_checksum_setup(skb);
623         if (err)
624                 goto err_kfree_skb;
625
626         /* Break apart GSO packets into their component pieces.  Otherwise
627          * userspace may try to stuff a 64kB packet into a 1500-byte MTU. */
628         if (skb_is_gso(skb)) {
629                 struct sk_buff *nskb = skb_gso_segment(skb, NETIF_F_SG | NETIF_F_HW_CSUM);
630                 
631                 kfree_skb(skb);
632                 skb = nskb;
633                 if (IS_ERR(skb)) {
634                         err = PTR_ERR(skb);
635                         goto err;
636                 }
637         }
638
639         err = queue_control_packets(skb, queue, queue_no, arg);
640         wake_up_interruptible(&dp->waitqueue);
641         return err;
642
643 err_kfree_skb:
644         kfree_skb(skb);
645 err:
646         local_bh_disable();
647         stats = per_cpu_ptr(dp->stats_percpu, smp_processor_id());
648
649         write_seqcount_begin(&stats->seqlock);
650         stats->n_lost++;
651         write_seqcount_end(&stats->seqlock);
652
653         local_bh_enable();
654
655         return err;
656 }
657
658 static int flush_flows(struct datapath *dp)
659 {
660         struct tbl *old_table = get_table_protected(dp);
661         struct tbl *new_table;
662
663         new_table = tbl_create(TBL_MIN_BUCKETS);
664         if (!new_table)
665                 return -ENOMEM;
666
667         rcu_assign_pointer(dp->table, new_table);
668
669         tbl_deferred_destroy(old_table, flow_free_tbl);
670
671         return 0;
672 }
673
674 static int validate_actions(const struct nlattr *actions, u32 actions_len)
675 {
676         const struct nlattr *a;
677         int rem;
678
679         nla_for_each_attr(a, actions, actions_len, rem) {
680                 static const u32 action_lens[ODPAT_MAX + 1] = {
681                         [ODPAT_OUTPUT] = 4,
682                         [ODPAT_CONTROLLER] = 8,
683                         [ODPAT_SET_DL_TCI] = 2,
684                         [ODPAT_STRIP_VLAN] = 0,
685                         [ODPAT_SET_DL_SRC] = ETH_ALEN,
686                         [ODPAT_SET_DL_DST] = ETH_ALEN,
687                         [ODPAT_SET_NW_SRC] = 4,
688                         [ODPAT_SET_NW_DST] = 4,
689                         [ODPAT_SET_NW_TOS] = 1,
690                         [ODPAT_SET_TP_SRC] = 2,
691                         [ODPAT_SET_TP_DST] = 2,
692                         [ODPAT_SET_TUNNEL] = 8,
693                         [ODPAT_SET_PRIORITY] = 4,
694                         [ODPAT_POP_PRIORITY] = 0,
695                         [ODPAT_DROP_SPOOFED_ARP] = 0,
696                 };
697                 int type = nla_type(a);
698
699                 if (type > ODPAT_MAX || nla_len(a) != action_lens[type])
700                         return -EINVAL;
701
702                 switch (type) {
703                 case ODPAT_UNSPEC:
704                         return -EINVAL;
705
706                 case ODPAT_CONTROLLER:
707                 case ODPAT_STRIP_VLAN:
708                 case ODPAT_SET_DL_SRC:
709                 case ODPAT_SET_DL_DST:
710                 case ODPAT_SET_NW_SRC:
711                 case ODPAT_SET_NW_DST:
712                 case ODPAT_SET_TP_SRC:
713                 case ODPAT_SET_TP_DST:
714                 case ODPAT_SET_TUNNEL:
715                 case ODPAT_SET_PRIORITY:
716                 case ODPAT_POP_PRIORITY:
717                 case ODPAT_DROP_SPOOFED_ARP:
718                         /* No validation needed. */
719                         break;
720
721                 case ODPAT_OUTPUT:
722                         if (nla_get_u32(a) >= DP_MAX_PORTS)
723                                 return -EINVAL;
724
725                 case ODPAT_SET_DL_TCI:
726                         if (nla_get_be16(a) & htons(VLAN_CFI_MASK))
727                                 return -EINVAL;
728                         break;
729
730                 case ODPAT_SET_NW_TOS:
731                         if (nla_get_u8(a) & INET_ECN_MASK)
732                                 return -EINVAL;
733                         break;
734
735                 default:
736                         return -EOPNOTSUPP;
737                 }
738         }
739
740         if (rem > 0)
741                 return -EINVAL;
742
743         return 0;
744 }
745
746 static struct sw_flow_actions *get_actions(const struct odp_flow *flow)
747 {
748         struct sw_flow_actions *actions;
749         int error;
750
751         actions = flow_actions_alloc(flow->actions_len);
752         error = PTR_ERR(actions);
753         if (IS_ERR(actions))
754                 goto error;
755
756         error = -EFAULT;
757         if (copy_from_user(actions->actions,
758                            (struct nlattr __user __force *)flow->actions,
759                            flow->actions_len))
760                 goto error_free_actions;
761         error = validate_actions(actions->actions, actions->actions_len);
762         if (error)
763                 goto error_free_actions;
764
765         return actions;
766
767 error_free_actions:
768         kfree(actions);
769 error:
770         return ERR_PTR(error);
771 }
772
773 static void get_stats(struct sw_flow *flow, struct odp_flow_stats *stats)
774 {
775         if (flow->used) {
776                 struct timespec offset_ts, used, now_mono;
777
778                 ktime_get_ts(&now_mono);
779                 jiffies_to_timespec(jiffies - flow->used, &offset_ts);
780                 set_normalized_timespec(&used, now_mono.tv_sec - offset_ts.tv_sec,
781                                         now_mono.tv_nsec - offset_ts.tv_nsec);
782
783                 stats->used_sec = used.tv_sec;
784                 stats->used_nsec = used.tv_nsec;
785         } else {
786                 stats->used_sec = 0;
787                 stats->used_nsec = 0;
788         }
789
790         stats->n_packets = flow->packet_count;
791         stats->n_bytes = flow->byte_count;
792         stats->reserved = 0;
793         stats->tcp_flags = flow->tcp_flags;
794         stats->error = 0;
795 }
796
797 static void clear_stats(struct sw_flow *flow)
798 {
799         flow->used = 0;
800         flow->tcp_flags = 0;
801         flow->packet_count = 0;
802         flow->byte_count = 0;
803 }
804
805 static int expand_table(struct datapath *dp)
806 {
807         struct tbl *old_table = get_table_protected(dp);
808         struct tbl *new_table;
809
810         new_table = tbl_expand(old_table);
811         if (IS_ERR(new_table))
812                 return PTR_ERR(new_table);
813
814         rcu_assign_pointer(dp->table, new_table);
815         tbl_deferred_destroy(old_table, NULL);
816
817         return 0;
818 }
819
820 static int do_put_flow(struct datapath *dp, struct odp_flow_put *uf,
821                        struct odp_flow_stats *stats)
822 {
823         struct tbl_node *flow_node;
824         struct sw_flow *flow;
825         struct tbl *table;
826         int error;
827         u32 hash;
828
829         hash = flow_hash(&uf->flow.key);
830         table = get_table_protected(dp);
831         flow_node = tbl_lookup(table, &uf->flow.key, hash, flow_cmp);
832         if (!flow_node) {
833                 /* No such flow. */
834                 struct sw_flow_actions *acts;
835
836                 error = -ENOENT;
837                 if (!(uf->flags & ODPPF_CREATE))
838                         goto error;
839
840                 /* Expand table, if necessary, to make room. */
841                 if (tbl_count(table) >= tbl_n_buckets(table)) {
842                         error = expand_table(dp);
843                         if (error)
844                                 goto error;
845                         table = get_table_protected(dp);
846                 }
847
848                 /* Allocate flow. */
849                 flow = flow_alloc();
850                 if (IS_ERR(flow)) {
851                         error = PTR_ERR(flow);
852                         goto error;
853                 }
854                 flow->key = uf->flow.key;
855                 clear_stats(flow);
856
857                 /* Obtain actions. */
858                 acts = get_actions(&uf->flow);
859                 error = PTR_ERR(acts);
860                 if (IS_ERR(acts))
861                         goto error_free_flow;
862                 rcu_assign_pointer(flow->sf_acts, acts);
863
864                 /* Put flow in bucket. */
865                 error = tbl_insert(table, &flow->tbl_node, hash);
866                 if (error)
867                         goto error_free_flow_acts;
868
869                 memset(stats, 0, sizeof(struct odp_flow_stats));
870         } else {
871                 /* We found a matching flow. */
872                 struct sw_flow_actions *old_acts, *new_acts;
873
874                 flow = flow_cast(flow_node);
875
876                 /* Bail out if we're not allowed to modify an existing flow. */
877                 error = -EEXIST;
878                 if (!(uf->flags & ODPPF_MODIFY))
879                         goto error;
880
881                 /* Swap actions. */
882                 new_acts = get_actions(&uf->flow);
883                 error = PTR_ERR(new_acts);
884                 if (IS_ERR(new_acts))
885                         goto error;
886
887                 old_acts = rcu_dereference_protected(flow->sf_acts,
888                                                      lockdep_is_held(&dp->mutex));
889                 if (old_acts->actions_len != new_acts->actions_len ||
890                     memcmp(old_acts->actions, new_acts->actions,
891                            old_acts->actions_len)) {
892                         rcu_assign_pointer(flow->sf_acts, new_acts);
893                         flow_deferred_free_acts(old_acts);
894                 } else {
895                         kfree(new_acts);
896                 }
897
898                 /* Fetch stats, then clear them if necessary. */
899                 spin_lock_bh(&flow->lock);
900                 get_stats(flow, stats);
901                 if (uf->flags & ODPPF_ZERO_STATS)
902                         clear_stats(flow);
903                 spin_unlock_bh(&flow->lock);
904         }
905
906         return 0;
907
908 error_free_flow_acts:
909         kfree(flow->sf_acts);
910 error_free_flow:
911         flow->sf_acts = NULL;
912         flow_put(flow);
913 error:
914         return error;
915 }
916
917 static int put_flow(struct datapath *dp, struct odp_flow_put __user *ufp)
918 {
919         struct odp_flow_stats stats;
920         struct odp_flow_put uf;
921         int error;
922
923         if (copy_from_user(&uf, ufp, sizeof(struct odp_flow_put)))
924                 return -EFAULT;
925
926         error = do_put_flow(dp, &uf, &stats);
927         if (error)
928                 return error;
929
930         if (copy_to_user(&ufp->flow.stats, &stats,
931                          sizeof(struct odp_flow_stats)))
932                 return -EFAULT;
933
934         return 0;
935 }
936
937 static int do_answer_query(struct datapath *dp, struct sw_flow *flow,
938                            u32 query_flags,
939                            struct odp_flow_stats __user *ustats,
940                            struct nlattr __user *actions,
941                            u32 __user *actions_lenp)
942 {
943         struct sw_flow_actions *sf_acts;
944         struct odp_flow_stats stats;
945         u32 actions_len;
946
947         spin_lock_bh(&flow->lock);
948         get_stats(flow, &stats);
949         if (query_flags & ODPFF_ZERO_TCP_FLAGS)
950                 flow->tcp_flags = 0;
951
952         spin_unlock_bh(&flow->lock);
953
954         if (copy_to_user(ustats, &stats, sizeof(struct odp_flow_stats)) ||
955             get_user(actions_len, actions_lenp))
956                 return -EFAULT;
957
958         if (!actions_len)
959                 return 0;
960
961         sf_acts = rcu_dereference_protected(flow->sf_acts,
962                                             lockdep_is_held(&dp->mutex));
963         if (put_user(sf_acts->actions_len, actions_lenp) ||
964             (actions && copy_to_user(actions, sf_acts->actions,
965                                      min(sf_acts->actions_len, actions_len))))
966                 return -EFAULT;
967
968         return 0;
969 }
970
971 static int answer_query(struct datapath *dp, struct sw_flow *flow,
972                         u32 query_flags, struct odp_flow __user *ufp)
973 {
974         struct nlattr __user *actions;
975
976         if (get_user(actions, (struct nlattr __user * __user *)&ufp->actions))
977                 return -EFAULT;
978
979         return do_answer_query(dp, flow, query_flags, 
980                                &ufp->stats, actions, &ufp->actions_len);
981 }
982
983 static struct sw_flow *do_del_flow(struct datapath *dp, struct odp_flow_key *key)
984 {
985         struct tbl *table = get_table_protected(dp);
986         struct tbl_node *flow_node;
987         int error;
988
989         flow_node = tbl_lookup(table, key, flow_hash(key), flow_cmp);
990         if (!flow_node)
991                 return ERR_PTR(-ENOENT);
992
993         error = tbl_remove(table, flow_node);
994         if (error)
995                 return ERR_PTR(error);
996
997         /* XXX Returned flow_node's statistics might lose a few packets, since
998          * other CPUs can be using this flow.  We used to synchronize_rcu() to
999          * make sure that we get completely accurate stats, but that blows our
1000          * performance, badly. */
1001         return flow_cast(flow_node);
1002 }
1003
1004 static int del_flow(struct datapath *dp, struct odp_flow __user *ufp)
1005 {
1006         struct sw_flow *flow;
1007         struct odp_flow uf;
1008         int error;
1009
1010         if (copy_from_user(&uf, ufp, sizeof uf))
1011                 return -EFAULT;
1012
1013         flow = do_del_flow(dp, &uf.key);
1014         if (IS_ERR(flow))
1015                 return PTR_ERR(flow);
1016
1017         error = answer_query(dp, flow, 0, ufp);
1018         flow_deferred_free(flow);
1019         return error;
1020 }
1021
1022 static int do_query_flows(struct datapath *dp, const struct odp_flowvec *flowvec)
1023 {
1024         struct tbl *table = get_table_protected(dp);
1025         u32 i;
1026
1027         for (i = 0; i < flowvec->n_flows; i++) {
1028                 struct odp_flow __user *ufp = (struct odp_flow __user __force *)&flowvec->flows[i];
1029                 struct odp_flow uf;
1030                 struct tbl_node *flow_node;
1031                 int error;
1032
1033                 if (copy_from_user(&uf, ufp, sizeof uf))
1034                         return -EFAULT;
1035
1036                 flow_node = tbl_lookup(table, &uf.key, flow_hash(&uf.key), flow_cmp);
1037                 if (!flow_node)
1038                         error = put_user(ENOENT, &ufp->stats.error);
1039                 else
1040                         error = answer_query(dp, flow_cast(flow_node), uf.flags, ufp);
1041                 if (error)
1042                         return -EFAULT;
1043         }
1044         return flowvec->n_flows;
1045 }
1046
1047 struct list_flows_cbdata {
1048         struct datapath *dp;
1049         struct odp_flow __user *uflows;
1050         u32 n_flows;
1051         u32 listed_flows;
1052 };
1053
1054 static int list_flow(struct tbl_node *node, void *cbdata_)
1055 {
1056         struct sw_flow *flow = flow_cast(node);
1057         struct list_flows_cbdata *cbdata = cbdata_;
1058         struct odp_flow __user *ufp = &cbdata->uflows[cbdata->listed_flows++];
1059         int error;
1060
1061         if (copy_to_user(&ufp->key, &flow->key, sizeof flow->key))
1062                 return -EFAULT;
1063         error = answer_query(cbdata->dp, flow, 0, ufp);
1064         if (error)
1065                 return error;
1066
1067         if (cbdata->listed_flows >= cbdata->n_flows)
1068                 return cbdata->listed_flows;
1069         return 0;
1070 }
1071
1072 static int do_list_flows(struct datapath *dp, const struct odp_flowvec *flowvec)
1073 {
1074         struct list_flows_cbdata cbdata;
1075         int error;
1076
1077         if (!flowvec->n_flows)
1078                 return 0;
1079
1080         cbdata.dp = dp;
1081         cbdata.uflows = (struct odp_flow __user __force*)flowvec->flows;
1082         cbdata.n_flows = flowvec->n_flows;
1083         cbdata.listed_flows = 0;
1084
1085         error = tbl_foreach(get_table_protected(dp), list_flow, &cbdata);
1086         return error ? error : cbdata.listed_flows;
1087 }
1088
1089 static int do_flowvec_ioctl(struct datapath *dp, unsigned long argp,
1090                             int (*function)(struct datapath *,
1091                                             const struct odp_flowvec *))
1092 {
1093         struct odp_flowvec __user *uflowvec;
1094         struct odp_flowvec flowvec;
1095         int retval;
1096
1097         uflowvec = (struct odp_flowvec __user *)argp;
1098         if (copy_from_user(&flowvec, uflowvec, sizeof flowvec))
1099                 return -EFAULT;
1100
1101         if (flowvec.n_flows > INT_MAX / sizeof(struct odp_flow))
1102                 return -EINVAL;
1103
1104         retval = function(dp, &flowvec);
1105         return (retval < 0 ? retval
1106                 : retval == flowvec.n_flows ? 0
1107                 : put_user(retval, &uflowvec->n_flows));
1108 }
1109
1110 static int do_execute(struct datapath *dp, const struct odp_execute *execute)
1111 {
1112         struct odp_flow_key key;
1113         struct sk_buff *skb;
1114         struct sw_flow_actions *actions;
1115         struct ethhdr *eth;
1116         bool is_frag;
1117         int err;
1118
1119         err = -EINVAL;
1120         if (execute->length < ETH_HLEN || execute->length > 65535)
1121                 goto error;
1122
1123         actions = flow_actions_alloc(execute->actions_len);
1124         if (IS_ERR(actions)) {
1125                 err = PTR_ERR(actions);
1126                 goto error;
1127         }
1128
1129         err = -EFAULT;
1130         if (copy_from_user(actions->actions,
1131             (struct nlattr __user __force *)execute->actions, execute->actions_len))
1132                 goto error_free_actions;
1133
1134         err = validate_actions(actions->actions, execute->actions_len);
1135         if (err)
1136                 goto error_free_actions;
1137
1138         err = -ENOMEM;
1139         skb = alloc_skb(execute->length, GFP_KERNEL);
1140         if (!skb)
1141                 goto error_free_actions;
1142
1143         err = -EFAULT;
1144         if (copy_from_user(skb_put(skb, execute->length),
1145                            (const void __user __force *)execute->data,
1146                            execute->length))
1147                 goto error_free_skb;
1148
1149         skb_reset_mac_header(skb);
1150         eth = eth_hdr(skb);
1151
1152         /* Normally, setting the skb 'protocol' field would be handled by a
1153          * call to eth_type_trans(), but it assumes there's a sending
1154          * device, which we may not have. */
1155         if (ntohs(eth->h_proto) >= 1536)
1156                 skb->protocol = eth->h_proto;
1157         else
1158                 skb->protocol = htons(ETH_P_802_2);
1159
1160         err = flow_extract(skb, -1, &key, &is_frag);
1161         if (err)
1162                 goto error_free_skb;
1163
1164         rcu_read_lock();
1165         err = execute_actions(dp, skb, &key, actions->actions, actions->actions_len);
1166         rcu_read_unlock();
1167
1168         kfree(actions);
1169         return err;
1170
1171 error_free_skb:
1172         kfree_skb(skb);
1173 error_free_actions:
1174         kfree(actions);
1175 error:
1176         return err;
1177 }
1178
1179 static int execute_packet(struct datapath *dp, const struct odp_execute __user *executep)
1180 {
1181         struct odp_execute execute;
1182
1183         if (copy_from_user(&execute, executep, sizeof execute))
1184                 return -EFAULT;
1185
1186         return do_execute(dp, &execute);
1187 }
1188
1189 static int get_dp_stats(struct datapath *dp, struct odp_stats __user *statsp)
1190 {
1191         struct tbl *table = get_table_protected(dp);
1192         struct odp_stats stats;
1193         int i;
1194
1195         stats.n_flows = tbl_count(table);
1196         stats.cur_capacity = tbl_n_buckets(table);
1197         stats.max_capacity = TBL_MAX_BUCKETS;
1198         stats.n_ports = dp->n_ports;
1199         stats.max_ports = DP_MAX_PORTS;
1200         stats.n_frags = stats.n_hit = stats.n_missed = stats.n_lost = 0;
1201         for_each_possible_cpu(i) {
1202                 const struct dp_stats_percpu *percpu_stats;
1203                 struct dp_stats_percpu local_stats;
1204                 unsigned seqcount;
1205
1206                 percpu_stats = per_cpu_ptr(dp->stats_percpu, i);
1207
1208                 do {
1209                         seqcount = read_seqcount_begin(&percpu_stats->seqlock);
1210                         local_stats = *percpu_stats;
1211                 } while (read_seqcount_retry(&percpu_stats->seqlock, seqcount));
1212
1213                 stats.n_frags += local_stats.n_frags;
1214                 stats.n_hit += local_stats.n_hit;
1215                 stats.n_missed += local_stats.n_missed;
1216                 stats.n_lost += local_stats.n_lost;
1217         }
1218         stats.max_miss_queue = DP_MAX_QUEUE_LEN;
1219         stats.max_action_queue = DP_MAX_QUEUE_LEN;
1220         return copy_to_user(statsp, &stats, sizeof stats) ? -EFAULT : 0;
1221 }
1222
1223 /* MTU of the dp pseudo-device: ETH_DATA_LEN or the minimum of the ports */
1224 int dp_min_mtu(const struct datapath *dp)
1225 {
1226         struct vport *p;
1227         int mtu = 0;
1228
1229         ASSERT_RTNL();
1230
1231         list_for_each_entry_rcu (p, &dp->port_list, node) {
1232                 int dev_mtu;
1233
1234                 /* Skip any internal ports, since that's what we're trying to
1235                  * set. */
1236                 if (is_internal_vport(p))
1237                         continue;
1238
1239                 dev_mtu = vport_get_mtu(p);
1240                 if (!mtu || dev_mtu < mtu)
1241                         mtu = dev_mtu;
1242         }
1243
1244         return mtu ? mtu : ETH_DATA_LEN;
1245 }
1246
1247 /* Sets the MTU of all datapath devices to the minimum of the ports.  Must
1248  * be called with RTNL lock. */
1249 void set_internal_devs_mtu(const struct datapath *dp)
1250 {
1251         struct vport *p;
1252         int mtu;
1253
1254         ASSERT_RTNL();
1255
1256         mtu = dp_min_mtu(dp);
1257
1258         list_for_each_entry_rcu (p, &dp->port_list, node) {
1259                 if (is_internal_vport(p))
1260                         vport_set_mtu(p, mtu);
1261         }
1262 }
1263
1264 static int put_port(const struct vport *p, struct odp_port __user *uop)
1265 {
1266         struct odp_port op;
1267
1268         memset(&op, 0, sizeof op);
1269
1270         rcu_read_lock();
1271         strncpy(op.devname, vport_get_name(p), sizeof op.devname);
1272         strncpy(op.type, vport_get_type(p), sizeof op.type);
1273         vport_get_config(p, op.config);
1274         rcu_read_unlock();
1275
1276         op.port = p->port_no;
1277
1278         return copy_to_user(uop, &op, sizeof op) ? -EFAULT : 0;
1279 }
1280
1281 static int query_port(struct datapath *dp, struct odp_port __user *uport)
1282 {
1283         struct odp_port port;
1284         struct vport *vport;
1285
1286         if (copy_from_user(&port, uport, sizeof port))
1287                 return -EFAULT;
1288
1289         if (port.devname[0]) {
1290                 port.devname[IFNAMSIZ - 1] = '\0';
1291
1292                 vport_lock();
1293                 vport = vport_locate(port.devname);
1294                 vport_unlock();
1295
1296                 if (!vport)
1297                         return -ENODEV;
1298                 if (vport->dp != dp)
1299                         return -ENOENT;
1300         } else {
1301                 if (port.port >= DP_MAX_PORTS)
1302                         return -EINVAL;
1303
1304                 vport = get_vport_protected(dp, port.port);
1305                 if (!vport)
1306                         return -ENOENT;
1307         }
1308
1309         return put_port(vport, uport);
1310 }
1311
1312 static int do_list_ports(struct datapath *dp, struct odp_port __user *uports,
1313                          int n_ports)
1314 {
1315         int idx = 0;
1316         if (n_ports) {
1317                 struct vport *p;
1318
1319                 list_for_each_entry_rcu (p, &dp->port_list, node) {
1320                         if (put_port(p, &uports[idx]))
1321                                 return -EFAULT;
1322                         if (idx++ >= n_ports)
1323                                 break;
1324                 }
1325         }
1326         return idx;
1327 }
1328
1329 static int list_ports(struct datapath *dp, struct odp_portvec __user *upv)
1330 {
1331         struct odp_portvec pv;
1332         int retval;
1333
1334         if (copy_from_user(&pv, upv, sizeof pv))
1335                 return -EFAULT;
1336
1337         retval = do_list_ports(dp, (struct odp_port __user __force *)pv.ports,
1338                                pv.n_ports);
1339         if (retval < 0)
1340                 return retval;
1341
1342         return put_user(retval, &upv->n_ports);
1343 }
1344
1345 static int get_listen_mask(const struct file *f)
1346 {
1347         return (long)f->private_data;
1348 }
1349
1350 static void set_listen_mask(struct file *f, int listen_mask)
1351 {
1352         f->private_data = (void*)(long)listen_mask;
1353 }
1354
1355 static long openvswitch_ioctl(struct file *f, unsigned int cmd,
1356                            unsigned long argp)
1357 {
1358         int dp_idx = iminor(f->f_dentry->d_inode);
1359         struct datapath *dp;
1360         int drop_frags, listeners, port_no;
1361         unsigned int sflow_probability;
1362         int err;
1363
1364         /* Handle commands with special locking requirements up front. */
1365         switch (cmd) {
1366         case ODP_DP_CREATE:
1367                 err = create_dp(dp_idx, (char __user *)argp);
1368                 goto exit;
1369
1370         case ODP_DP_DESTROY:
1371                 err = destroy_dp(dp_idx);
1372                 goto exit;
1373
1374         case ODP_VPORT_ATTACH:
1375                 err = attach_port(dp_idx, (struct odp_port __user *)argp);
1376                 goto exit;
1377
1378         case ODP_VPORT_DETACH:
1379                 err = get_user(port_no, (int __user *)argp);
1380                 if (!err)
1381                         err = detach_port(dp_idx, port_no);
1382                 goto exit;
1383
1384         case ODP_VPORT_MOD:
1385                 err = vport_user_mod((struct odp_port __user *)argp);
1386                 goto exit;
1387
1388         case ODP_VPORT_STATS_GET:
1389                 err = vport_user_stats_get((struct odp_vport_stats_req __user *)argp);
1390                 goto exit;
1391
1392         case ODP_VPORT_STATS_SET:
1393                 err = vport_user_stats_set((struct odp_vport_stats_req __user *)argp);
1394                 goto exit;
1395
1396         case ODP_VPORT_ETHER_GET:
1397                 err = vport_user_ether_get((struct odp_vport_ether __user *)argp);
1398                 goto exit;
1399
1400         case ODP_VPORT_ETHER_SET:
1401                 err = vport_user_ether_set((struct odp_vport_ether __user *)argp);
1402                 goto exit;
1403
1404         case ODP_VPORT_MTU_GET:
1405                 err = vport_user_mtu_get((struct odp_vport_mtu __user *)argp);
1406                 goto exit;
1407
1408         case ODP_VPORT_MTU_SET:
1409                 err = vport_user_mtu_set((struct odp_vport_mtu __user *)argp);
1410                 goto exit;
1411         }
1412
1413         dp = get_dp_locked(dp_idx);
1414         err = -ENODEV;
1415         if (!dp)
1416                 goto exit;
1417
1418         switch (cmd) {
1419         case ODP_DP_STATS:
1420                 err = get_dp_stats(dp, (struct odp_stats __user *)argp);
1421                 break;
1422
1423         case ODP_GET_DROP_FRAGS:
1424                 err = put_user(dp->drop_frags, (int __user *)argp);
1425                 break;
1426
1427         case ODP_SET_DROP_FRAGS:
1428                 err = get_user(drop_frags, (int __user *)argp);
1429                 if (err)
1430                         break;
1431                 err = -EINVAL;
1432                 if (drop_frags != 0 && drop_frags != 1)
1433                         break;
1434                 dp->drop_frags = drop_frags;
1435                 err = 0;
1436                 break;
1437
1438         case ODP_GET_LISTEN_MASK:
1439                 err = put_user(get_listen_mask(f), (int __user *)argp);
1440                 break;
1441
1442         case ODP_SET_LISTEN_MASK:
1443                 err = get_user(listeners, (int __user *)argp);
1444                 if (err)
1445                         break;
1446                 err = -EINVAL;
1447                 if (listeners & ~ODPL_ALL)
1448                         break;
1449                 err = 0;
1450                 set_listen_mask(f, listeners);
1451                 break;
1452
1453         case ODP_GET_SFLOW_PROBABILITY:
1454                 err = put_user(dp->sflow_probability, (unsigned int __user *)argp);
1455                 break;
1456
1457         case ODP_SET_SFLOW_PROBABILITY:
1458                 err = get_user(sflow_probability, (unsigned int __user *)argp);
1459                 if (!err)
1460                         dp->sflow_probability = sflow_probability;
1461                 break;
1462
1463         case ODP_VPORT_QUERY:
1464                 err = query_port(dp, (struct odp_port __user *)argp);
1465                 break;
1466
1467         case ODP_VPORT_LIST:
1468                 err = list_ports(dp, (struct odp_portvec __user *)argp);
1469                 break;
1470
1471         case ODP_FLOW_FLUSH:
1472                 err = flush_flows(dp);
1473                 break;
1474
1475         case ODP_FLOW_PUT:
1476                 err = put_flow(dp, (struct odp_flow_put __user *)argp);
1477                 break;
1478
1479         case ODP_FLOW_DEL:
1480                 err = del_flow(dp, (struct odp_flow __user *)argp);
1481                 break;
1482
1483         case ODP_FLOW_GET:
1484                 err = do_flowvec_ioctl(dp, argp, do_query_flows);
1485                 break;
1486
1487         case ODP_FLOW_LIST:
1488                 err = do_flowvec_ioctl(dp, argp, do_list_flows);
1489                 break;
1490
1491         case ODP_EXECUTE:
1492                 err = execute_packet(dp, (struct odp_execute __user *)argp);
1493                 break;
1494
1495         default:
1496                 err = -ENOIOCTLCMD;
1497                 break;
1498         }
1499         mutex_unlock(&dp->mutex);
1500 exit:
1501         return err;
1502 }
1503
1504 static int dp_has_packet_of_interest(struct datapath *dp, int listeners)
1505 {
1506         int i;
1507         for (i = 0; i < DP_N_QUEUES; i++) {
1508                 if (listeners & (1 << i) && !skb_queue_empty(&dp->queues[i]))
1509                         return 1;
1510         }
1511         return 0;
1512 }
1513
1514 #ifdef CONFIG_COMPAT
1515 static int compat_list_ports(struct datapath *dp, struct compat_odp_portvec __user *upv)
1516 {
1517         struct compat_odp_portvec pv;
1518         int retval;
1519
1520         if (copy_from_user(&pv, upv, sizeof pv))
1521                 return -EFAULT;
1522
1523         retval = do_list_ports(dp, compat_ptr(pv.ports), pv.n_ports);
1524         if (retval < 0)
1525                 return retval;
1526
1527         return put_user(retval, &upv->n_ports);
1528 }
1529
1530 static int compat_get_flow(struct odp_flow *flow, const struct compat_odp_flow __user *compat)
1531 {
1532         compat_uptr_t actions;
1533
1534         if (!access_ok(VERIFY_READ, compat, sizeof(struct compat_odp_flow)) ||
1535             __copy_from_user(&flow->stats, &compat->stats, sizeof(struct odp_flow_stats)) ||
1536             __copy_from_user(&flow->key, &compat->key, sizeof(struct odp_flow_key)) ||
1537             __get_user(actions, &compat->actions) ||
1538             __get_user(flow->actions_len, &compat->actions_len) ||
1539             __get_user(flow->flags, &compat->flags))
1540                 return -EFAULT;
1541
1542         flow->actions = (struct nlattr __force *)compat_ptr(actions);
1543         return 0;
1544 }
1545
1546 static int compat_put_flow(struct datapath *dp, struct compat_odp_flow_put __user *ufp)
1547 {
1548         struct odp_flow_stats stats;
1549         struct odp_flow_put fp;
1550         int error;
1551
1552         if (compat_get_flow(&fp.flow, &ufp->flow) ||
1553             get_user(fp.flags, &ufp->flags))
1554                 return -EFAULT;
1555
1556         error = do_put_flow(dp, &fp, &stats);
1557         if (error)
1558                 return error;
1559
1560         if (copy_to_user(&ufp->flow.stats, &stats,
1561                          sizeof(struct odp_flow_stats)))
1562                 return -EFAULT;
1563
1564         return 0;
1565 }
1566
1567 static int compat_answer_query(struct datapath *dp, struct sw_flow *flow,
1568                                u32 query_flags,
1569                                struct compat_odp_flow __user *ufp)
1570 {
1571         compat_uptr_t actions;
1572
1573         if (get_user(actions, &ufp->actions))
1574                 return -EFAULT;
1575
1576         return do_answer_query(dp, flow, query_flags, &ufp->stats,
1577                                compat_ptr(actions), &ufp->actions_len);
1578 }
1579
1580 static int compat_del_flow(struct datapath *dp, struct compat_odp_flow __user *ufp)
1581 {
1582         struct sw_flow *flow;
1583         struct odp_flow uf;
1584         int error;
1585
1586         if (compat_get_flow(&uf, ufp))
1587                 return -EFAULT;
1588
1589         flow = do_del_flow(dp, &uf.key);
1590         if (IS_ERR(flow))
1591                 return PTR_ERR(flow);
1592
1593         error = compat_answer_query(dp, flow, 0, ufp);
1594         flow_deferred_free(flow);
1595         return error;
1596 }
1597
1598 static int compat_query_flows(struct datapath *dp,
1599                               struct compat_odp_flow __user *flows,
1600                               u32 n_flows)
1601 {
1602         struct tbl *table = get_table_protected(dp);
1603         u32 i;
1604
1605         for (i = 0; i < n_flows; i++) {
1606                 struct compat_odp_flow __user *ufp = &flows[i];
1607                 struct odp_flow uf;
1608                 struct tbl_node *flow_node;
1609                 int error;
1610
1611                 if (compat_get_flow(&uf, ufp))
1612                         return -EFAULT;
1613
1614                 flow_node = tbl_lookup(table, &uf.key, flow_hash(&uf.key), flow_cmp);
1615                 if (!flow_node)
1616                         error = put_user(ENOENT, &ufp->stats.error);
1617                 else
1618                         error = compat_answer_query(dp, flow_cast(flow_node),
1619                                                     uf.flags, ufp);
1620                 if (error)
1621                         return -EFAULT;
1622         }
1623         return n_flows;
1624 }
1625
1626 struct compat_list_flows_cbdata {
1627         struct datapath *dp;
1628         struct compat_odp_flow __user *uflows;
1629         u32 n_flows;
1630         u32 listed_flows;
1631 };
1632
1633 static int compat_list_flow(struct tbl_node *node, void *cbdata_)
1634 {
1635         struct sw_flow *flow = flow_cast(node);
1636         struct compat_list_flows_cbdata *cbdata = cbdata_;
1637         struct compat_odp_flow __user *ufp = &cbdata->uflows[cbdata->listed_flows++];
1638         int error;
1639
1640         if (copy_to_user(&ufp->key, &flow->key, sizeof flow->key))
1641                 return -EFAULT;
1642         error = compat_answer_query(cbdata->dp, flow, 0, ufp);
1643         if (error)
1644                 return error;
1645
1646         if (cbdata->listed_flows >= cbdata->n_flows)
1647                 return cbdata->listed_flows;
1648         return 0;
1649 }
1650
1651 static int compat_list_flows(struct datapath *dp,
1652                              struct compat_odp_flow __user *flows, u32 n_flows)
1653 {
1654         struct compat_list_flows_cbdata cbdata;
1655         int error;
1656
1657         if (!n_flows)
1658                 return 0;
1659
1660         cbdata.dp = dp;
1661         cbdata.uflows = flows;
1662         cbdata.n_flows = n_flows;
1663         cbdata.listed_flows = 0;
1664
1665         error = tbl_foreach(get_table_protected(dp), compat_list_flow, &cbdata);
1666         return error ? error : cbdata.listed_flows;
1667 }
1668
1669 static int compat_flowvec_ioctl(struct datapath *dp, unsigned long argp,
1670                                 int (*function)(struct datapath *,
1671                                                 struct compat_odp_flow __user *,
1672                                                 u32 n_flows))
1673 {
1674         struct compat_odp_flowvec __user *uflowvec;
1675         struct compat_odp_flow __user *flows;
1676         struct compat_odp_flowvec flowvec;
1677         int retval;
1678
1679         uflowvec = compat_ptr(argp);
1680         if (!access_ok(VERIFY_WRITE, uflowvec, sizeof *uflowvec) ||
1681             copy_from_user(&flowvec, uflowvec, sizeof flowvec))
1682                 return -EFAULT;
1683
1684         if (flowvec.n_flows > INT_MAX / sizeof(struct compat_odp_flow))
1685                 return -EINVAL;
1686
1687         flows = compat_ptr(flowvec.flows);
1688         if (!access_ok(VERIFY_WRITE, flows,
1689                        flowvec.n_flows * sizeof(struct compat_odp_flow)))
1690                 return -EFAULT;
1691
1692         retval = function(dp, flows, flowvec.n_flows);
1693         return (retval < 0 ? retval
1694                 : retval == flowvec.n_flows ? 0
1695                 : put_user(retval, &uflowvec->n_flows));
1696 }
1697
1698 static int compat_execute(struct datapath *dp, const struct compat_odp_execute __user *uexecute)
1699 {
1700         struct odp_execute execute;
1701         compat_uptr_t actions;
1702         compat_uptr_t data;
1703
1704         if (!access_ok(VERIFY_READ, uexecute, sizeof(struct compat_odp_execute)) ||
1705             __get_user(actions, &uexecute->actions) ||
1706             __get_user(execute.actions_len, &uexecute->actions_len) ||
1707             __get_user(data, &uexecute->data) ||
1708             __get_user(execute.length, &uexecute->length))
1709                 return -EFAULT;
1710
1711         execute.actions = (struct nlattr __force *)compat_ptr(actions);
1712         execute.data = (const void __force *)compat_ptr(data);
1713
1714         return do_execute(dp, &execute);
1715 }
1716
1717 static long openvswitch_compat_ioctl(struct file *f, unsigned int cmd, unsigned long argp)
1718 {
1719         int dp_idx = iminor(f->f_dentry->d_inode);
1720         struct datapath *dp;
1721         int err;
1722
1723         switch (cmd) {
1724         case ODP_DP_DESTROY:
1725         case ODP_FLOW_FLUSH:
1726                 /* Ioctls that don't need any translation at all. */
1727                 return openvswitch_ioctl(f, cmd, argp);
1728
1729         case ODP_DP_CREATE:
1730         case ODP_VPORT_ATTACH:
1731         case ODP_VPORT_DETACH:
1732         case ODP_VPORT_MOD:
1733         case ODP_VPORT_MTU_SET:
1734         case ODP_VPORT_MTU_GET:
1735         case ODP_VPORT_ETHER_SET:
1736         case ODP_VPORT_ETHER_GET:
1737         case ODP_VPORT_STATS_SET:
1738         case ODP_VPORT_STATS_GET:
1739         case ODP_DP_STATS:
1740         case ODP_GET_DROP_FRAGS:
1741         case ODP_SET_DROP_FRAGS:
1742         case ODP_SET_LISTEN_MASK:
1743         case ODP_GET_LISTEN_MASK:
1744         case ODP_SET_SFLOW_PROBABILITY:
1745         case ODP_GET_SFLOW_PROBABILITY:
1746         case ODP_VPORT_QUERY:
1747                 /* Ioctls that just need their pointer argument extended. */
1748                 return openvswitch_ioctl(f, cmd, (unsigned long)compat_ptr(argp));
1749         }
1750
1751         dp = get_dp_locked(dp_idx);
1752         err = -ENODEV;
1753         if (!dp)
1754                 goto exit;
1755
1756         switch (cmd) {
1757         case ODP_VPORT_LIST32:
1758                 err = compat_list_ports(dp, compat_ptr(argp));
1759                 break;
1760
1761         case ODP_FLOW_PUT32:
1762                 err = compat_put_flow(dp, compat_ptr(argp));
1763                 break;
1764
1765         case ODP_FLOW_DEL32:
1766                 err = compat_del_flow(dp, compat_ptr(argp));
1767                 break;
1768
1769         case ODP_FLOW_GET32:
1770                 err = compat_flowvec_ioctl(dp, argp, compat_query_flows);
1771                 break;
1772
1773         case ODP_FLOW_LIST32:
1774                 err = compat_flowvec_ioctl(dp, argp, compat_list_flows);
1775                 break;
1776
1777         case ODP_EXECUTE32:
1778                 err = compat_execute(dp, compat_ptr(argp));
1779                 break;
1780
1781         default:
1782                 err = -ENOIOCTLCMD;
1783                 break;
1784         }
1785         mutex_unlock(&dp->mutex);
1786 exit:
1787         return err;
1788 }
1789 #endif
1790
1791 /* Unfortunately this function is not exported so this is a verbatim copy
1792  * from net/core/datagram.c in 2.6.30. */
1793 static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
1794                                       u8 __user *to, int len,
1795                                       __wsum *csump)
1796 {
1797         int start = skb_headlen(skb);
1798         int pos = 0;
1799         int i, copy = start - offset;
1800
1801         /* Copy header. */
1802         if (copy > 0) {
1803                 int err = 0;
1804                 if (copy > len)
1805                         copy = len;
1806                 *csump = csum_and_copy_to_user(skb->data + offset, to, copy,
1807                                                *csump, &err);
1808                 if (err)
1809                         goto fault;
1810                 if ((len -= copy) == 0)
1811                         return 0;
1812                 offset += copy;
1813                 to += copy;
1814                 pos = copy;
1815         }
1816
1817         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1818                 int end;
1819
1820                 WARN_ON(start > offset + len);
1821
1822                 end = start + skb_shinfo(skb)->frags[i].size;
1823                 if ((copy = end - offset) > 0) {
1824                         __wsum csum2;
1825                         int err = 0;
1826                         u8  *vaddr;
1827                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
1828                         struct page *page = frag->page;
1829
1830                         if (copy > len)
1831                                 copy = len;
1832                         vaddr = kmap(page);
1833                         csum2 = csum_and_copy_to_user(vaddr +
1834                                                         frag->page_offset +
1835                                                         offset - start,
1836                                                       to, copy, 0, &err);
1837                         kunmap(page);
1838                         if (err)
1839                                 goto fault;
1840                         *csump = csum_block_add(*csump, csum2, pos);
1841                         if (!(len -= copy))
1842                                 return 0;
1843                         offset += copy;
1844                         to += copy;
1845                         pos += copy;
1846                 }
1847                 start = end;
1848         }
1849
1850         if (skb_shinfo(skb)->frag_list) {
1851                 struct sk_buff *list = skb_shinfo(skb)->frag_list;
1852
1853                 for (; list; list=list->next) {
1854                         int end;
1855
1856                         WARN_ON(start > offset + len);
1857
1858                         end = start + list->len;
1859                         if ((copy = end - offset) > 0) {
1860                                 __wsum csum2 = 0;
1861                                 if (copy > len)
1862                                         copy = len;
1863                                 if (skb_copy_and_csum_datagram(list,
1864                                                                offset - start,
1865                                                                to, copy,
1866                                                                &csum2))
1867                                         goto fault;
1868                                 *csump = csum_block_add(*csump, csum2, pos);
1869                                 if ((len -= copy) == 0)
1870                                         return 0;
1871                                 offset += copy;
1872                                 to += copy;
1873                                 pos += copy;
1874                         }
1875                         start = end;
1876                 }
1877         }
1878         if (!len)
1879                 return 0;
1880
1881 fault:
1882         return -EFAULT;
1883 }
1884
1885 static ssize_t openvswitch_read(struct file *f, char __user *buf,
1886                                 size_t nbytes, loff_t *ppos)
1887 {
1888         int listeners = get_listen_mask(f);
1889         int dp_idx = iminor(f->f_dentry->d_inode);
1890         struct datapath *dp = get_dp_locked(dp_idx);
1891         struct sk_buff *skb;
1892         size_t copy_bytes, tot_copy_bytes;
1893         int retval;
1894
1895         if (!dp)
1896                 return -ENODEV;
1897
1898         if (nbytes == 0 || !listeners)
1899                 return 0;
1900
1901         for (;;) {
1902                 int i;
1903
1904                 for (i = 0; i < DP_N_QUEUES; i++) {
1905                         if (listeners & (1 << i)) {
1906                                 skb = skb_dequeue(&dp->queues[i]);
1907                                 if (skb)
1908                                         goto success;
1909                         }
1910                 }
1911
1912                 if (f->f_flags & O_NONBLOCK) {
1913                         retval = -EAGAIN;
1914                         goto error;
1915                 }
1916
1917                 wait_event_interruptible(dp->waitqueue,
1918                                          dp_has_packet_of_interest(dp,
1919                                                                    listeners));
1920
1921                 if (signal_pending(current)) {
1922                         retval = -ERESTARTSYS;
1923                         goto error;
1924                 }
1925         }
1926 success:
1927         mutex_unlock(&dp->mutex);
1928
1929         copy_bytes = tot_copy_bytes = min_t(size_t, skb->len, nbytes);
1930
1931         retval = 0;
1932         if (skb->ip_summed == CHECKSUM_PARTIAL) {
1933                 if (copy_bytes == skb->len) {
1934                         __wsum csum = 0;
1935                         u16 csum_start, csum_offset;
1936
1937                         get_skb_csum_pointers(skb, &csum_start, &csum_offset);
1938                         csum_start -= skb_headroom(skb);
1939
1940                         BUG_ON(csum_start >= skb_headlen(skb));
1941                         retval = skb_copy_and_csum_datagram(skb, csum_start, buf + csum_start,
1942                                                             copy_bytes - csum_start, &csum);
1943                         if (!retval) {
1944                                 __sum16 __user *csump;
1945
1946                                 copy_bytes = csum_start;
1947                                 csump = (__sum16 __user *)(buf + csum_start + csum_offset);
1948
1949                                 BUG_ON((char __user *)csump + sizeof(__sum16) >
1950                                         buf + nbytes);
1951                                 put_user(csum_fold(csum), csump);
1952                         }
1953                 } else
1954                         retval = skb_checksum_help(skb);
1955         }
1956
1957         if (!retval) {
1958                 struct iovec iov;
1959
1960                 iov.iov_base = buf;
1961                 iov.iov_len = copy_bytes;
1962                 retval = skb_copy_datagram_iovec(skb, 0, &iov, iov.iov_len);
1963         }
1964
1965         if (!retval)
1966                 retval = tot_copy_bytes;
1967
1968         kfree_skb(skb);
1969         return retval;
1970
1971 error:
1972         mutex_unlock(&dp->mutex);
1973         return retval;
1974 }
1975
1976 static unsigned int openvswitch_poll(struct file *file, poll_table *wait)
1977 {
1978         int dp_idx = iminor(file->f_dentry->d_inode);
1979         struct datapath *dp = get_dp_locked(dp_idx);
1980         unsigned int mask;
1981
1982         if (dp) {
1983                 mask = 0;
1984                 poll_wait(file, &dp->waitqueue, wait);
1985                 if (dp_has_packet_of_interest(dp, get_listen_mask(file)))
1986                         mask |= POLLIN | POLLRDNORM;
1987                 mutex_unlock(&dp->mutex);
1988         } else {
1989                 mask = POLLIN | POLLRDNORM | POLLHUP;
1990         }
1991         return mask;
1992 }
1993
1994 static struct file_operations openvswitch_fops = {
1995         .read  = openvswitch_read,
1996         .poll  = openvswitch_poll,
1997         .unlocked_ioctl = openvswitch_ioctl,
1998 #ifdef CONFIG_COMPAT
1999         .compat_ioctl = openvswitch_compat_ioctl,
2000 #endif
2001 };
2002
2003 static int major;
2004
2005 static int __init dp_init(void)
2006 {
2007         struct sk_buff *dummy_skb;
2008         int err;
2009
2010         BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > sizeof(dummy_skb->cb));
2011
2012         printk("Open vSwitch %s, built "__DATE__" "__TIME__"\n", VERSION BUILDNR);
2013
2014         err = flow_init();
2015         if (err)
2016                 goto error;
2017
2018         err = vport_init();
2019         if (err)
2020                 goto error_flow_exit;
2021
2022         err = register_netdevice_notifier(&dp_device_notifier);
2023         if (err)
2024                 goto error_vport_exit;
2025
2026         major = register_chrdev(0, "openvswitch", &openvswitch_fops);
2027         if (err < 0)
2028                 goto error_unreg_notifier;
2029
2030         return 0;
2031
2032 error_unreg_notifier:
2033         unregister_netdevice_notifier(&dp_device_notifier);
2034 error_vport_exit:
2035         vport_exit();
2036 error_flow_exit:
2037         flow_exit();
2038 error:
2039         return err;
2040 }
2041
2042 static void dp_cleanup(void)
2043 {
2044         rcu_barrier();
2045         unregister_chrdev(major, "openvswitch");
2046         unregister_netdevice_notifier(&dp_device_notifier);
2047         vport_exit();
2048         flow_exit();
2049 }
2050
2051 module_init(dp_init);
2052 module_exit(dp_cleanup);
2053
2054 MODULE_DESCRIPTION("Open vSwitch switching datapath");
2055 MODULE_LICENSE("GPL");