datapath: Add get_vport_protected().
[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
1285         if (copy_from_user(&port, uport, sizeof port))
1286                 return -EFAULT;
1287
1288         if (port.devname[0]) {
1289                 struct vport *vport;
1290                 int err = 0;
1291
1292                 port.devname[IFNAMSIZ - 1] = '\0';
1293
1294                 vport_lock();
1295                 rcu_read_lock();
1296
1297                 vport = vport_locate(port.devname);
1298                 if (!vport) {
1299                         err = -ENODEV;
1300                         goto error_unlock;
1301                 }
1302                 if (vport->dp != dp) {
1303                         err = -ENOENT;
1304                         goto error_unlock;
1305                 }
1306
1307                 port.port = vport->port_no;
1308
1309 error_unlock:
1310                 rcu_read_unlock();
1311                 vport_unlock();
1312
1313                 if (err)
1314                         return err;
1315         } else {
1316                 if (port.port >= DP_MAX_PORTS)
1317                         return -EINVAL;
1318                 if (!dp->ports[port.port])
1319                         return -ENOENT;
1320         }
1321
1322         return put_port(dp->ports[port.port], uport);
1323 }
1324
1325 static int do_list_ports(struct datapath *dp, struct odp_port __user *uports,
1326                          int n_ports)
1327 {
1328         int idx = 0;
1329         if (n_ports) {
1330                 struct vport *p;
1331
1332                 list_for_each_entry_rcu (p, &dp->port_list, node) {
1333                         if (put_port(p, &uports[idx]))
1334                                 return -EFAULT;
1335                         if (idx++ >= n_ports)
1336                                 break;
1337                 }
1338         }
1339         return idx;
1340 }
1341
1342 static int list_ports(struct datapath *dp, struct odp_portvec __user *upv)
1343 {
1344         struct odp_portvec pv;
1345         int retval;
1346
1347         if (copy_from_user(&pv, upv, sizeof pv))
1348                 return -EFAULT;
1349
1350         retval = do_list_ports(dp, (struct odp_port __user __force *)pv.ports,
1351                                pv.n_ports);
1352         if (retval < 0)
1353                 return retval;
1354
1355         return put_user(retval, &upv->n_ports);
1356 }
1357
1358 static int get_listen_mask(const struct file *f)
1359 {
1360         return (long)f->private_data;
1361 }
1362
1363 static void set_listen_mask(struct file *f, int listen_mask)
1364 {
1365         f->private_data = (void*)(long)listen_mask;
1366 }
1367
1368 static long openvswitch_ioctl(struct file *f, unsigned int cmd,
1369                            unsigned long argp)
1370 {
1371         int dp_idx = iminor(f->f_dentry->d_inode);
1372         struct datapath *dp;
1373         int drop_frags, listeners, port_no;
1374         unsigned int sflow_probability;
1375         int err;
1376
1377         /* Handle commands with special locking requirements up front. */
1378         switch (cmd) {
1379         case ODP_DP_CREATE:
1380                 err = create_dp(dp_idx, (char __user *)argp);
1381                 goto exit;
1382
1383         case ODP_DP_DESTROY:
1384                 err = destroy_dp(dp_idx);
1385                 goto exit;
1386
1387         case ODP_VPORT_ATTACH:
1388                 err = attach_port(dp_idx, (struct odp_port __user *)argp);
1389                 goto exit;
1390
1391         case ODP_VPORT_DETACH:
1392                 err = get_user(port_no, (int __user *)argp);
1393                 if (!err)
1394                         err = detach_port(dp_idx, port_no);
1395                 goto exit;
1396
1397         case ODP_VPORT_MOD:
1398                 err = vport_user_mod((struct odp_port __user *)argp);
1399                 goto exit;
1400
1401         case ODP_VPORT_STATS_GET:
1402                 err = vport_user_stats_get((struct odp_vport_stats_req __user *)argp);
1403                 goto exit;
1404
1405         case ODP_VPORT_STATS_SET:
1406                 err = vport_user_stats_set((struct odp_vport_stats_req __user *)argp);
1407                 goto exit;
1408
1409         case ODP_VPORT_ETHER_GET:
1410                 err = vport_user_ether_get((struct odp_vport_ether __user *)argp);
1411                 goto exit;
1412
1413         case ODP_VPORT_ETHER_SET:
1414                 err = vport_user_ether_set((struct odp_vport_ether __user *)argp);
1415                 goto exit;
1416
1417         case ODP_VPORT_MTU_GET:
1418                 err = vport_user_mtu_get((struct odp_vport_mtu __user *)argp);
1419                 goto exit;
1420
1421         case ODP_VPORT_MTU_SET:
1422                 err = vport_user_mtu_set((struct odp_vport_mtu __user *)argp);
1423                 goto exit;
1424         }
1425
1426         dp = get_dp_locked(dp_idx);
1427         err = -ENODEV;
1428         if (!dp)
1429                 goto exit;
1430
1431         switch (cmd) {
1432         case ODP_DP_STATS:
1433                 err = get_dp_stats(dp, (struct odp_stats __user *)argp);
1434                 break;
1435
1436         case ODP_GET_DROP_FRAGS:
1437                 err = put_user(dp->drop_frags, (int __user *)argp);
1438                 break;
1439
1440         case ODP_SET_DROP_FRAGS:
1441                 err = get_user(drop_frags, (int __user *)argp);
1442                 if (err)
1443                         break;
1444                 err = -EINVAL;
1445                 if (drop_frags != 0 && drop_frags != 1)
1446                         break;
1447                 dp->drop_frags = drop_frags;
1448                 err = 0;
1449                 break;
1450
1451         case ODP_GET_LISTEN_MASK:
1452                 err = put_user(get_listen_mask(f), (int __user *)argp);
1453                 break;
1454
1455         case ODP_SET_LISTEN_MASK:
1456                 err = get_user(listeners, (int __user *)argp);
1457                 if (err)
1458                         break;
1459                 err = -EINVAL;
1460                 if (listeners & ~ODPL_ALL)
1461                         break;
1462                 err = 0;
1463                 set_listen_mask(f, listeners);
1464                 break;
1465
1466         case ODP_GET_SFLOW_PROBABILITY:
1467                 err = put_user(dp->sflow_probability, (unsigned int __user *)argp);
1468                 break;
1469
1470         case ODP_SET_SFLOW_PROBABILITY:
1471                 err = get_user(sflow_probability, (unsigned int __user *)argp);
1472                 if (!err)
1473                         dp->sflow_probability = sflow_probability;
1474                 break;
1475
1476         case ODP_VPORT_QUERY:
1477                 err = query_port(dp, (struct odp_port __user *)argp);
1478                 break;
1479
1480         case ODP_VPORT_LIST:
1481                 err = list_ports(dp, (struct odp_portvec __user *)argp);
1482                 break;
1483
1484         case ODP_FLOW_FLUSH:
1485                 err = flush_flows(dp);
1486                 break;
1487
1488         case ODP_FLOW_PUT:
1489                 err = put_flow(dp, (struct odp_flow_put __user *)argp);
1490                 break;
1491
1492         case ODP_FLOW_DEL:
1493                 err = del_flow(dp, (struct odp_flow __user *)argp);
1494                 break;
1495
1496         case ODP_FLOW_GET:
1497                 err = do_flowvec_ioctl(dp, argp, do_query_flows);
1498                 break;
1499
1500         case ODP_FLOW_LIST:
1501                 err = do_flowvec_ioctl(dp, argp, do_list_flows);
1502                 break;
1503
1504         case ODP_EXECUTE:
1505                 err = execute_packet(dp, (struct odp_execute __user *)argp);
1506                 break;
1507
1508         default:
1509                 err = -ENOIOCTLCMD;
1510                 break;
1511         }
1512         mutex_unlock(&dp->mutex);
1513 exit:
1514         return err;
1515 }
1516
1517 static int dp_has_packet_of_interest(struct datapath *dp, int listeners)
1518 {
1519         int i;
1520         for (i = 0; i < DP_N_QUEUES; i++) {
1521                 if (listeners & (1 << i) && !skb_queue_empty(&dp->queues[i]))
1522                         return 1;
1523         }
1524         return 0;
1525 }
1526
1527 #ifdef CONFIG_COMPAT
1528 static int compat_list_ports(struct datapath *dp, struct compat_odp_portvec __user *upv)
1529 {
1530         struct compat_odp_portvec pv;
1531         int retval;
1532
1533         if (copy_from_user(&pv, upv, sizeof pv))
1534                 return -EFAULT;
1535
1536         retval = do_list_ports(dp, compat_ptr(pv.ports), pv.n_ports);
1537         if (retval < 0)
1538                 return retval;
1539
1540         return put_user(retval, &upv->n_ports);
1541 }
1542
1543 static int compat_get_flow(struct odp_flow *flow, const struct compat_odp_flow __user *compat)
1544 {
1545         compat_uptr_t actions;
1546
1547         if (!access_ok(VERIFY_READ, compat, sizeof(struct compat_odp_flow)) ||
1548             __copy_from_user(&flow->stats, &compat->stats, sizeof(struct odp_flow_stats)) ||
1549             __copy_from_user(&flow->key, &compat->key, sizeof(struct odp_flow_key)) ||
1550             __get_user(actions, &compat->actions) ||
1551             __get_user(flow->actions_len, &compat->actions_len) ||
1552             __get_user(flow->flags, &compat->flags))
1553                 return -EFAULT;
1554
1555         flow->actions = (struct nlattr __force *)compat_ptr(actions);
1556         return 0;
1557 }
1558
1559 static int compat_put_flow(struct datapath *dp, struct compat_odp_flow_put __user *ufp)
1560 {
1561         struct odp_flow_stats stats;
1562         struct odp_flow_put fp;
1563         int error;
1564
1565         if (compat_get_flow(&fp.flow, &ufp->flow) ||
1566             get_user(fp.flags, &ufp->flags))
1567                 return -EFAULT;
1568
1569         error = do_put_flow(dp, &fp, &stats);
1570         if (error)
1571                 return error;
1572
1573         if (copy_to_user(&ufp->flow.stats, &stats,
1574                          sizeof(struct odp_flow_stats)))
1575                 return -EFAULT;
1576
1577         return 0;
1578 }
1579
1580 static int compat_answer_query(struct datapath *dp, struct sw_flow *flow,
1581                                u32 query_flags,
1582                                struct compat_odp_flow __user *ufp)
1583 {
1584         compat_uptr_t actions;
1585
1586         if (get_user(actions, &ufp->actions))
1587                 return -EFAULT;
1588
1589         return do_answer_query(dp, flow, query_flags, &ufp->stats,
1590                                compat_ptr(actions), &ufp->actions_len);
1591 }
1592
1593 static int compat_del_flow(struct datapath *dp, struct compat_odp_flow __user *ufp)
1594 {
1595         struct sw_flow *flow;
1596         struct odp_flow uf;
1597         int error;
1598
1599         if (compat_get_flow(&uf, ufp))
1600                 return -EFAULT;
1601
1602         flow = do_del_flow(dp, &uf.key);
1603         if (IS_ERR(flow))
1604                 return PTR_ERR(flow);
1605
1606         error = compat_answer_query(dp, flow, 0, ufp);
1607         flow_deferred_free(flow);
1608         return error;
1609 }
1610
1611 static int compat_query_flows(struct datapath *dp,
1612                               struct compat_odp_flow __user *flows,
1613                               u32 n_flows)
1614 {
1615         struct tbl *table = get_table_protected(dp);
1616         u32 i;
1617
1618         for (i = 0; i < n_flows; i++) {
1619                 struct compat_odp_flow __user *ufp = &flows[i];
1620                 struct odp_flow uf;
1621                 struct tbl_node *flow_node;
1622                 int error;
1623
1624                 if (compat_get_flow(&uf, ufp))
1625                         return -EFAULT;
1626
1627                 flow_node = tbl_lookup(table, &uf.key, flow_hash(&uf.key), flow_cmp);
1628                 if (!flow_node)
1629                         error = put_user(ENOENT, &ufp->stats.error);
1630                 else
1631                         error = compat_answer_query(dp, flow_cast(flow_node),
1632                                                     uf.flags, ufp);
1633                 if (error)
1634                         return -EFAULT;
1635         }
1636         return n_flows;
1637 }
1638
1639 struct compat_list_flows_cbdata {
1640         struct datapath *dp;
1641         struct compat_odp_flow __user *uflows;
1642         u32 n_flows;
1643         u32 listed_flows;
1644 };
1645
1646 static int compat_list_flow(struct tbl_node *node, void *cbdata_)
1647 {
1648         struct sw_flow *flow = flow_cast(node);
1649         struct compat_list_flows_cbdata *cbdata = cbdata_;
1650         struct compat_odp_flow __user *ufp = &cbdata->uflows[cbdata->listed_flows++];
1651         int error;
1652
1653         if (copy_to_user(&ufp->key, &flow->key, sizeof flow->key))
1654                 return -EFAULT;
1655         error = compat_answer_query(cbdata->dp, flow, 0, ufp);
1656         if (error)
1657                 return error;
1658
1659         if (cbdata->listed_flows >= cbdata->n_flows)
1660                 return cbdata->listed_flows;
1661         return 0;
1662 }
1663
1664 static int compat_list_flows(struct datapath *dp,
1665                              struct compat_odp_flow __user *flows, u32 n_flows)
1666 {
1667         struct compat_list_flows_cbdata cbdata;
1668         int error;
1669
1670         if (!n_flows)
1671                 return 0;
1672
1673         cbdata.dp = dp;
1674         cbdata.uflows = flows;
1675         cbdata.n_flows = n_flows;
1676         cbdata.listed_flows = 0;
1677
1678         error = tbl_foreach(get_table_protected(dp), compat_list_flow, &cbdata);
1679         return error ? error : cbdata.listed_flows;
1680 }
1681
1682 static int compat_flowvec_ioctl(struct datapath *dp, unsigned long argp,
1683                                 int (*function)(struct datapath *,
1684                                                 struct compat_odp_flow __user *,
1685                                                 u32 n_flows))
1686 {
1687         struct compat_odp_flowvec __user *uflowvec;
1688         struct compat_odp_flow __user *flows;
1689         struct compat_odp_flowvec flowvec;
1690         int retval;
1691
1692         uflowvec = compat_ptr(argp);
1693         if (!access_ok(VERIFY_WRITE, uflowvec, sizeof *uflowvec) ||
1694             copy_from_user(&flowvec, uflowvec, sizeof flowvec))
1695                 return -EFAULT;
1696
1697         if (flowvec.n_flows > INT_MAX / sizeof(struct compat_odp_flow))
1698                 return -EINVAL;
1699
1700         flows = compat_ptr(flowvec.flows);
1701         if (!access_ok(VERIFY_WRITE, flows,
1702                        flowvec.n_flows * sizeof(struct compat_odp_flow)))
1703                 return -EFAULT;
1704
1705         retval = function(dp, flows, flowvec.n_flows);
1706         return (retval < 0 ? retval
1707                 : retval == flowvec.n_flows ? 0
1708                 : put_user(retval, &uflowvec->n_flows));
1709 }
1710
1711 static int compat_execute(struct datapath *dp, const struct compat_odp_execute __user *uexecute)
1712 {
1713         struct odp_execute execute;
1714         compat_uptr_t actions;
1715         compat_uptr_t data;
1716
1717         if (!access_ok(VERIFY_READ, uexecute, sizeof(struct compat_odp_execute)) ||
1718             __get_user(actions, &uexecute->actions) ||
1719             __get_user(execute.actions_len, &uexecute->actions_len) ||
1720             __get_user(data, &uexecute->data) ||
1721             __get_user(execute.length, &uexecute->length))
1722                 return -EFAULT;
1723
1724         execute.actions = (struct nlattr __force *)compat_ptr(actions);
1725         execute.data = (const void __force *)compat_ptr(data);
1726
1727         return do_execute(dp, &execute);
1728 }
1729
1730 static long openvswitch_compat_ioctl(struct file *f, unsigned int cmd, unsigned long argp)
1731 {
1732         int dp_idx = iminor(f->f_dentry->d_inode);
1733         struct datapath *dp;
1734         int err;
1735
1736         switch (cmd) {
1737         case ODP_DP_DESTROY:
1738         case ODP_FLOW_FLUSH:
1739                 /* Ioctls that don't need any translation at all. */
1740                 return openvswitch_ioctl(f, cmd, argp);
1741
1742         case ODP_DP_CREATE:
1743         case ODP_VPORT_ATTACH:
1744         case ODP_VPORT_DETACH:
1745         case ODP_VPORT_MOD:
1746         case ODP_VPORT_MTU_SET:
1747         case ODP_VPORT_MTU_GET:
1748         case ODP_VPORT_ETHER_SET:
1749         case ODP_VPORT_ETHER_GET:
1750         case ODP_VPORT_STATS_SET:
1751         case ODP_VPORT_STATS_GET:
1752         case ODP_DP_STATS:
1753         case ODP_GET_DROP_FRAGS:
1754         case ODP_SET_DROP_FRAGS:
1755         case ODP_SET_LISTEN_MASK:
1756         case ODP_GET_LISTEN_MASK:
1757         case ODP_SET_SFLOW_PROBABILITY:
1758         case ODP_GET_SFLOW_PROBABILITY:
1759         case ODP_VPORT_QUERY:
1760                 /* Ioctls that just need their pointer argument extended. */
1761                 return openvswitch_ioctl(f, cmd, (unsigned long)compat_ptr(argp));
1762         }
1763
1764         dp = get_dp_locked(dp_idx);
1765         err = -ENODEV;
1766         if (!dp)
1767                 goto exit;
1768
1769         switch (cmd) {
1770         case ODP_VPORT_LIST32:
1771                 err = compat_list_ports(dp, compat_ptr(argp));
1772                 break;
1773
1774         case ODP_FLOW_PUT32:
1775                 err = compat_put_flow(dp, compat_ptr(argp));
1776                 break;
1777
1778         case ODP_FLOW_DEL32:
1779                 err = compat_del_flow(dp, compat_ptr(argp));
1780                 break;
1781
1782         case ODP_FLOW_GET32:
1783                 err = compat_flowvec_ioctl(dp, argp, compat_query_flows);
1784                 break;
1785
1786         case ODP_FLOW_LIST32:
1787                 err = compat_flowvec_ioctl(dp, argp, compat_list_flows);
1788                 break;
1789
1790         case ODP_EXECUTE32:
1791                 err = compat_execute(dp, compat_ptr(argp));
1792                 break;
1793
1794         default:
1795                 err = -ENOIOCTLCMD;
1796                 break;
1797         }
1798         mutex_unlock(&dp->mutex);
1799 exit:
1800         return err;
1801 }
1802 #endif
1803
1804 /* Unfortunately this function is not exported so this is a verbatim copy
1805  * from net/core/datagram.c in 2.6.30. */
1806 static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
1807                                       u8 __user *to, int len,
1808                                       __wsum *csump)
1809 {
1810         int start = skb_headlen(skb);
1811         int pos = 0;
1812         int i, copy = start - offset;
1813
1814         /* Copy header. */
1815         if (copy > 0) {
1816                 int err = 0;
1817                 if (copy > len)
1818                         copy = len;
1819                 *csump = csum_and_copy_to_user(skb->data + offset, to, copy,
1820                                                *csump, &err);
1821                 if (err)
1822                         goto fault;
1823                 if ((len -= copy) == 0)
1824                         return 0;
1825                 offset += copy;
1826                 to += copy;
1827                 pos = copy;
1828         }
1829
1830         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1831                 int end;
1832
1833                 WARN_ON(start > offset + len);
1834
1835                 end = start + skb_shinfo(skb)->frags[i].size;
1836                 if ((copy = end - offset) > 0) {
1837                         __wsum csum2;
1838                         int err = 0;
1839                         u8  *vaddr;
1840                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
1841                         struct page *page = frag->page;
1842
1843                         if (copy > len)
1844                                 copy = len;
1845                         vaddr = kmap(page);
1846                         csum2 = csum_and_copy_to_user(vaddr +
1847                                                         frag->page_offset +
1848                                                         offset - start,
1849                                                       to, copy, 0, &err);
1850                         kunmap(page);
1851                         if (err)
1852                                 goto fault;
1853                         *csump = csum_block_add(*csump, csum2, pos);
1854                         if (!(len -= copy))
1855                                 return 0;
1856                         offset += copy;
1857                         to += copy;
1858                         pos += copy;
1859                 }
1860                 start = end;
1861         }
1862
1863         if (skb_shinfo(skb)->frag_list) {
1864                 struct sk_buff *list = skb_shinfo(skb)->frag_list;
1865
1866                 for (; list; list=list->next) {
1867                         int end;
1868
1869                         WARN_ON(start > offset + len);
1870
1871                         end = start + list->len;
1872                         if ((copy = end - offset) > 0) {
1873                                 __wsum csum2 = 0;
1874                                 if (copy > len)
1875                                         copy = len;
1876                                 if (skb_copy_and_csum_datagram(list,
1877                                                                offset - start,
1878                                                                to, copy,
1879                                                                &csum2))
1880                                         goto fault;
1881                                 *csump = csum_block_add(*csump, csum2, pos);
1882                                 if ((len -= copy) == 0)
1883                                         return 0;
1884                                 offset += copy;
1885                                 to += copy;
1886                                 pos += copy;
1887                         }
1888                         start = end;
1889                 }
1890         }
1891         if (!len)
1892                 return 0;
1893
1894 fault:
1895         return -EFAULT;
1896 }
1897
1898 static ssize_t openvswitch_read(struct file *f, char __user *buf,
1899                                 size_t nbytes, loff_t *ppos)
1900 {
1901         int listeners = get_listen_mask(f);
1902         int dp_idx = iminor(f->f_dentry->d_inode);
1903         struct datapath *dp = get_dp_locked(dp_idx);
1904         struct sk_buff *skb;
1905         size_t copy_bytes, tot_copy_bytes;
1906         int retval;
1907
1908         if (!dp)
1909                 return -ENODEV;
1910
1911         if (nbytes == 0 || !listeners)
1912                 return 0;
1913
1914         for (;;) {
1915                 int i;
1916
1917                 for (i = 0; i < DP_N_QUEUES; i++) {
1918                         if (listeners & (1 << i)) {
1919                                 skb = skb_dequeue(&dp->queues[i]);
1920                                 if (skb)
1921                                         goto success;
1922                         }
1923                 }
1924
1925                 if (f->f_flags & O_NONBLOCK) {
1926                         retval = -EAGAIN;
1927                         goto error;
1928                 }
1929
1930                 wait_event_interruptible(dp->waitqueue,
1931                                          dp_has_packet_of_interest(dp,
1932                                                                    listeners));
1933
1934                 if (signal_pending(current)) {
1935                         retval = -ERESTARTSYS;
1936                         goto error;
1937                 }
1938         }
1939 success:
1940         mutex_unlock(&dp->mutex);
1941
1942         copy_bytes = tot_copy_bytes = min_t(size_t, skb->len, nbytes);
1943
1944         retval = 0;
1945         if (skb->ip_summed == CHECKSUM_PARTIAL) {
1946                 if (copy_bytes == skb->len) {
1947                         __wsum csum = 0;
1948                         u16 csum_start, csum_offset;
1949
1950                         get_skb_csum_pointers(skb, &csum_start, &csum_offset);
1951                         csum_start -= skb_headroom(skb);
1952
1953                         BUG_ON(csum_start >= skb_headlen(skb));
1954                         retval = skb_copy_and_csum_datagram(skb, csum_start, buf + csum_start,
1955                                                             copy_bytes - csum_start, &csum);
1956                         if (!retval) {
1957                                 __sum16 __user *csump;
1958
1959                                 copy_bytes = csum_start;
1960                                 csump = (__sum16 __user *)(buf + csum_start + csum_offset);
1961
1962                                 BUG_ON((char __user *)csump + sizeof(__sum16) >
1963                                         buf + nbytes);
1964                                 put_user(csum_fold(csum), csump);
1965                         }
1966                 } else
1967                         retval = skb_checksum_help(skb);
1968         }
1969
1970         if (!retval) {
1971                 struct iovec iov;
1972
1973                 iov.iov_base = buf;
1974                 iov.iov_len = copy_bytes;
1975                 retval = skb_copy_datagram_iovec(skb, 0, &iov, iov.iov_len);
1976         }
1977
1978         if (!retval)
1979                 retval = tot_copy_bytes;
1980
1981         kfree_skb(skb);
1982         return retval;
1983
1984 error:
1985         mutex_unlock(&dp->mutex);
1986         return retval;
1987 }
1988
1989 static unsigned int openvswitch_poll(struct file *file, poll_table *wait)
1990 {
1991         int dp_idx = iminor(file->f_dentry->d_inode);
1992         struct datapath *dp = get_dp_locked(dp_idx);
1993         unsigned int mask;
1994
1995         if (dp) {
1996                 mask = 0;
1997                 poll_wait(file, &dp->waitqueue, wait);
1998                 if (dp_has_packet_of_interest(dp, get_listen_mask(file)))
1999                         mask |= POLLIN | POLLRDNORM;
2000                 mutex_unlock(&dp->mutex);
2001         } else {
2002                 mask = POLLIN | POLLRDNORM | POLLHUP;
2003         }
2004         return mask;
2005 }
2006
2007 static struct file_operations openvswitch_fops = {
2008         .read  = openvswitch_read,
2009         .poll  = openvswitch_poll,
2010         .unlocked_ioctl = openvswitch_ioctl,
2011 #ifdef CONFIG_COMPAT
2012         .compat_ioctl = openvswitch_compat_ioctl,
2013 #endif
2014 };
2015
2016 static int major;
2017
2018 static int __init dp_init(void)
2019 {
2020         struct sk_buff *dummy_skb;
2021         int err;
2022
2023         BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > sizeof(dummy_skb->cb));
2024
2025         printk("Open vSwitch %s, built "__DATE__" "__TIME__"\n", VERSION BUILDNR);
2026
2027         err = flow_init();
2028         if (err)
2029                 goto error;
2030
2031         err = vport_init();
2032         if (err)
2033                 goto error_flow_exit;
2034
2035         err = register_netdevice_notifier(&dp_device_notifier);
2036         if (err)
2037                 goto error_vport_exit;
2038
2039         major = register_chrdev(0, "openvswitch", &openvswitch_fops);
2040         if (err < 0)
2041                 goto error_unreg_notifier;
2042
2043         return 0;
2044
2045 error_unreg_notifier:
2046         unregister_netdevice_notifier(&dp_device_notifier);
2047 error_vport_exit:
2048         vport_exit();
2049 error_flow_exit:
2050         flow_exit();
2051 error:
2052         return err;
2053 }
2054
2055 static void dp_cleanup(void)
2056 {
2057         rcu_barrier();
2058         unregister_chrdev(major, "openvswitch");
2059         unregister_netdevice_notifier(&dp_device_notifier);
2060         vport_exit();
2061         flow_exit();
2062 }
2063
2064 module_init(dp_init);
2065 module_exit(dp_cleanup);
2066
2067 MODULE_DESCRIPTION("Open vSwitch switching datapath");
2068 MODULE_LICENSE("GPL");