datapath: Convert ODP_FLOW_* and ODP_EXECUTE to put dp_idx into message.
[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(int dp_idx)
646 {
647         struct tbl *old_table;
648         struct tbl *new_table;
649         struct datapath *dp;
650         int err;
651
652         dp = get_dp_locked(dp_idx);
653         err = -ENODEV;
654         if (!dp)
655                 goto exit;
656
657         old_table = get_table_protected(dp);
658         new_table = tbl_create(TBL_MIN_BUCKETS);
659         err = -ENOMEM;
660         if (!new_table)
661                 goto exit_unlock;
662
663         rcu_assign_pointer(dp->table, new_table);
664
665         tbl_deferred_destroy(old_table, flow_free_tbl);
666
667         err = 0;
668
669 exit_unlock:
670         mutex_unlock(&dp->mutex);
671 exit:
672         return err;
673 }
674
675 static int validate_actions(const struct nlattr *actions, u32 actions_len)
676 {
677         const struct nlattr *a;
678         int rem;
679
680         nla_for_each_attr(a, actions, actions_len, rem) {
681                 static const u32 action_lens[ODPAT_MAX + 1] = {
682                         [ODPAT_OUTPUT] = 4,
683                         [ODPAT_CONTROLLER] = 8,
684                         [ODPAT_SET_DL_TCI] = 2,
685                         [ODPAT_STRIP_VLAN] = 0,
686                         [ODPAT_SET_DL_SRC] = ETH_ALEN,
687                         [ODPAT_SET_DL_DST] = ETH_ALEN,
688                         [ODPAT_SET_NW_SRC] = 4,
689                         [ODPAT_SET_NW_DST] = 4,
690                         [ODPAT_SET_NW_TOS] = 1,
691                         [ODPAT_SET_TP_SRC] = 2,
692                         [ODPAT_SET_TP_DST] = 2,
693                         [ODPAT_SET_TUNNEL] = 8,
694                         [ODPAT_SET_PRIORITY] = 4,
695                         [ODPAT_POP_PRIORITY] = 0,
696                         [ODPAT_DROP_SPOOFED_ARP] = 0,
697                 };
698                 int type = nla_type(a);
699
700                 if (type > ODPAT_MAX || nla_len(a) != action_lens[type])
701                         return -EINVAL;
702
703                 switch (type) {
704                 case ODPAT_UNSPEC:
705                         return -EINVAL;
706
707                 case ODPAT_CONTROLLER:
708                 case ODPAT_STRIP_VLAN:
709                 case ODPAT_SET_DL_SRC:
710                 case ODPAT_SET_DL_DST:
711                 case ODPAT_SET_NW_SRC:
712                 case ODPAT_SET_NW_DST:
713                 case ODPAT_SET_TP_SRC:
714                 case ODPAT_SET_TP_DST:
715                 case ODPAT_SET_TUNNEL:
716                 case ODPAT_SET_PRIORITY:
717                 case ODPAT_POP_PRIORITY:
718                 case ODPAT_DROP_SPOOFED_ARP:
719                         /* No validation needed. */
720                         break;
721
722                 case ODPAT_OUTPUT:
723                         if (nla_get_u32(a) >= DP_MAX_PORTS)
724                                 return -EINVAL;
725                         break;
726
727                 case ODPAT_SET_DL_TCI:
728                         if (nla_get_be16(a) & htons(VLAN_CFI_MASK))
729                                 return -EINVAL;
730                         break;
731
732                 case ODPAT_SET_NW_TOS:
733                         if (nla_get_u8(a) & INET_ECN_MASK)
734                                 return -EINVAL;
735                         break;
736
737                 default:
738                         return -EOPNOTSUPP;
739                 }
740         }
741
742         if (rem > 0)
743                 return -EINVAL;
744
745         return 0;
746 }
747
748 static struct sw_flow_actions *get_actions(const struct odp_flow *flow)
749 {
750         struct sw_flow_actions *actions;
751         int error;
752
753         actions = flow_actions_alloc(flow->actions_len);
754         error = PTR_ERR(actions);
755         if (IS_ERR(actions))
756                 goto error;
757
758         error = -EFAULT;
759         if (copy_from_user(actions->actions,
760                            (struct nlattr __user __force *)flow->actions,
761                            flow->actions_len))
762                 goto error_free_actions;
763         error = validate_actions(actions->actions, actions->actions_len);
764         if (error)
765                 goto error_free_actions;
766
767         return actions;
768
769 error_free_actions:
770         kfree(actions);
771 error:
772         return ERR_PTR(error);
773 }
774
775 static void get_stats(struct sw_flow *flow, struct odp_flow_stats *stats)
776 {
777         if (flow->used) {
778                 struct timespec offset_ts, used, now_mono;
779
780                 ktime_get_ts(&now_mono);
781                 jiffies_to_timespec(jiffies - flow->used, &offset_ts);
782                 set_normalized_timespec(&used, now_mono.tv_sec - offset_ts.tv_sec,
783                                         now_mono.tv_nsec - offset_ts.tv_nsec);
784
785                 stats->used_sec = used.tv_sec;
786                 stats->used_nsec = used.tv_nsec;
787         } else {
788                 stats->used_sec = 0;
789                 stats->used_nsec = 0;
790         }
791
792         stats->n_packets = flow->packet_count;
793         stats->n_bytes = flow->byte_count;
794         stats->reserved = 0;
795         stats->tcp_flags = flow->tcp_flags;
796 }
797
798 static void clear_stats(struct sw_flow *flow)
799 {
800         flow->used = 0;
801         flow->tcp_flags = 0;
802         flow->packet_count = 0;
803         flow->byte_count = 0;
804 }
805
806 static int expand_table(struct datapath *dp)
807 {
808         struct tbl *old_table = get_table_protected(dp);
809         struct tbl *new_table;
810
811         new_table = tbl_expand(old_table);
812         if (IS_ERR(new_table))
813                 return PTR_ERR(new_table);
814
815         rcu_assign_pointer(dp->table, new_table);
816         tbl_deferred_destroy(old_table, NULL);
817
818         return 0;
819 }
820
821 static int do_put_flow(struct datapath *dp, struct odp_flow_put *uf,
822                        struct odp_flow_stats *stats)
823 {
824         struct tbl_node *flow_node;
825         struct sw_flow_key key;
826         struct sw_flow *flow;
827         struct tbl *table;
828         struct sw_flow_actions *acts = NULL;
829         int error;
830         u32 hash;
831
832         error = flow_copy_from_user(&key, (const struct nlattr __force __user *)uf->flow.key,
833                                     uf->flow.key_len);
834         if (error)
835                 return error;
836
837         hash = flow_hash(&key);
838         table = get_table_protected(dp);
839         flow_node = tbl_lookup(table, &key, hash, flow_cmp);
840         if (!flow_node) {
841                 /* No such flow. */
842                 error = -ENOENT;
843                 if (!(uf->flags & ODPPF_CREATE))
844                         goto error;
845
846                 /* Expand table, if necessary, to make room. */
847                 if (tbl_count(table) >= tbl_n_buckets(table)) {
848                         error = expand_table(dp);
849                         if (error)
850                                 goto error;
851                         table = get_table_protected(dp);
852                 }
853
854                 /* Allocate flow. */
855                 flow = flow_alloc();
856                 if (IS_ERR(flow)) {
857                         error = PTR_ERR(flow);
858                         goto error;
859                 }
860                 flow->key = key;
861                 clear_stats(flow);
862
863                 /* Obtain actions. */
864                 acts = get_actions(&uf->flow);
865                 error = PTR_ERR(acts);
866                 if (IS_ERR(acts))
867                         goto error_free_flow;
868                 rcu_assign_pointer(flow->sf_acts, acts);
869
870                 /* Put flow in bucket. */
871                 error = tbl_insert(table, &flow->tbl_node, hash);
872                 if (error)
873                         goto error_free_flow_acts;
874
875                 memset(stats, 0, sizeof(struct odp_flow_stats));
876         } else {
877                 /* We found a matching flow. */
878                 struct sw_flow_actions *old_acts, *new_acts;
879
880                 flow = flow_cast(flow_node);
881
882                 /* Bail out if we're not allowed to modify an existing flow. */
883                 error = -EEXIST;
884                 if (!(uf->flags & ODPPF_MODIFY))
885                         goto error;
886
887                 /* Swap actions. */
888                 new_acts = get_actions(&uf->flow);
889                 error = PTR_ERR(new_acts);
890                 if (IS_ERR(new_acts))
891                         goto error;
892
893                 old_acts = rcu_dereference_protected(flow->sf_acts,
894                                                      lockdep_is_held(&dp->mutex));
895                 if (old_acts->actions_len != new_acts->actions_len ||
896                     memcmp(old_acts->actions, new_acts->actions,
897                            old_acts->actions_len)) {
898                         rcu_assign_pointer(flow->sf_acts, new_acts);
899                         flow_deferred_free_acts(old_acts);
900                 } else {
901                         kfree(new_acts);
902                 }
903
904                 /* Fetch stats, then clear them if necessary. */
905                 spin_lock_bh(&flow->lock);
906                 get_stats(flow, stats);
907                 if (uf->flags & ODPPF_ZERO_STATS)
908                         clear_stats(flow);
909                 spin_unlock_bh(&flow->lock);
910         }
911
912         return 0;
913
914 error_free_flow_acts:
915         kfree(acts);
916 error_free_flow:
917         flow->sf_acts = NULL;
918         flow_put(flow);
919 error:
920         return error;
921 }
922
923 static int put_flow(struct odp_flow_put __user *ufp)
924 {
925         struct odp_flow_stats stats;
926         struct odp_flow_put uf;
927         struct datapath *dp;
928         int error;
929
930         if (copy_from_user(&uf, ufp, sizeof(struct odp_flow_put)))
931                 return -EFAULT;
932
933         dp = get_dp_locked(uf.flow.dp_idx);
934         if (!dp)
935                 return -ENODEV;
936
937         error = do_put_flow(dp, &uf, &stats);
938         if (!error) {
939                 if (copy_to_user(&ufp->flow.stats, &stats,
940                                  sizeof(struct odp_flow_stats)))
941                         error = -EFAULT;
942         }
943         mutex_unlock(&dp->mutex);
944
945         return error;
946 }
947
948 static int do_answer_query(struct datapath *dp, struct sw_flow *flow,
949                            struct odp_flow_stats __user *ustats,
950                            struct nlattr __user *actions,
951                            u32 __user *actions_lenp)
952 {
953         struct sw_flow_actions *sf_acts;
954         struct odp_flow_stats stats;
955         u32 actions_len;
956
957         spin_lock_bh(&flow->lock);
958         get_stats(flow, &stats);
959         spin_unlock_bh(&flow->lock);
960
961         if (copy_to_user(ustats, &stats, sizeof(struct odp_flow_stats)) ||
962             get_user(actions_len, actions_lenp))
963                 return -EFAULT;
964
965         if (!actions_len)
966                 return 0;
967
968         sf_acts = rcu_dereference_protected(flow->sf_acts,
969                                             lockdep_is_held(&dp->mutex));
970         if (put_user(sf_acts->actions_len, actions_lenp) ||
971             (actions && copy_to_user(actions, sf_acts->actions,
972                                      min(sf_acts->actions_len, actions_len))))
973                 return -EFAULT;
974
975         return 0;
976 }
977
978 static int answer_query(struct datapath *dp, struct sw_flow *flow,
979                         struct odp_flow __user *ufp)
980 {
981         struct nlattr __user *actions;
982
983         if (get_user(actions, (struct nlattr __user * __user *)&ufp->actions))
984                 return -EFAULT;
985
986         return do_answer_query(dp, flow, &ufp->stats, actions, &ufp->actions_len);
987 }
988
989 static struct sw_flow *do_del_flow(struct datapath *dp, const struct nlattr __user *key, u32 key_len)
990 {
991         struct tbl *table = get_table_protected(dp);
992         struct tbl_node *flow_node;
993         struct sw_flow_key swkey;
994         int error;
995
996         error = flow_copy_from_user(&swkey, key, key_len);
997         if (error)
998                 return ERR_PTR(error);
999
1000         flow_node = tbl_lookup(table, &swkey, flow_hash(&swkey), flow_cmp);
1001         if (!flow_node)
1002                 return ERR_PTR(-ENOENT);
1003
1004         error = tbl_remove(table, flow_node);
1005         if (error)
1006                 return ERR_PTR(error);
1007
1008         /* XXX Returned flow_node's statistics might lose a few packets, since
1009          * other CPUs can be using this flow.  We used to synchronize_rcu() to
1010          * make sure that we get completely accurate stats, but that blows our
1011          * performance, badly. */
1012         return flow_cast(flow_node);
1013 }
1014
1015 static int del_flow(struct odp_flow __user *ufp)
1016 {
1017         struct sw_flow *flow;
1018         struct datapath *dp;
1019         struct odp_flow uf;
1020         int error;
1021
1022         if (copy_from_user(&uf, ufp, sizeof(uf)))
1023                 return -EFAULT;
1024
1025         dp = get_dp_locked(uf.dp_idx);
1026         if (!dp)
1027                 return -ENODEV;
1028
1029         flow = do_del_flow(dp, (const struct nlattr __force __user *)uf.key, uf.key_len);
1030         error = PTR_ERR(flow);
1031         if (!IS_ERR(flow)) {
1032                 error = answer_query(dp, flow, ufp);
1033                 flow_deferred_free(flow);
1034         }
1035         mutex_unlock(&dp->mutex);
1036
1037         return error;
1038 }
1039
1040 static int query_flow(struct odp_flow __user *uflow)
1041 {
1042         struct tbl_node *flow_node;
1043         struct sw_flow_key key;
1044         struct odp_flow flow;
1045         struct datapath *dp;
1046         int error;
1047
1048         if (copy_from_user(&flow, uflow, sizeof(flow)))
1049                 return -EFAULT;
1050
1051         dp = get_dp_locked(flow.dp_idx);
1052         if (!dp)
1053                 return -ENODEV;
1054
1055         error = flow_copy_from_user(&key, (const struct nlattr __force __user *)flow.key, flow.key_len);
1056         if (!error) {
1057                 struct tbl *table = get_table_protected(dp);
1058                 flow_node = tbl_lookup(table, &flow.key, flow_hash(&key), flow_cmp);
1059                 if (flow_node)
1060                         error = answer_query(dp, flow_cast(flow_node), uflow);
1061                 else
1062                         error = -ENOENT;
1063         }
1064         mutex_unlock(&dp->mutex);
1065
1066         return error;
1067 }
1068
1069 static int dump_flow(struct odp_flow_dump __user *udump)
1070 {
1071         struct odp_flow __user *uflow;
1072         struct nlattr __user *ukey;
1073         struct tbl_node *tbl_node;
1074         struct odp_flow_dump dump;
1075         struct sw_flow *flow;
1076         struct datapath *dp;
1077         struct tbl *table;
1078         u32 key_len;
1079         int err;
1080
1081         err = -EFAULT;
1082         if (copy_from_user(&dump, udump, sizeof(struct odp_flow_dump)))
1083                 goto exit;
1084         uflow = (struct odp_flow __user __force *)dump.flow;
1085
1086         dp = get_dp_locked(dump.dp_idx);
1087         err = -ENODEV;
1088         if (!dp)
1089                 goto exit;
1090
1091         table = get_table_protected(dp);
1092         tbl_node = tbl_next(table, &dump.state[0], &dump.state[1]);
1093         if (!tbl_node) {
1094                 err = put_user(0, &uflow->key_len);
1095                 goto exit_unlock;
1096         }
1097         flow = flow_cast(tbl_node);
1098
1099         err = -EFAULT;
1100         if (copy_to_user(udump->state, dump.state, 2 * sizeof(uint32_t)) ||
1101             get_user(ukey, (struct nlattr __user * __user*)&uflow->key) ||
1102             get_user(key_len, &uflow->key_len))
1103                 goto exit_unlock;
1104
1105         key_len = flow_copy_to_user(ukey, &flow->key, key_len);
1106         err = key_len;
1107         if (key_len < 0)
1108                 goto exit_unlock;
1109         err = -EFAULT;
1110         if (put_user(key_len, &uflow->key_len))
1111                 goto exit_unlock;
1112
1113         err = answer_query(dp, flow, uflow);
1114
1115 exit_unlock:
1116         mutex_unlock(&dp->mutex);
1117 exit:
1118         return err;
1119 }
1120
1121 static int do_execute(struct datapath *dp, const struct odp_execute *execute)
1122 {
1123         struct sw_flow_key key;
1124         struct sk_buff *skb;
1125         struct sw_flow_actions *actions;
1126         struct ethhdr *eth;
1127         bool is_frag;
1128         int err;
1129
1130         err = -EINVAL;
1131         if (execute->length < ETH_HLEN || execute->length > 65535)
1132                 goto error;
1133
1134         actions = flow_actions_alloc(execute->actions_len);
1135         if (IS_ERR(actions)) {
1136                 err = PTR_ERR(actions);
1137                 goto error;
1138         }
1139
1140         err = -EFAULT;
1141         if (copy_from_user(actions->actions,
1142             (struct nlattr __user __force *)execute->actions, execute->actions_len))
1143                 goto error_free_actions;
1144
1145         err = validate_actions(actions->actions, execute->actions_len);
1146         if (err)
1147                 goto error_free_actions;
1148
1149         err = -ENOMEM;
1150         skb = alloc_skb(execute->length, GFP_KERNEL);
1151         if (!skb)
1152                 goto error_free_actions;
1153
1154         err = -EFAULT;
1155         if (copy_from_user(skb_put(skb, execute->length),
1156                            (const void __user __force *)execute->data,
1157                            execute->length))
1158                 goto error_free_skb;
1159
1160         skb_reset_mac_header(skb);
1161         eth = eth_hdr(skb);
1162
1163         /* Normally, setting the skb 'protocol' field would be handled by a
1164          * call to eth_type_trans(), but it assumes there's a sending
1165          * device, which we may not have. */
1166         if (ntohs(eth->h_proto) >= 1536)
1167                 skb->protocol = eth->h_proto;
1168         else
1169                 skb->protocol = htons(ETH_P_802_2);
1170
1171         err = flow_extract(skb, -1, &key, &is_frag);
1172         if (err)
1173                 goto error_free_skb;
1174
1175         rcu_read_lock();
1176         err = execute_actions(dp, skb, &key, actions->actions, actions->actions_len);
1177         rcu_read_unlock();
1178
1179         kfree(actions);
1180         return err;
1181
1182 error_free_skb:
1183         kfree_skb(skb);
1184 error_free_actions:
1185         kfree(actions);
1186 error:
1187         return err;
1188 }
1189
1190 static int execute_packet(const struct odp_execute __user *executep)
1191 {
1192         struct odp_execute execute;
1193         struct datapath *dp;
1194         int error;
1195
1196         if (copy_from_user(&execute, executep, sizeof(execute)))
1197                 return -EFAULT;
1198
1199         dp = get_dp_locked(execute.dp_idx);
1200         if (!dp)
1201                 return -ENODEV;
1202         error = do_execute(dp, &execute);
1203         mutex_unlock(&dp->mutex);
1204
1205         return error;
1206 }
1207
1208 static int get_dp_stats(struct datapath *dp, struct odp_stats __user *statsp)
1209 {
1210         struct odp_stats stats;
1211         int i;
1212
1213         stats.n_frags = stats.n_hit = stats.n_missed = stats.n_lost = 0;
1214         for_each_possible_cpu(i) {
1215                 const struct dp_stats_percpu *percpu_stats;
1216                 struct dp_stats_percpu local_stats;
1217                 unsigned seqcount;
1218
1219                 percpu_stats = per_cpu_ptr(dp->stats_percpu, i);
1220
1221                 do {
1222                         seqcount = read_seqcount_begin(&percpu_stats->seqlock);
1223                         local_stats = *percpu_stats;
1224                 } while (read_seqcount_retry(&percpu_stats->seqlock, seqcount));
1225
1226                 stats.n_frags += local_stats.n_frags;
1227                 stats.n_hit += local_stats.n_hit;
1228                 stats.n_missed += local_stats.n_missed;
1229                 stats.n_lost += local_stats.n_lost;
1230         }
1231         return copy_to_user(statsp, &stats, sizeof(stats)) ? -EFAULT : 0;
1232 }
1233
1234 /* MTU of the dp pseudo-device: ETH_DATA_LEN or the minimum of the ports */
1235 int dp_min_mtu(const struct datapath *dp)
1236 {
1237         struct vport *p;
1238         int mtu = 0;
1239
1240         ASSERT_RTNL();
1241
1242         list_for_each_entry_rcu (p, &dp->port_list, node) {
1243                 int dev_mtu;
1244
1245                 /* Skip any internal ports, since that's what we're trying to
1246                  * set. */
1247                 if (is_internal_vport(p))
1248                         continue;
1249
1250                 dev_mtu = vport_get_mtu(p);
1251                 if (!mtu || dev_mtu < mtu)
1252                         mtu = dev_mtu;
1253         }
1254
1255         return mtu ? mtu : ETH_DATA_LEN;
1256 }
1257
1258 /* Sets the MTU of all datapath devices to the minimum of the ports.  Must
1259  * be called with RTNL lock. */
1260 void set_internal_devs_mtu(const struct datapath *dp)
1261 {
1262         struct vport *p;
1263         int mtu;
1264
1265         ASSERT_RTNL();
1266
1267         mtu = dp_min_mtu(dp);
1268
1269         list_for_each_entry_rcu (p, &dp->port_list, node) {
1270                 if (is_internal_vport(p))
1271                         vport_set_mtu(p, mtu);
1272         }
1273 }
1274
1275 static int get_listen_mask(const struct file *f)
1276 {
1277         return (long)f->private_data;
1278 }
1279
1280 static void set_listen_mask(struct file *f, int listen_mask)
1281 {
1282         f->private_data = (void*)(long)listen_mask;
1283 }
1284
1285 static const struct nla_policy vport_policy[ODP_VPORT_ATTR_MAX + 1] = {
1286         [ODP_VPORT_ATTR_NAME] = { .type = NLA_NUL_STRING, .len = IFNAMSIZ - 1 },
1287         [ODP_VPORT_ATTR_PORT_NO] = { .type = NLA_U32 },
1288         [ODP_VPORT_ATTR_TYPE] = { .type = NLA_U32 },
1289         [ODP_VPORT_ATTR_STATS] = { .len = sizeof(struct rtnl_link_stats64) },
1290         [ODP_VPORT_ATTR_ADDRESS] = { .len = ETH_ALEN },
1291         [ODP_VPORT_ATTR_MTU] = { .type = NLA_U32 },
1292         [ODP_VPORT_ATTR_OPTIONS] = { .type = NLA_NESTED },
1293 };
1294
1295 static int copy_vport_to_user(void __user *dst, struct vport *vport, uint32_t total_len)
1296 {
1297         struct odp_vport *odp_vport;
1298         struct sk_buff *skb;
1299         struct nlattr *nla;
1300         int ifindex, iflink;
1301         int err;
1302
1303         skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);
1304         err = -ENOMEM;
1305         if (!skb)
1306                 goto exit;
1307
1308         rcu_read_lock();
1309         odp_vport = (struct odp_vport*)__skb_put(skb, sizeof(struct odp_vport));
1310         odp_vport->dp_idx = vport->dp->dp_idx;
1311         odp_vport->total_len = total_len;
1312
1313         NLA_PUT_U32(skb, ODP_VPORT_ATTR_PORT_NO, vport->port_no);
1314         NLA_PUT_U32(skb, ODP_VPORT_ATTR_TYPE, vport_get_type(vport));
1315         NLA_PUT_STRING(skb, ODP_VPORT_ATTR_NAME, vport_get_name(vport));
1316
1317         nla = nla_reserve(skb, ODP_VPORT_ATTR_STATS, sizeof(struct rtnl_link_stats64));
1318         if (!nla)
1319                 goto nla_put_failure;
1320         if (vport_get_stats(vport, nla_data(nla)))
1321                 __skb_trim(skb, skb->len - nla->nla_len);
1322
1323         NLA_PUT(skb, ODP_VPORT_ATTR_ADDRESS, ETH_ALEN, vport_get_addr(vport));
1324
1325         NLA_PUT_U32(skb, ODP_VPORT_ATTR_MTU, vport_get_mtu(vport));
1326
1327         err = vport_get_options(vport, skb);
1328
1329         ifindex = vport_get_ifindex(vport);
1330         if (ifindex > 0)
1331                 NLA_PUT_U32(skb, ODP_VPORT_ATTR_IFINDEX, ifindex);
1332
1333         iflink = vport_get_iflink(vport);
1334         if (iflink > 0)
1335                 NLA_PUT_U32(skb, ODP_VPORT_ATTR_IFLINK, iflink);
1336
1337         err = -EMSGSIZE;
1338         if (skb->len > total_len)
1339                 goto exit_unlock;
1340
1341         odp_vport->len = skb->len;
1342         err = copy_to_user(dst, skb->data, skb->len) ? -EFAULT : 0;
1343         goto exit_unlock;
1344
1345 nla_put_failure:
1346         err = -EMSGSIZE;
1347 exit_unlock:
1348         rcu_read_unlock();
1349         kfree_skb(skb);
1350 exit:
1351         return err;
1352 }
1353
1354 static struct sk_buff *copy_vport_from_user(struct odp_vport __user *uodp_vport,
1355                                             struct nlattr *a[ODP_VPORT_ATTR_MAX + 1])
1356 {
1357         struct odp_vport *odp_vport;
1358         struct sk_buff *skb;
1359         u32 len;
1360         int err;
1361
1362         if (get_user(len, &uodp_vport->len))
1363                 return ERR_PTR(-EFAULT);
1364         if (len < sizeof(struct odp_vport))
1365                 return ERR_PTR(-EINVAL);
1366
1367         skb = alloc_skb(len, GFP_KERNEL);
1368         if (!skb)
1369                 return ERR_PTR(-ENOMEM);
1370
1371         err = -EFAULT;
1372         if (copy_from_user(__skb_put(skb, len), uodp_vport, len))
1373                 goto error_free_skb;
1374
1375         odp_vport = (struct odp_vport *)skb->data;
1376         err = -EINVAL;
1377         if (odp_vport->len != len)
1378                 goto error_free_skb;
1379
1380         err = nla_parse(a, ODP_VPORT_ATTR_MAX, (struct nlattr *)(skb->data + sizeof(struct odp_vport)),
1381                         skb->len - sizeof(struct odp_vport), vport_policy);
1382         if (err)
1383                 goto error_free_skb;
1384
1385         err = VERIFY_NUL_STRING(a[ODP_VPORT_ATTR_NAME], IFNAMSIZ - 1);
1386         if (err)
1387                 goto error_free_skb;
1388
1389         return skb;
1390
1391 error_free_skb:
1392         kfree_skb(skb);
1393         return ERR_PTR(err);
1394 }
1395
1396
1397 /* Called without any locks (or with RTNL lock).
1398  * Returns holding vport->dp->mutex.
1399  */
1400 static struct vport *lookup_vport(struct odp_vport *odp_vport,
1401                                   struct nlattr *a[ODP_VPORT_ATTR_MAX + 1])
1402 {
1403         struct datapath *dp;
1404         struct vport *vport;
1405
1406         if (a[ODP_VPORT_ATTR_NAME]) {
1407                 int dp_idx, port_no;
1408
1409         retry:
1410                 vport_lock();
1411                 vport = vport_locate(nla_data(a[ODP_VPORT_ATTR_NAME]));
1412                 if (!vport) {
1413                         vport_unlock();
1414                         return ERR_PTR(-ENODEV);
1415                 }
1416                 dp_idx = vport->dp->dp_idx;
1417                 port_no = vport->port_no;
1418                 vport_unlock();
1419
1420                 dp = get_dp_locked(dp_idx);
1421                 if (!dp)
1422                         goto retry;
1423
1424                 vport = get_vport_protected(dp, port_no);
1425                 if (!vport ||
1426                     strcmp(vport_get_name(vport), nla_data(a[ODP_VPORT_ATTR_NAME]))) {
1427                         mutex_unlock(&dp->mutex);
1428                         goto retry;
1429                 }
1430
1431                 return vport;
1432         } else if (a[ODP_VPORT_ATTR_PORT_NO]) {
1433                 u32 port_no = nla_get_u32(a[ODP_VPORT_ATTR_PORT_NO]);
1434
1435                 if (port_no >= DP_MAX_PORTS)
1436                         return ERR_PTR(-EINVAL);
1437
1438                 dp = get_dp_locked(odp_vport->dp_idx);
1439                 if (!dp)
1440                         return ERR_PTR(-ENODEV);
1441
1442                 vport = get_vport_protected(dp, port_no);
1443                 if (!vport) {
1444                         mutex_unlock(&dp->mutex);
1445                         return ERR_PTR(-ENOENT);
1446                 }
1447                 return vport;
1448         } else
1449                 return ERR_PTR(-EINVAL);
1450 }
1451
1452 static int change_vport(struct vport *vport, struct nlattr *a[ODP_VPORT_ATTR_MAX + 1])
1453 {
1454         int err = 0;
1455         if (a[ODP_VPORT_ATTR_STATS])
1456                 err = vport_set_stats(vport, nla_data(a[ODP_VPORT_ATTR_STATS]));
1457         if (!err && a[ODP_VPORT_ATTR_ADDRESS])
1458                 err = vport_set_addr(vport, nla_data(a[ODP_VPORT_ATTR_ADDRESS]));
1459         if (!err && a[ODP_VPORT_ATTR_MTU])
1460                 err = vport_set_mtu(vport, nla_get_u32(a[ODP_VPORT_ATTR_MTU]));
1461         return err;
1462 }
1463
1464 static int attach_vport(struct odp_vport __user *uodp_vport)
1465 {
1466         struct nlattr *a[ODP_VPORT_ATTR_MAX + 1];
1467         struct odp_vport *odp_vport;
1468         struct vport_parms parms;
1469         struct vport *vport;
1470         struct sk_buff *skb;
1471         struct datapath *dp;
1472         u32 port_no;
1473         int err;
1474
1475         skb = copy_vport_from_user(uodp_vport, a);
1476         err = PTR_ERR(skb);
1477         if (IS_ERR(skb))
1478                 goto exit;
1479         odp_vport = (struct odp_vport *)skb->data;
1480
1481         err = -EINVAL;
1482         if (!a[ODP_VPORT_ATTR_NAME] || !a[ODP_VPORT_ATTR_TYPE])
1483                 goto exit_kfree_skb;
1484
1485         rtnl_lock();
1486
1487         dp = get_dp_locked(odp_vport->dp_idx);
1488         err = -ENODEV;
1489         if (!dp)
1490                 goto exit_unlock_rtnl;
1491
1492         if (a[ODP_VPORT_ATTR_PORT_NO]) {
1493                 port_no = nla_get_u32(a[ODP_VPORT_ATTR_PORT_NO]);
1494
1495                 err = -EFBIG;
1496                 if (port_no >= DP_MAX_PORTS)
1497                         goto exit_unlock_dp;
1498
1499                 vport = get_vport_protected(dp, port_no);
1500                 err = -EBUSY;
1501                 if (vport)
1502                         goto exit_unlock_dp;
1503         } else {
1504                 for (port_no = 1; ; port_no++) {
1505                         if (port_no >= DP_MAX_PORTS) {
1506                                 err = -EFBIG;
1507                                 goto exit_unlock_dp;
1508                         }
1509                         vport = get_vport_protected(dp, port_no);
1510                         if (!vport)
1511                                 break;
1512                 }
1513         }
1514
1515         parms.name = nla_data(a[ODP_VPORT_ATTR_NAME]);
1516         parms.type = nla_get_u32(a[ODP_VPORT_ATTR_TYPE]);
1517         parms.options = a[ODP_VPORT_ATTR_OPTIONS];
1518         parms.dp = dp;
1519         parms.port_no = port_no;
1520
1521         vport = new_vport(&parms);
1522         err = PTR_ERR(vport);
1523         if (IS_ERR(vport))
1524                 goto exit_unlock_dp;
1525
1526         set_internal_devs_mtu(dp);
1527         dp_sysfs_add_if(vport);
1528
1529         err = change_vport(vport, a);
1530         if (err) {
1531                 dp_detach_port(vport);
1532                 goto exit_unlock_dp;
1533         }
1534
1535         err = copy_vport_to_user(uodp_vport, vport, odp_vport->total_len);
1536
1537 exit_unlock_dp:
1538         mutex_unlock(&dp->mutex);
1539 exit_unlock_rtnl:
1540         rtnl_unlock();
1541 exit_kfree_skb:
1542         kfree_skb(skb);
1543 exit:
1544         return err;
1545 }
1546
1547 static int set_vport(unsigned int cmd, struct odp_vport __user *uodp_vport)
1548 {
1549         struct nlattr *a[ODP_VPORT_ATTR_MAX + 1];
1550         struct vport *vport;
1551         struct sk_buff *skb;
1552         int err;
1553
1554         skb = copy_vport_from_user(uodp_vport, a);
1555         err = PTR_ERR(skb);
1556         if (IS_ERR(skb))
1557                 goto exit;
1558
1559         rtnl_lock();
1560         vport = lookup_vport((struct odp_vport *)skb->data, a);
1561         err = PTR_ERR(vport);
1562         if (IS_ERR(vport))
1563                 goto exit_free;
1564
1565         err = 0;
1566         if (a[ODP_VPORT_ATTR_OPTIONS])
1567                 err = vport_set_options(vport, a[ODP_VPORT_ATTR_OPTIONS]);
1568         if (!err)
1569                 err = change_vport(vport, a);
1570
1571         mutex_unlock(&vport->dp->mutex);
1572 exit_free:
1573         kfree_skb(skb);
1574         rtnl_unlock();
1575 exit:
1576         return err;
1577 }
1578
1579 static int del_vport(unsigned int cmd, struct odp_vport __user *uodp_vport)
1580 {
1581         struct nlattr *a[ODP_VPORT_ATTR_MAX + 1];
1582         struct datapath *dp;
1583         struct vport *vport;
1584         struct sk_buff *skb;
1585         int err;
1586
1587         skb = copy_vport_from_user(uodp_vport, a);
1588         err = PTR_ERR(skb);
1589         if (IS_ERR(skb))
1590                 goto exit;
1591
1592         rtnl_lock();
1593         vport = lookup_vport((struct odp_vport *)skb->data, a);
1594         err = PTR_ERR(vport);
1595         if (IS_ERR(vport))
1596                 goto exit_free;
1597         dp = vport->dp;
1598
1599         err = -EINVAL;
1600         if (vport->port_no == ODPP_LOCAL)
1601                 goto exit_free;
1602
1603         err = dp_detach_port(vport);
1604         mutex_unlock(&dp->mutex);
1605 exit_free:
1606         kfree_skb(skb);
1607         rtnl_unlock();
1608 exit:
1609         return err;
1610 }
1611
1612 static int get_vport(struct odp_vport __user *uodp_vport)
1613 {
1614         struct nlattr *a[ODP_VPORT_ATTR_MAX + 1];
1615         struct odp_vport *odp_vport;
1616         struct vport *vport;
1617         struct sk_buff *skb;
1618         int err;
1619
1620         skb = copy_vport_from_user(uodp_vport, a);
1621         err = PTR_ERR(skb);
1622         if (IS_ERR(skb))
1623                 goto exit;
1624         odp_vport = (struct odp_vport *)skb->data;
1625
1626         vport = lookup_vport(odp_vport, a);
1627         err = PTR_ERR(vport);
1628         if (IS_ERR(vport))
1629                 goto exit_free;
1630
1631         err = copy_vport_to_user(uodp_vport, vport, odp_vport->total_len);
1632         mutex_unlock(&vport->dp->mutex);
1633 exit_free:
1634         kfree_skb(skb);
1635 exit:
1636         return err;
1637 }
1638
1639 static int dump_vport(struct odp_vport __user *uodp_vport)
1640 {
1641         struct nlattr *a[ODP_VPORT_ATTR_MAX + 1];
1642         struct odp_vport *odp_vport;
1643         struct sk_buff *skb;
1644         struct datapath *dp;
1645         u32 port_no;
1646         int err;
1647
1648         skb = copy_vport_from_user(uodp_vport, a);
1649         err = PTR_ERR(skb);
1650         if (IS_ERR(skb))
1651                 goto exit;
1652         odp_vport = (struct odp_vport *)skb->data;
1653
1654         dp = get_dp_locked(odp_vport->dp_idx);
1655         err = -ENODEV;
1656         if (!dp)
1657                 goto exit_free;
1658
1659         port_no = 0;
1660         if (a[ODP_VPORT_ATTR_PORT_NO])
1661                 port_no = nla_get_u32(a[ODP_VPORT_ATTR_PORT_NO]);
1662         for (; port_no < DP_MAX_PORTS; port_no++) {
1663                 struct vport *vport = get_vport_protected(dp, port_no);
1664                 if (vport) {
1665                         err = copy_vport_to_user(uodp_vport, vport, odp_vport->total_len);
1666                         goto exit_unlock_dp;
1667                 }
1668         }
1669         err = -ENODEV;
1670
1671 exit_unlock_dp:
1672         mutex_unlock(&dp->mutex);
1673 exit_free:
1674         kfree_skb(skb);
1675 exit:
1676         return err;
1677 }
1678
1679 static long openvswitch_ioctl(struct file *f, unsigned int cmd,
1680                            unsigned long argp)
1681 {
1682         int dp_idx = iminor(f->f_dentry->d_inode);
1683         struct datapath *dp;
1684         int drop_frags, listeners;
1685         unsigned int sflow_probability;
1686         int err;
1687
1688         /* Handle commands with special locking requirements up front. */
1689         switch (cmd) {
1690         case ODP_DP_CREATE:
1691                 err = create_dp(dp_idx, (char __user *)argp);
1692                 goto exit;
1693
1694         case ODP_DP_DESTROY:
1695                 err = destroy_dp(dp_idx);
1696                 goto exit;
1697
1698         case ODP_VPORT_NEW:
1699                 err = attach_vport((struct odp_vport __user *)argp);
1700                 goto exit;
1701
1702         case ODP_VPORT_GET:
1703                 err = get_vport((struct odp_vport __user *)argp);
1704                 goto exit;
1705
1706         case ODP_VPORT_DEL:
1707                 err = del_vport(cmd, (struct odp_vport __user *)argp);
1708                 goto exit;
1709
1710         case ODP_VPORT_SET:
1711                 err = set_vport(cmd, (struct odp_vport __user *)argp);
1712                 goto exit;
1713
1714         case ODP_VPORT_DUMP:
1715                 err = dump_vport((struct odp_vport __user *)argp);
1716                 goto exit;
1717
1718         case ODP_FLOW_FLUSH:
1719                 err = flush_flows(argp);
1720                 goto exit;
1721
1722         case ODP_FLOW_PUT:
1723                 err = put_flow((struct odp_flow_put __user *)argp);
1724                 goto exit;
1725
1726         case ODP_FLOW_DEL:
1727                 err = del_flow((struct odp_flow __user *)argp);
1728                 goto exit;
1729
1730         case ODP_FLOW_GET:
1731                 err = query_flow((struct odp_flow __user *)argp);
1732                 goto exit;
1733
1734         case ODP_FLOW_DUMP:
1735                 err = dump_flow((struct odp_flow_dump __user *)argp);
1736                 goto exit;
1737
1738         case ODP_EXECUTE:
1739                 err = execute_packet((struct odp_execute __user *)argp);
1740                 goto exit;
1741         }
1742
1743         dp = get_dp_locked(dp_idx);
1744         err = -ENODEV;
1745         if (!dp)
1746                 goto exit;
1747
1748         switch (cmd) {
1749         case ODP_DP_STATS:
1750                 err = get_dp_stats(dp, (struct odp_stats __user *)argp);
1751                 break;
1752
1753         case ODP_GET_DROP_FRAGS:
1754                 err = put_user(dp->drop_frags, (int __user *)argp);
1755                 break;
1756
1757         case ODP_SET_DROP_FRAGS:
1758                 err = get_user(drop_frags, (int __user *)argp);
1759                 if (err)
1760                         break;
1761                 err = -EINVAL;
1762                 if (drop_frags != 0 && drop_frags != 1)
1763                         break;
1764                 dp->drop_frags = drop_frags;
1765                 err = 0;
1766                 break;
1767
1768         case ODP_GET_LISTEN_MASK:
1769                 err = put_user(get_listen_mask(f), (int __user *)argp);
1770                 break;
1771
1772         case ODP_SET_LISTEN_MASK:
1773                 err = get_user(listeners, (int __user *)argp);
1774                 if (err)
1775                         break;
1776                 err = -EINVAL;
1777                 if (listeners & ~ODPL_ALL)
1778                         break;
1779                 err = 0;
1780                 set_listen_mask(f, listeners);
1781                 break;
1782
1783         case ODP_GET_SFLOW_PROBABILITY:
1784                 err = put_user(dp->sflow_probability, (unsigned int __user *)argp);
1785                 break;
1786
1787         case ODP_SET_SFLOW_PROBABILITY:
1788                 err = get_user(sflow_probability, (unsigned int __user *)argp);
1789                 if (!err)
1790                         dp->sflow_probability = sflow_probability;
1791                 break;
1792
1793         default:
1794                 err = -ENOIOCTLCMD;
1795                 break;
1796         }
1797         mutex_unlock(&dp->mutex);
1798 exit:
1799         return err;
1800 }
1801
1802 static int dp_has_packet_of_interest(struct datapath *dp, int listeners)
1803 {
1804         int i;
1805         for (i = 0; i < DP_N_QUEUES; i++) {
1806                 if (listeners & (1 << i) && !skb_queue_empty(&dp->queues[i]))
1807                         return 1;
1808         }
1809         return 0;
1810 }
1811
1812 #ifdef CONFIG_COMPAT
1813 static int compat_get_flow(struct odp_flow *flow, const struct compat_odp_flow __user *compat)
1814 {
1815         compat_uptr_t key, actions;
1816
1817         if (!access_ok(VERIFY_READ, compat, sizeof(struct compat_odp_flow)) ||
1818             __copy_from_user(&flow->stats, &compat->stats, sizeof(struct odp_flow_stats)) ||
1819             __get_user(key, &compat->key) ||
1820             __get_user(flow->key_len, &compat->key_len) ||
1821             __get_user(actions, &compat->actions) ||
1822             __get_user(flow->actions_len, &compat->actions_len))
1823                 return -EFAULT;
1824
1825         flow->key = (struct nlattr __force *)compat_ptr(key);
1826         flow->actions = (struct nlattr __force *)compat_ptr(actions);
1827         return 0;
1828 }
1829
1830 static int compat_put_flow(struct compat_odp_flow_put __user *ufp)
1831 {
1832         struct odp_flow_stats stats;
1833         struct odp_flow_put uf;
1834         struct datapath *dp;
1835         int error;
1836
1837         if (compat_get_flow(&uf.flow, &ufp->flow) ||
1838             get_user(uf.flags, &ufp->flags))
1839                 return -EFAULT;
1840
1841         dp = get_dp_locked(uf.flow.dp_idx);
1842         if (!dp)
1843                 return -ENODEV;
1844
1845         error = do_put_flow(dp, &uf, &stats);
1846         if (!error) {
1847                 if (copy_to_user(&ufp->flow.stats, &stats,
1848                                  sizeof(struct odp_flow_stats)))
1849                         error = -EFAULT;
1850         }
1851         mutex_unlock(&dp->mutex);
1852
1853         return error;
1854 }
1855
1856
1857 static int compat_answer_query(struct datapath *dp, struct sw_flow *flow,
1858                                struct compat_odp_flow __user *ufp)
1859 {
1860         compat_uptr_t actions;
1861
1862         if (get_user(actions, &ufp->actions))
1863                 return -EFAULT;
1864
1865         return do_answer_query(dp, flow, &ufp->stats,
1866                                compat_ptr(actions), &ufp->actions_len);
1867 }
1868
1869 static int compat_del_flow(struct compat_odp_flow __user *ufp)
1870 {
1871         struct sw_flow *flow;
1872         struct datapath *dp;
1873         struct odp_flow uf;
1874         int error;
1875
1876         if (compat_get_flow(&uf, ufp))
1877                 return -EFAULT;
1878
1879         dp = get_dp_locked(uf.dp_idx);
1880         if (!dp)
1881                 return -ENODEV;
1882
1883         flow = do_del_flow(dp, (const struct nlattr __force __user *)uf.key, uf.key_len);
1884         error = PTR_ERR(flow);
1885         if (!IS_ERR(flow)) {
1886                 error = compat_answer_query(dp, flow, ufp);
1887                 flow_deferred_free(flow);
1888         }
1889         mutex_unlock(&dp->mutex);
1890
1891         return error;
1892 }
1893
1894 static int compat_query_flow(struct compat_odp_flow __user *uflow)
1895 {
1896         struct tbl_node *flow_node;
1897         struct sw_flow_key key;
1898         struct odp_flow flow;
1899         struct datapath *dp;
1900         int error;
1901
1902         if (compat_get_flow(&flow, uflow))
1903                 return -EFAULT;
1904
1905         dp = get_dp_locked(flow.dp_idx);
1906         if (!dp)
1907                 return -ENODEV;
1908
1909         error = flow_copy_from_user(&key, (const struct nlattr __force __user *)flow.key, flow.key_len);
1910         if (!error) {
1911                 struct tbl *table = get_table_protected(dp);
1912                 flow_node = tbl_lookup(table, &flow.key, flow_hash(&key), flow_cmp);
1913                 if (flow_node)
1914                         error = compat_answer_query(dp, flow_cast(flow_node), uflow);
1915                 else
1916                         error = -ENOENT;
1917         }
1918         mutex_unlock(&dp->mutex);
1919
1920         return error;
1921 }
1922
1923 static int compat_dump_flow(struct compat_odp_flow_dump __user *udump)
1924 {
1925         struct compat_odp_flow __user *uflow;
1926         struct nlattr __user *ukey;
1927         struct tbl_node *tbl_node;
1928         struct compat_odp_flow_dump dump;
1929         struct sw_flow *flow;
1930         compat_uptr_t ukey32;
1931         struct datapath *dp;
1932         struct tbl *table;
1933         u32 key_len;
1934         int err;
1935
1936         err = -EFAULT;
1937         if (copy_from_user(&dump, udump, sizeof(struct compat_odp_flow_dump)))
1938                 goto exit;
1939         uflow =compat_ptr(dump.flow);
1940
1941         dp = get_dp_locked(dump.dp_idx);
1942         err = -ENODEV;
1943         if (!dp)
1944                 goto exit;
1945
1946         table = get_table_protected(dp);
1947         tbl_node = tbl_next(table, &dump.state[0], &dump.state[1]);
1948         if (!tbl_node) {
1949                 err = put_user(0, &uflow->key_len);
1950                 goto exit_unlock;
1951         }
1952         flow = flow_cast(tbl_node);
1953
1954         err = -EFAULT;
1955         if (copy_to_user(udump->state, dump.state, 2 * sizeof(uint32_t)) ||
1956             get_user(ukey32, &uflow->key) ||
1957             get_user(key_len, &uflow->key_len))
1958                 goto exit_unlock;
1959         ukey = compat_ptr(ukey32);
1960
1961         key_len = flow_copy_to_user(ukey, &flow->key, key_len);
1962         err = key_len;
1963         if (key_len < 0)
1964                 goto exit_unlock;
1965         err = -EFAULT;
1966         if (put_user(key_len, &uflow->key_len))
1967                 goto exit_unlock;
1968
1969         err = compat_answer_query(dp, flow, uflow);
1970
1971 exit_unlock:
1972         mutex_unlock(&dp->mutex);
1973 exit:
1974         return err;
1975 }
1976
1977 static int compat_execute(const struct compat_odp_execute __user *uexecute)
1978 {
1979         struct odp_execute execute;
1980         compat_uptr_t actions;
1981         compat_uptr_t data;
1982         struct datapath *dp;
1983         int error;
1984
1985         if (!access_ok(VERIFY_READ, uexecute, sizeof(struct compat_odp_execute)) ||
1986             __get_user(execute.dp_idx, &uexecute->dp_idx) ||
1987             __get_user(actions, &uexecute->actions) ||
1988             __get_user(execute.actions_len, &uexecute->actions_len) ||
1989             __get_user(data, &uexecute->data) ||
1990             __get_user(execute.length, &uexecute->length))
1991                 return -EFAULT;
1992
1993         execute.actions = (struct nlattr __force *)compat_ptr(actions);
1994         execute.data = (const void __force *)compat_ptr(data);
1995
1996         dp = get_dp_locked(execute.dp_idx);
1997         if (!dp)
1998                 return -ENODEV;
1999         error = do_execute(dp, &execute);
2000         mutex_unlock(&dp->mutex);
2001
2002         return error;
2003 }
2004
2005 static long openvswitch_compat_ioctl(struct file *f, unsigned int cmd, unsigned long argp)
2006 {
2007         switch (cmd) {
2008         case ODP_DP_DESTROY:
2009         case ODP_FLOW_FLUSH:
2010                 /* Ioctls that don't need any translation at all. */
2011                 return openvswitch_ioctl(f, cmd, argp);
2012
2013         case ODP_DP_CREATE:
2014         case ODP_VPORT_NEW:
2015         case ODP_VPORT_DEL:
2016         case ODP_VPORT_GET:
2017         case ODP_VPORT_SET:
2018         case ODP_VPORT_DUMP:
2019         case ODP_DP_STATS:
2020         case ODP_GET_DROP_FRAGS:
2021         case ODP_SET_DROP_FRAGS:
2022         case ODP_SET_LISTEN_MASK:
2023         case ODP_GET_LISTEN_MASK:
2024         case ODP_SET_SFLOW_PROBABILITY:
2025         case ODP_GET_SFLOW_PROBABILITY:
2026                 /* Ioctls that just need their pointer argument extended. */
2027                 return openvswitch_ioctl(f, cmd, (unsigned long)compat_ptr(argp));
2028
2029         case ODP_FLOW_PUT32:
2030                 return compat_put_flow(compat_ptr(argp));
2031
2032         case ODP_FLOW_DEL32:
2033                 return compat_del_flow(compat_ptr(argp));
2034
2035         case ODP_FLOW_GET32:
2036                 return compat_query_flow(compat_ptr(argp));
2037
2038         case ODP_FLOW_DUMP32:
2039                 return compat_dump_flow(compat_ptr(argp));
2040
2041         case ODP_EXECUTE32:
2042                 return compat_execute(compat_ptr(argp));
2043
2044         default:
2045                 return -ENOIOCTLCMD;
2046         }
2047 }
2048 #endif
2049
2050 static ssize_t openvswitch_read(struct file *f, char __user *buf,
2051                                 size_t nbytes, loff_t *ppos)
2052 {
2053         int listeners = get_listen_mask(f);
2054         int dp_idx = iminor(f->f_dentry->d_inode);
2055         struct datapath *dp = get_dp_locked(dp_idx);
2056         struct sk_buff *skb;
2057         struct iovec iov;
2058         int retval;
2059
2060         if (!dp)
2061                 return -ENODEV;
2062
2063         if (nbytes == 0 || !listeners)
2064                 return 0;
2065
2066         for (;;) {
2067                 int i;
2068
2069                 for (i = 0; i < DP_N_QUEUES; i++) {
2070                         if (listeners & (1 << i)) {
2071                                 skb = skb_dequeue(&dp->queues[i]);
2072                                 if (skb)
2073                                         goto success;
2074                         }
2075                 }
2076
2077                 if (f->f_flags & O_NONBLOCK) {
2078                         retval = -EAGAIN;
2079                         goto error;
2080                 }
2081
2082                 wait_event_interruptible(dp->waitqueue,
2083                                          dp_has_packet_of_interest(dp,
2084                                                                    listeners));
2085
2086                 if (signal_pending(current)) {
2087                         retval = -ERESTARTSYS;
2088                         goto error;
2089                 }
2090         }
2091 success:
2092         mutex_unlock(&dp->mutex);
2093
2094         iov.iov_base = buf;
2095         iov.iov_len = min_t(size_t, skb->len, nbytes);
2096         retval = skb_copy_datagram_iovec(skb, 0, &iov, iov.iov_len);
2097         if (!retval)
2098                 retval = skb->len;
2099
2100         kfree_skb(skb);
2101         return retval;
2102
2103 error:
2104         mutex_unlock(&dp->mutex);
2105         return retval;
2106 }
2107
2108 static unsigned int openvswitch_poll(struct file *file, poll_table *wait)
2109 {
2110         int dp_idx = iminor(file->f_dentry->d_inode);
2111         struct datapath *dp = get_dp_locked(dp_idx);
2112         unsigned int mask;
2113
2114         if (dp) {
2115                 mask = 0;
2116                 poll_wait(file, &dp->waitqueue, wait);
2117                 if (dp_has_packet_of_interest(dp, get_listen_mask(file)))
2118                         mask |= POLLIN | POLLRDNORM;
2119                 mutex_unlock(&dp->mutex);
2120         } else {
2121                 mask = POLLIN | POLLRDNORM | POLLHUP;
2122         }
2123         return mask;
2124 }
2125
2126 static struct file_operations openvswitch_fops = {
2127         .owner = THIS_MODULE,
2128         .read  = openvswitch_read,
2129         .poll  = openvswitch_poll,
2130         .unlocked_ioctl = openvswitch_ioctl,
2131 #ifdef CONFIG_COMPAT
2132         .compat_ioctl = openvswitch_compat_ioctl,
2133 #endif
2134 };
2135
2136 static int major;
2137
2138 static int __init dp_init(void)
2139 {
2140         struct sk_buff *dummy_skb;
2141         int err;
2142
2143         BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > sizeof(dummy_skb->cb));
2144
2145         printk("Open vSwitch %s, built "__DATE__" "__TIME__"\n", VERSION BUILDNR);
2146
2147         err = flow_init();
2148         if (err)
2149                 goto error;
2150
2151         err = vport_init();
2152         if (err)
2153                 goto error_flow_exit;
2154
2155         err = register_netdevice_notifier(&dp_device_notifier);
2156         if (err)
2157                 goto error_vport_exit;
2158
2159         major = register_chrdev(0, "openvswitch", &openvswitch_fops);
2160         if (err < 0)
2161                 goto error_unreg_notifier;
2162
2163         return 0;
2164
2165 error_unreg_notifier:
2166         unregister_netdevice_notifier(&dp_device_notifier);
2167 error_vport_exit:
2168         vport_exit();
2169 error_flow_exit:
2170         flow_exit();
2171 error:
2172         return err;
2173 }
2174
2175 static void dp_cleanup(void)
2176 {
2177         rcu_barrier();
2178         unregister_chrdev(major, "openvswitch");
2179         unregister_netdevice_notifier(&dp_device_notifier);
2180         vport_exit();
2181         flow_exit();
2182 }
2183
2184 module_init(dp_init);
2185 module_exit(dp_cleanup);
2186
2187 MODULE_DESCRIPTION("Open vSwitch switching datapath");
2188 MODULE_LICENSE("GPL");