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