dpif-netdev: Reintroduce ref_cnt for dp_netdev_flow
[cascardo/ovs.git] / lib / dpif-netdev.c
1 /*
2  * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <config.h>
18 #include "dpif-netdev.h"
19
20 #include <ctype.h>
21 #include <errno.h>
22 #include <fcntl.h>
23 #include <inttypes.h>
24 #include <netinet/in.h>
25 #include <sys/socket.h>
26 #include <net/if.h>
27 #include <stdint.h>
28 #include <stdlib.h>
29 #include <string.h>
30 #include <sys/ioctl.h>
31 #include <sys/stat.h>
32 #include <unistd.h>
33
34 #include "classifier.h"
35 #include "cmap.h"
36 #include "csum.h"
37 #include "dpif.h"
38 #include "dpif-provider.h"
39 #include "dummy.h"
40 #include "dynamic-string.h"
41 #include "fat-rwlock.h"
42 #include "flow.h"
43 #include "cmap.h"
44 #include "latch.h"
45 #include "list.h"
46 #include "meta-flow.h"
47 #include "netdev.h"
48 #include "netdev-dpdk.h"
49 #include "netdev-vport.h"
50 #include "netlink.h"
51 #include "odp-execute.h"
52 #include "odp-util.h"
53 #include "ofp-print.h"
54 #include "ofpbuf.h"
55 #include "ovs-rcu.h"
56 #include "packet-dpif.h"
57 #include "packets.h"
58 #include "poll-loop.h"
59 #include "random.h"
60 #include "seq.h"
61 #include "shash.h"
62 #include "sset.h"
63 #include "timeval.h"
64 #include "unixctl.h"
65 #include "util.h"
66 #include "vlog.h"
67
68 VLOG_DEFINE_THIS_MODULE(dpif_netdev);
69
70 /* By default, choose a priority in the middle. */
71 #define NETDEV_RULE_PRIORITY 0x8000
72
73 #define FLOW_DUMP_MAX_BATCH 50
74 /* Use per thread recirc_depth to prevent recirculation loop. */
75 #define MAX_RECIRC_DEPTH 5
76 DEFINE_STATIC_PER_THREAD_DATA(uint32_t, recirc_depth, 0)
77
78 /* Configuration parameters. */
79 enum { MAX_FLOWS = 65536 };     /* Maximum number of flows in flow table. */
80
81 /* Protects against changes to 'dp_netdevs'. */
82 static struct ovs_mutex dp_netdev_mutex = OVS_MUTEX_INITIALIZER;
83
84 /* Contains all 'struct dp_netdev's. */
85 static struct shash dp_netdevs OVS_GUARDED_BY(dp_netdev_mutex)
86     = SHASH_INITIALIZER(&dp_netdevs);
87
88 struct dp_netdev_queue {
89     unsigned int packet_count;
90
91     struct dpif_upcall upcalls[NETDEV_MAX_RX_BATCH];
92     struct ofpbuf bufs[NETDEV_MAX_RX_BATCH];
93 };
94
95 #define DP_NETDEV_QUEUE_INITIALIZER { .packet_count = 0 }
96
97 /* Datapath based on the network device interface from netdev.h.
98  *
99  *
100  * Thread-safety
101  * =============
102  *
103  * Some members, marked 'const', are immutable.  Accessing other members
104  * requires synchronization, as noted in more detail below.
105  *
106  * Acquisition order is, from outermost to innermost:
107  *
108  *    dp_netdev_mutex (global)
109  *    port_mutex
110  *    flow_mutex
111  */
112 struct dp_netdev {
113     const struct dpif_class *const class;
114     const char *const name;
115     struct dpif *dpif;
116     struct ovs_refcount ref_cnt;
117     atomic_flag destroyed;
118
119     /* Flows.
120      *
121      * Writers of 'flow_table' must take the 'flow_mutex'.  Corresponding
122      * changes to 'cls' must be made while still holding the 'flow_mutex'.
123      */
124     struct ovs_mutex flow_mutex;
125     struct classifier cls;
126     struct cmap flow_table OVS_GUARDED; /* Flow table. */
127
128     /* Statistics.
129      *
130      * ovsthread_stats is internally synchronized. */
131     struct ovsthread_stats stats; /* Contains 'struct dp_netdev_stats *'. */
132
133     /* Ports.
134      *
135      * Protected by RCU.  Take the mutex to add or remove ports. */
136     struct ovs_mutex port_mutex;
137     struct cmap ports;
138     struct seq *port_seq;       /* Incremented whenever a port changes. */
139
140     /* Protects access to ofproto-dpif-upcall interface during revalidator
141      * thread synchronization. */
142     struct fat_rwlock upcall_rwlock;
143     exec_upcall_cb *upcall_cb;  /* Callback function for executing upcalls. */
144
145     /* Forwarding threads. */
146     struct latch exit_latch;
147     struct pmd_thread *pmd_threads;
148     size_t n_pmd_threads;
149     int pmd_count;
150 };
151
152 static struct dp_netdev_port *dp_netdev_lookup_port(const struct dp_netdev *dp,
153                                                     odp_port_t);
154
155 enum dp_stat_type {
156     DP_STAT_HIT,                /* Packets that matched in the flow table. */
157     DP_STAT_MISS,               /* Packets that did not match. */
158     DP_STAT_LOST,               /* Packets not passed up to the client. */
159     DP_N_STATS
160 };
161
162 /* Contained by struct dp_netdev's 'stats' member.  */
163 struct dp_netdev_stats {
164     struct ovs_mutex mutex;          /* Protects 'n'. */
165
166     /* Indexed by DP_STAT_*, protected by 'mutex'. */
167     unsigned long long int n[DP_N_STATS] OVS_GUARDED;
168 };
169
170
171 /* A port in a netdev-based datapath. */
172 struct dp_netdev_port {
173     struct cmap_node node;      /* Node in dp_netdev's 'ports'. */
174     odp_port_t port_no;
175     struct netdev *netdev;
176     struct netdev_saved_flags *sf;
177     struct netdev_rxq **rxq;
178     struct ovs_refcount ref_cnt;
179     char *type;                 /* Port type as requested by user. */
180 };
181
182
183 /* Stores a miniflow */
184
185 /* There are fields in the flow structure that we never use. Therefore we can
186  * save a few words of memory */
187 #define NETDEV_KEY_BUF_SIZE_U32 (FLOW_U32S - MINI_N_INLINE \
188                                  - FLOW_U32_SIZE(regs) \
189                                  - FLOW_U32_SIZE(metadata) \
190                                 )
191 struct netdev_flow_key {
192     struct miniflow flow;
193     uint32_t buf[NETDEV_KEY_BUF_SIZE_U32];
194 };
195
196 /* A flow in dp_netdev's 'flow_table'.
197  *
198  *
199  * Thread-safety
200  * =============
201  *
202  * Except near the beginning or ending of its lifespan, rule 'rule' belongs to
203  * its dp_netdev's classifier.  The text below calls this classifier 'cls'.
204  *
205  * Motivation
206  * ----------
207  *
208  * The thread safety rules described here for "struct dp_netdev_flow" are
209  * motivated by two goals:
210  *
211  *    - Prevent threads that read members of "struct dp_netdev_flow" from
212  *      reading bad data due to changes by some thread concurrently modifying
213  *      those members.
214  *
215  *    - Prevent two threads making changes to members of a given "struct
216  *      dp_netdev_flow" from interfering with each other.
217  *
218  *
219  * Rules
220  * -----
221  *
222  * A flow 'flow' may be accessed without a risk of being freed during an RCU
223  * grace period.  Code that needs to hold onto a flow for a while
224  * should try incrementing 'flow->ref_cnt' with dp_netdev_flow_ref().
225  *
226  * 'flow->ref_cnt' protects 'flow' from being freed.  It doesn't protect the
227  * flow from being deleted from 'cls' and it doesn't protect members of 'flow'
228  * from modification.
229  *
230  * Some members, marked 'const', are immutable.  Accessing other members
231  * requires synchronization, as noted in more detail below.
232  */
233 struct dp_netdev_flow {
234     /* Packet classification. */
235     const struct cls_rule cr;   /* In owning dp_netdev's 'cls'. */
236
237     /* Hash table index by unmasked flow. */
238     const struct cmap_node node; /* In owning dp_netdev's 'flow_table'. */
239     const struct flow flow;      /* The flow that created this entry. */
240
241     /* Number of references.
242      * The classifier owns one reference.
243      * Any thread trying to keep a rule from being freed should hold its own
244      * reference. */
245     struct ovs_refcount ref_cnt;
246
247     /* Statistics.
248      *
249      * Reading or writing these members requires 'mutex'. */
250     struct ovsthread_stats stats; /* Contains "struct dp_netdev_flow_stats". */
251
252     /* Actions. */
253     OVSRCU_TYPE(struct dp_netdev_actions *) actions;
254 };
255
256 static void dp_netdev_flow_unref(struct dp_netdev_flow *);
257
258 /* Contained by struct dp_netdev_flow's 'stats' member.  */
259 struct dp_netdev_flow_stats {
260     struct ovs_mutex mutex;         /* Guards all the other members. */
261
262     long long int used OVS_GUARDED; /* Last used time, in monotonic msecs. */
263     long long int packet_count OVS_GUARDED; /* Number of packets matched. */
264     long long int byte_count OVS_GUARDED;   /* Number of bytes matched. */
265     uint16_t tcp_flags OVS_GUARDED; /* Bitwise-OR of seen tcp_flags values. */
266 };
267
268 /* A set of datapath actions within a "struct dp_netdev_flow".
269  *
270  *
271  * Thread-safety
272  * =============
273  *
274  * A struct dp_netdev_actions 'actions' is protected with RCU. */
275 struct dp_netdev_actions {
276     /* These members are immutable: they do not change during the struct's
277      * lifetime.  */
278     struct nlattr *actions;     /* Sequence of OVS_ACTION_ATTR_* attributes. */
279     unsigned int size;          /* Size of 'actions', in bytes. */
280 };
281
282 struct dp_netdev_actions *dp_netdev_actions_create(const struct nlattr *,
283                                                    size_t);
284 struct dp_netdev_actions *dp_netdev_flow_get_actions(
285     const struct dp_netdev_flow *);
286 static void dp_netdev_actions_free(struct dp_netdev_actions *);
287
288 /* PMD: Poll modes drivers.  PMD accesses devices via polling to eliminate
289  * the performance overhead of interrupt processing.  Therefore netdev can
290  * not implement rx-wait for these devices.  dpif-netdev needs to poll
291  * these device to check for recv buffer.  pmd-thread does polling for
292  * devices assigned to itself thread.
293  *
294  * DPDK used PMD for accessing NIC.
295  *
296  * A thread that receives packets from PMD ports, looks them up in the flow
297  * table, and executes the actions it finds.
298  **/
299 struct pmd_thread {
300     struct dp_netdev *dp;
301     pthread_t thread;
302     int id;
303     atomic_uint change_seq;
304 };
305
306 /* Interface to netdev-based datapath. */
307 struct dpif_netdev {
308     struct dpif dpif;
309     struct dp_netdev *dp;
310     uint64_t last_port_seq;
311 };
312
313 static int get_port_by_number(struct dp_netdev *dp, odp_port_t port_no,
314                               struct dp_netdev_port **portp);
315 static int get_port_by_name(struct dp_netdev *dp, const char *devname,
316                             struct dp_netdev_port **portp);
317 static void dp_netdev_free(struct dp_netdev *)
318     OVS_REQUIRES(dp_netdev_mutex);
319 static void dp_netdev_flow_flush(struct dp_netdev *);
320 static int do_add_port(struct dp_netdev *dp, const char *devname,
321                        const char *type, odp_port_t port_no)
322     OVS_REQUIRES(dp->port_mutex);
323 static void do_del_port(struct dp_netdev *dp, struct dp_netdev_port *)
324     OVS_REQUIRES(dp->port_mutex);
325 static int dpif_netdev_open(const struct dpif_class *, const char *name,
326                             bool create, struct dpif **);
327 static int dp_netdev_queue_userspace_packet(struct dp_netdev_queue *,
328                                             struct ofpbuf *, int type,
329                                             const struct miniflow *,
330                                             const struct nlattr *);
331 static void dp_netdev_execute_userspace_queue(struct dp_netdev_queue *,
332                                               struct dp_netdev *);
333 static void dp_netdev_execute_actions(struct dp_netdev *dp,
334                                       struct dpif_packet **, int c,
335                                       bool may_steal, struct pkt_metadata *,
336                                       const struct nlattr *actions,
337                                       size_t actions_len);
338 static void dp_netdev_port_input(struct dp_netdev *dp,
339                                  struct dpif_packet **packets, int cnt,
340                                  odp_port_t port_no);
341
342 static void dp_netdev_set_pmd_threads(struct dp_netdev *, int n);
343 static void dp_netdev_disable_upcall(struct dp_netdev *);
344
345 static struct dpif_netdev *
346 dpif_netdev_cast(const struct dpif *dpif)
347 {
348     ovs_assert(dpif->dpif_class->open == dpif_netdev_open);
349     return CONTAINER_OF(dpif, struct dpif_netdev, dpif);
350 }
351
352 static struct dp_netdev *
353 get_dp_netdev(const struct dpif *dpif)
354 {
355     return dpif_netdev_cast(dpif)->dp;
356 }
357
358 static int
359 dpif_netdev_enumerate(struct sset *all_dps,
360                       const struct dpif_class *dpif_class)
361 {
362     struct shash_node *node;
363
364     ovs_mutex_lock(&dp_netdev_mutex);
365     SHASH_FOR_EACH(node, &dp_netdevs) {
366         struct dp_netdev *dp = node->data;
367         if (dpif_class != dp->class) {
368             /* 'dp_netdevs' contains both "netdev" and "dummy" dpifs.
369              * If the class doesn't match, skip this dpif. */
370              continue;
371         }
372         sset_add(all_dps, node->name);
373     }
374     ovs_mutex_unlock(&dp_netdev_mutex);
375
376     return 0;
377 }
378
379 static bool
380 dpif_netdev_class_is_dummy(const struct dpif_class *class)
381 {
382     return class != &dpif_netdev_class;
383 }
384
385 static const char *
386 dpif_netdev_port_open_type(const struct dpif_class *class, const char *type)
387 {
388     return strcmp(type, "internal") ? type
389                   : dpif_netdev_class_is_dummy(class) ? "dummy"
390                   : "tap";
391 }
392
393 static struct dpif *
394 create_dpif_netdev(struct dp_netdev *dp)
395 {
396     uint16_t netflow_id = hash_string(dp->name, 0);
397     struct dpif_netdev *dpif;
398
399     ovs_refcount_ref(&dp->ref_cnt);
400
401     dpif = xmalloc(sizeof *dpif);
402     dpif_init(&dpif->dpif, dp->class, dp->name, netflow_id >> 8, netflow_id);
403     dpif->dp = dp;
404     dpif->last_port_seq = seq_read(dp->port_seq);
405
406     return &dpif->dpif;
407 }
408
409 /* Choose an unused, non-zero port number and return it on success.
410  * Return ODPP_NONE on failure. */
411 static odp_port_t
412 choose_port(struct dp_netdev *dp, const char *name)
413     OVS_REQUIRES(dp->port_mutex)
414 {
415     uint32_t port_no;
416
417     if (dp->class != &dpif_netdev_class) {
418         const char *p;
419         int start_no = 0;
420
421         /* If the port name begins with "br", start the number search at
422          * 100 to make writing tests easier. */
423         if (!strncmp(name, "br", 2)) {
424             start_no = 100;
425         }
426
427         /* If the port name contains a number, try to assign that port number.
428          * This can make writing unit tests easier because port numbers are
429          * predictable. */
430         for (p = name; *p != '\0'; p++) {
431             if (isdigit((unsigned char) *p)) {
432                 port_no = start_no + strtol(p, NULL, 10);
433                 if (port_no > 0 && port_no != odp_to_u32(ODPP_NONE)
434                     && !dp_netdev_lookup_port(dp, u32_to_odp(port_no))) {
435                     return u32_to_odp(port_no);
436                 }
437                 break;
438             }
439         }
440     }
441
442     for (port_no = 1; port_no <= UINT16_MAX; port_no++) {
443         if (!dp_netdev_lookup_port(dp, u32_to_odp(port_no))) {
444             return u32_to_odp(port_no);
445         }
446     }
447
448     return ODPP_NONE;
449 }
450
451 static int
452 create_dp_netdev(const char *name, const struct dpif_class *class,
453                  struct dp_netdev **dpp)
454     OVS_REQUIRES(dp_netdev_mutex)
455 {
456     struct dp_netdev *dp;
457     int error;
458
459     dp = xzalloc(sizeof *dp);
460     shash_add(&dp_netdevs, name, dp);
461
462     *CONST_CAST(const struct dpif_class **, &dp->class) = class;
463     *CONST_CAST(const char **, &dp->name) = xstrdup(name);
464     ovs_refcount_init(&dp->ref_cnt);
465     atomic_flag_clear(&dp->destroyed);
466
467     ovs_mutex_init(&dp->flow_mutex);
468     classifier_init(&dp->cls, NULL);
469     cmap_init(&dp->flow_table);
470
471     ovsthread_stats_init(&dp->stats);
472
473     ovs_mutex_init(&dp->port_mutex);
474     cmap_init(&dp->ports);
475     dp->port_seq = seq_create();
476     latch_init(&dp->exit_latch);
477     fat_rwlock_init(&dp->upcall_rwlock);
478
479     /* Disable upcalls by default. */
480     dp_netdev_disable_upcall(dp);
481     dp->upcall_cb = NULL;
482
483     ovs_mutex_lock(&dp->port_mutex);
484     error = do_add_port(dp, name, "internal", ODPP_LOCAL);
485     ovs_mutex_unlock(&dp->port_mutex);
486     if (error) {
487         dp_netdev_free(dp);
488         return error;
489     }
490
491     *dpp = dp;
492     return 0;
493 }
494
495 static int
496 dpif_netdev_open(const struct dpif_class *class, const char *name,
497                  bool create, struct dpif **dpifp)
498 {
499     struct dp_netdev *dp;
500     int error;
501
502     ovs_mutex_lock(&dp_netdev_mutex);
503     dp = shash_find_data(&dp_netdevs, name);
504     if (!dp) {
505         error = create ? create_dp_netdev(name, class, &dp) : ENODEV;
506     } else {
507         error = (dp->class != class ? EINVAL
508                  : create ? EEXIST
509                  : 0);
510     }
511     if (!error) {
512         *dpifp = create_dpif_netdev(dp);
513         dp->dpif = *dpifp;
514     }
515     ovs_mutex_unlock(&dp_netdev_mutex);
516
517     return error;
518 }
519
520 /* Requires dp_netdev_mutex so that we can't get a new reference to 'dp'
521  * through the 'dp_netdevs' shash while freeing 'dp'. */
522 static void
523 dp_netdev_free(struct dp_netdev *dp)
524     OVS_REQUIRES(dp_netdev_mutex)
525 {
526     struct dp_netdev_port *port;
527     struct dp_netdev_stats *bucket;
528     int i;
529
530     shash_find_and_delete(&dp_netdevs, dp->name);
531
532     dp_netdev_set_pmd_threads(dp, 0);
533     free(dp->pmd_threads);
534
535     dp_netdev_flow_flush(dp);
536     ovs_mutex_lock(&dp->port_mutex);
537     CMAP_FOR_EACH (port, node, &dp->ports) {
538         do_del_port(dp, port);
539     }
540     ovs_mutex_unlock(&dp->port_mutex);
541
542     OVSTHREAD_STATS_FOR_EACH_BUCKET (bucket, i, &dp->stats) {
543         ovs_mutex_destroy(&bucket->mutex);
544         free_cacheline(bucket);
545     }
546     ovsthread_stats_destroy(&dp->stats);
547
548     classifier_destroy(&dp->cls);
549     cmap_destroy(&dp->flow_table);
550     ovs_mutex_destroy(&dp->flow_mutex);
551     seq_destroy(dp->port_seq);
552     cmap_destroy(&dp->ports);
553     fat_rwlock_destroy(&dp->upcall_rwlock);
554     latch_destroy(&dp->exit_latch);
555     free(CONST_CAST(char *, dp->name));
556     free(dp);
557 }
558
559 static void
560 dp_netdev_unref(struct dp_netdev *dp)
561 {
562     if (dp) {
563         /* Take dp_netdev_mutex so that, if dp->ref_cnt falls to zero, we can't
564          * get a new reference to 'dp' through the 'dp_netdevs' shash. */
565         ovs_mutex_lock(&dp_netdev_mutex);
566         if (ovs_refcount_unref_relaxed(&dp->ref_cnt) == 1) {
567             dp_netdev_free(dp);
568         }
569         ovs_mutex_unlock(&dp_netdev_mutex);
570     }
571 }
572
573 static void
574 dpif_netdev_close(struct dpif *dpif)
575 {
576     struct dp_netdev *dp = get_dp_netdev(dpif);
577
578     dp_netdev_unref(dp);
579     free(dpif);
580 }
581
582 static int
583 dpif_netdev_destroy(struct dpif *dpif)
584 {
585     struct dp_netdev *dp = get_dp_netdev(dpif);
586
587     if (!atomic_flag_test_and_set(&dp->destroyed)) {
588         if (ovs_refcount_unref_relaxed(&dp->ref_cnt) == 1) {
589             /* Can't happen: 'dpif' still owns a reference to 'dp'. */
590             OVS_NOT_REACHED();
591         }
592     }
593
594     return 0;
595 }
596
597 static int
598 dpif_netdev_get_stats(const struct dpif *dpif, struct dpif_dp_stats *stats)
599 {
600     struct dp_netdev *dp = get_dp_netdev(dpif);
601     struct dp_netdev_stats *bucket;
602     size_t i;
603
604     stats->n_flows = cmap_count(&dp->flow_table);
605
606     stats->n_hit = stats->n_missed = stats->n_lost = 0;
607     OVSTHREAD_STATS_FOR_EACH_BUCKET (bucket, i, &dp->stats) {
608         ovs_mutex_lock(&bucket->mutex);
609         stats->n_hit += bucket->n[DP_STAT_HIT];
610         stats->n_missed += bucket->n[DP_STAT_MISS];
611         stats->n_lost += bucket->n[DP_STAT_LOST];
612         ovs_mutex_unlock(&bucket->mutex);
613     }
614     stats->n_masks = UINT32_MAX;
615     stats->n_mask_hit = UINT64_MAX;
616
617     return 0;
618 }
619
620 static void
621 dp_netdev_reload_pmd_threads(struct dp_netdev *dp)
622 {
623     int i;
624
625     for (i = 0; i < dp->n_pmd_threads; i++) {
626         struct pmd_thread *f = &dp->pmd_threads[i];
627         int id;
628
629         atomic_add(&f->change_seq, 1, &id);
630    }
631 }
632
633 static uint32_t
634 hash_port_no(odp_port_t port_no)
635 {
636     return hash_int(odp_to_u32(port_no), 0);
637 }
638
639 static int
640 do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
641             odp_port_t port_no)
642     OVS_REQUIRES(dp->port_mutex)
643 {
644     struct netdev_saved_flags *sf;
645     struct dp_netdev_port *port;
646     struct netdev *netdev;
647     enum netdev_flags flags;
648     const char *open_type;
649     int error;
650     int i;
651
652     /* XXX reject devices already in some dp_netdev. */
653
654     /* Open and validate network device. */
655     open_type = dpif_netdev_port_open_type(dp->class, type);
656     error = netdev_open(devname, open_type, &netdev);
657     if (error) {
658         return error;
659     }
660     /* XXX reject non-Ethernet devices */
661
662     netdev_get_flags(netdev, &flags);
663     if (flags & NETDEV_LOOPBACK) {
664         VLOG_ERR("%s: cannot add a loopback device", devname);
665         netdev_close(netdev);
666         return EINVAL;
667     }
668
669     port = xzalloc(sizeof *port);
670     port->port_no = port_no;
671     port->netdev = netdev;
672     port->rxq = xmalloc(sizeof *port->rxq * netdev_n_rxq(netdev));
673     port->type = xstrdup(type);
674     for (i = 0; i < netdev_n_rxq(netdev); i++) {
675         error = netdev_rxq_open(netdev, &port->rxq[i], i);
676         if (error
677             && !(error == EOPNOTSUPP && dpif_netdev_class_is_dummy(dp->class))) {
678             VLOG_ERR("%s: cannot receive packets on this network device (%s)",
679                      devname, ovs_strerror(errno));
680             netdev_close(netdev);
681             return error;
682         }
683     }
684
685     error = netdev_turn_flags_on(netdev, NETDEV_PROMISC, &sf);
686     if (error) {
687         for (i = 0; i < netdev_n_rxq(netdev); i++) {
688             netdev_rxq_close(port->rxq[i]);
689         }
690         netdev_close(netdev);
691         free(port->rxq);
692         free(port);
693         return error;
694     }
695     port->sf = sf;
696
697     if (netdev_is_pmd(netdev)) {
698         dp->pmd_count++;
699         dp_netdev_set_pmd_threads(dp, NR_PMD_THREADS);
700         dp_netdev_reload_pmd_threads(dp);
701     }
702     ovs_refcount_init(&port->ref_cnt);
703
704     cmap_insert(&dp->ports, &port->node, hash_port_no(port_no));
705     seq_change(dp->port_seq);
706
707     return 0;
708 }
709
710 static int
711 dpif_netdev_port_add(struct dpif *dpif, struct netdev *netdev,
712                      odp_port_t *port_nop)
713 {
714     struct dp_netdev *dp = get_dp_netdev(dpif);
715     char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
716     const char *dpif_port;
717     odp_port_t port_no;
718     int error;
719
720     ovs_mutex_lock(&dp->port_mutex);
721     dpif_port = netdev_vport_get_dpif_port(netdev, namebuf, sizeof namebuf);
722     if (*port_nop != ODPP_NONE) {
723         port_no = *port_nop;
724         error = dp_netdev_lookup_port(dp, *port_nop) ? EBUSY : 0;
725     } else {
726         port_no = choose_port(dp, dpif_port);
727         error = port_no == ODPP_NONE ? EFBIG : 0;
728     }
729     if (!error) {
730         *port_nop = port_no;
731         error = do_add_port(dp, dpif_port, netdev_get_type(netdev), port_no);
732     }
733     ovs_mutex_unlock(&dp->port_mutex);
734
735     return error;
736 }
737
738 static int
739 dpif_netdev_port_del(struct dpif *dpif, odp_port_t port_no)
740 {
741     struct dp_netdev *dp = get_dp_netdev(dpif);
742     int error;
743
744     ovs_mutex_lock(&dp->port_mutex);
745     if (port_no == ODPP_LOCAL) {
746         error = EINVAL;
747     } else {
748         struct dp_netdev_port *port;
749
750         error = get_port_by_number(dp, port_no, &port);
751         if (!error) {
752             do_del_port(dp, port);
753         }
754     }
755     ovs_mutex_unlock(&dp->port_mutex);
756
757     return error;
758 }
759
760 static bool
761 is_valid_port_number(odp_port_t port_no)
762 {
763     return port_no != ODPP_NONE;
764 }
765
766 static struct dp_netdev_port *
767 dp_netdev_lookup_port(const struct dp_netdev *dp, odp_port_t port_no)
768 {
769     struct dp_netdev_port *port;
770
771     CMAP_FOR_EACH_WITH_HASH (port, node, hash_port_no(port_no), &dp->ports) {
772         if (port->port_no == port_no) {
773             return port;
774         }
775     }
776     return NULL;
777 }
778
779 static int
780 get_port_by_number(struct dp_netdev *dp,
781                    odp_port_t port_no, struct dp_netdev_port **portp)
782 {
783     if (!is_valid_port_number(port_no)) {
784         *portp = NULL;
785         return EINVAL;
786     } else {
787         *portp = dp_netdev_lookup_port(dp, port_no);
788         return *portp ? 0 : ENOENT;
789     }
790 }
791
792 static void
793 port_ref(struct dp_netdev_port *port)
794 {
795     if (port) {
796         ovs_refcount_ref(&port->ref_cnt);
797     }
798 }
799
800 static void
801 port_destroy__(struct dp_netdev_port *port)
802 {
803     int n_rxq = netdev_n_rxq(port->netdev);
804     int i;
805
806     netdev_close(port->netdev);
807     netdev_restore_flags(port->sf);
808
809     for (i = 0; i < n_rxq; i++) {
810         netdev_rxq_close(port->rxq[i]);
811     }
812     free(port->rxq);
813     free(port->type);
814     free(port);
815 }
816
817 static void
818 port_unref(struct dp_netdev_port *port)
819 {
820     if (port && ovs_refcount_unref_relaxed(&port->ref_cnt) == 1) {
821         ovsrcu_postpone(port_destroy__, port);
822     }
823 }
824
825 static int
826 get_port_by_name(struct dp_netdev *dp,
827                  const char *devname, struct dp_netdev_port **portp)
828     OVS_REQUIRES(dp->port_mutex)
829 {
830     struct dp_netdev_port *port;
831
832     CMAP_FOR_EACH (port, node, &dp->ports) {
833         if (!strcmp(netdev_get_name(port->netdev), devname)) {
834             *portp = port;
835             return 0;
836         }
837     }
838     return ENOENT;
839 }
840
841 static void
842 do_del_port(struct dp_netdev *dp, struct dp_netdev_port *port)
843     OVS_REQUIRES(dp->port_mutex)
844 {
845     cmap_remove(&dp->ports, &port->node, hash_odp_port(port->port_no));
846     seq_change(dp->port_seq);
847     if (netdev_is_pmd(port->netdev)) {
848         dp_netdev_reload_pmd_threads(dp);
849     }
850
851     port_unref(port);
852 }
853
854 static void
855 answer_port_query(const struct dp_netdev_port *port,
856                   struct dpif_port *dpif_port)
857 {
858     dpif_port->name = xstrdup(netdev_get_name(port->netdev));
859     dpif_port->type = xstrdup(port->type);
860     dpif_port->port_no = port->port_no;
861 }
862
863 static int
864 dpif_netdev_port_query_by_number(const struct dpif *dpif, odp_port_t port_no,
865                                  struct dpif_port *dpif_port)
866 {
867     struct dp_netdev *dp = get_dp_netdev(dpif);
868     struct dp_netdev_port *port;
869     int error;
870
871     error = get_port_by_number(dp, port_no, &port);
872     if (!error && dpif_port) {
873         answer_port_query(port, dpif_port);
874     }
875
876     return error;
877 }
878
879 static int
880 dpif_netdev_port_query_by_name(const struct dpif *dpif, const char *devname,
881                                struct dpif_port *dpif_port)
882 {
883     struct dp_netdev *dp = get_dp_netdev(dpif);
884     struct dp_netdev_port *port;
885     int error;
886
887     ovs_mutex_lock(&dp->port_mutex);
888     error = get_port_by_name(dp, devname, &port);
889     if (!error && dpif_port) {
890         answer_port_query(port, dpif_port);
891     }
892     ovs_mutex_unlock(&dp->port_mutex);
893
894     return error;
895 }
896
897 static void
898 dp_netdev_flow_free(struct dp_netdev_flow *flow)
899 {
900     struct dp_netdev_flow_stats *bucket;
901     size_t i;
902
903     OVSTHREAD_STATS_FOR_EACH_BUCKET (bucket, i, &flow->stats) {
904         ovs_mutex_destroy(&bucket->mutex);
905         free_cacheline(bucket);
906     }
907     ovsthread_stats_destroy(&flow->stats);
908
909     cls_rule_destroy(CONST_CAST(struct cls_rule *, &flow->cr));
910     dp_netdev_actions_free(dp_netdev_flow_get_actions(flow));
911     free(flow);
912 }
913
914 static void dp_netdev_flow_unref(struct dp_netdev_flow *flow)
915 {
916     if (ovs_refcount_unref_relaxed(&flow->ref_cnt) == 1) {
917         ovsrcu_postpone(dp_netdev_flow_free, flow);
918     }
919 }
920
921 static void
922 dp_netdev_remove_flow(struct dp_netdev *dp, struct dp_netdev_flow *flow)
923     OVS_REQUIRES(dp->flow_mutex)
924 {
925     struct cls_rule *cr = CONST_CAST(struct cls_rule *, &flow->cr);
926     struct cmap_node *node = CONST_CAST(struct cmap_node *, &flow->node);
927
928     classifier_remove(&dp->cls, cr);
929     cmap_remove(&dp->flow_table, node, flow_hash(&flow->flow, 0));
930
931     dp_netdev_flow_unref(flow);
932 }
933
934 static void
935 dp_netdev_flow_flush(struct dp_netdev *dp)
936 {
937     struct dp_netdev_flow *netdev_flow;
938
939     ovs_mutex_lock(&dp->flow_mutex);
940     CMAP_FOR_EACH (netdev_flow, node, &dp->flow_table) {
941         dp_netdev_remove_flow(dp, netdev_flow);
942     }
943     ovs_mutex_unlock(&dp->flow_mutex);
944 }
945
946 static int
947 dpif_netdev_flow_flush(struct dpif *dpif)
948 {
949     struct dp_netdev *dp = get_dp_netdev(dpif);
950
951     dp_netdev_flow_flush(dp);
952     return 0;
953 }
954
955 struct dp_netdev_port_state {
956     struct cmap_position position;
957     char *name;
958 };
959
960 static int
961 dpif_netdev_port_dump_start(const struct dpif *dpif OVS_UNUSED, void **statep)
962 {
963     *statep = xzalloc(sizeof(struct dp_netdev_port_state));
964     return 0;
965 }
966
967 static int
968 dpif_netdev_port_dump_next(const struct dpif *dpif, void *state_,
969                            struct dpif_port *dpif_port)
970 {
971     struct dp_netdev_port_state *state = state_;
972     struct dp_netdev *dp = get_dp_netdev(dpif);
973     struct cmap_node *node;
974     int retval;
975
976     node = cmap_next_position(&dp->ports, &state->position);
977     if (node) {
978         struct dp_netdev_port *port;
979
980         port = CONTAINER_OF(node, struct dp_netdev_port, node);
981
982         free(state->name);
983         state->name = xstrdup(netdev_get_name(port->netdev));
984         dpif_port->name = state->name;
985         dpif_port->type = port->type;
986         dpif_port->port_no = port->port_no;
987
988         retval = 0;
989     } else {
990         retval = EOF;
991     }
992
993     return retval;
994 }
995
996 static int
997 dpif_netdev_port_dump_done(const struct dpif *dpif OVS_UNUSED, void *state_)
998 {
999     struct dp_netdev_port_state *state = state_;
1000     free(state->name);
1001     free(state);
1002     return 0;
1003 }
1004
1005 static int
1006 dpif_netdev_port_poll(const struct dpif *dpif_, char **devnamep OVS_UNUSED)
1007 {
1008     struct dpif_netdev *dpif = dpif_netdev_cast(dpif_);
1009     uint64_t new_port_seq;
1010     int error;
1011
1012     new_port_seq = seq_read(dpif->dp->port_seq);
1013     if (dpif->last_port_seq != new_port_seq) {
1014         dpif->last_port_seq = new_port_seq;
1015         error = ENOBUFS;
1016     } else {
1017         error = EAGAIN;
1018     }
1019
1020     return error;
1021 }
1022
1023 static void
1024 dpif_netdev_port_poll_wait(const struct dpif *dpif_)
1025 {
1026     struct dpif_netdev *dpif = dpif_netdev_cast(dpif_);
1027
1028     seq_wait(dpif->dp->port_seq, dpif->last_port_seq);
1029 }
1030
1031 static struct dp_netdev_flow *
1032 dp_netdev_flow_cast(const struct cls_rule *cr)
1033 {
1034     return cr ? CONTAINER_OF(cr, struct dp_netdev_flow, cr) : NULL;
1035 }
1036
1037 static struct dp_netdev_flow *
1038 dp_netdev_lookup_flow(const struct dp_netdev *dp, const struct miniflow *key)
1039 {
1040     struct dp_netdev_flow *netdev_flow;
1041     struct cls_rule *rule;
1042
1043     classifier_lookup_miniflow_batch(&dp->cls, &key, &rule, 1);
1044     netdev_flow = dp_netdev_flow_cast(rule);
1045
1046     return netdev_flow;
1047 }
1048
1049 static struct dp_netdev_flow *
1050 dp_netdev_find_flow(const struct dp_netdev *dp, const struct flow *flow)
1051 {
1052     struct dp_netdev_flow *netdev_flow;
1053
1054     CMAP_FOR_EACH_WITH_HASH (netdev_flow, node, flow_hash(flow, 0),
1055                              &dp->flow_table) {
1056         if (flow_equal(&netdev_flow->flow, flow)) {
1057             return netdev_flow;
1058         }
1059     }
1060
1061     return NULL;
1062 }
1063
1064 static void
1065 get_dpif_flow_stats(struct dp_netdev_flow *netdev_flow,
1066                     struct dpif_flow_stats *stats)
1067 {
1068     struct dp_netdev_flow_stats *bucket;
1069     size_t i;
1070
1071     memset(stats, 0, sizeof *stats);
1072     OVSTHREAD_STATS_FOR_EACH_BUCKET (bucket, i, &netdev_flow->stats) {
1073         ovs_mutex_lock(&bucket->mutex);
1074         stats->n_packets += bucket->packet_count;
1075         stats->n_bytes += bucket->byte_count;
1076         stats->used = MAX(stats->used, bucket->used);
1077         stats->tcp_flags |= bucket->tcp_flags;
1078         ovs_mutex_unlock(&bucket->mutex);
1079     }
1080 }
1081
1082 static int
1083 dpif_netdev_mask_from_nlattrs(const struct nlattr *key, uint32_t key_len,
1084                               const struct nlattr *mask_key,
1085                               uint32_t mask_key_len, const struct flow *flow,
1086                               struct flow *mask)
1087 {
1088     if (mask_key_len) {
1089         enum odp_key_fitness fitness;
1090
1091         fitness = odp_flow_key_to_mask(mask_key, mask_key_len, mask, flow);
1092         if (fitness) {
1093             /* This should not happen: it indicates that
1094              * odp_flow_key_from_mask() and odp_flow_key_to_mask()
1095              * disagree on the acceptable form of a mask.  Log the problem
1096              * as an error, with enough details to enable debugging. */
1097             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
1098
1099             if (!VLOG_DROP_ERR(&rl)) {
1100                 struct ds s;
1101
1102                 ds_init(&s);
1103                 odp_flow_format(key, key_len, mask_key, mask_key_len, NULL, &s,
1104                                 true);
1105                 VLOG_ERR("internal error parsing flow mask %s (%s)",
1106                          ds_cstr(&s), odp_key_fitness_to_string(fitness));
1107                 ds_destroy(&s);
1108             }
1109
1110             return EINVAL;
1111         }
1112     } else {
1113         enum mf_field_id id;
1114         /* No mask key, unwildcard everything except fields whose
1115          * prerequisities are not met. */
1116         memset(mask, 0x0, sizeof *mask);
1117
1118         for (id = 0; id < MFF_N_IDS; ++id) {
1119             /* Skip registers and metadata. */
1120             if (!(id >= MFF_REG0 && id < MFF_REG0 + FLOW_N_REGS)
1121                 && id != MFF_METADATA) {
1122                 const struct mf_field *mf = mf_from_id(id);
1123                 if (mf_are_prereqs_ok(mf, flow)) {
1124                     mf_mask_field(mf, mask);
1125                 }
1126             }
1127         }
1128     }
1129
1130     /* Force unwildcard the in_port.
1131      *
1132      * We need to do this even in the case where we unwildcard "everything"
1133      * above because "everything" only includes the 16-bit OpenFlow port number
1134      * mask->in_port.ofp_port, which only covers half of the 32-bit datapath
1135      * port number mask->in_port.odp_port. */
1136     mask->in_port.odp_port = u32_to_odp(UINT32_MAX);
1137
1138     return 0;
1139 }
1140
1141 static int
1142 dpif_netdev_flow_from_nlattrs(const struct nlattr *key, uint32_t key_len,
1143                               struct flow *flow)
1144 {
1145     odp_port_t in_port;
1146
1147     if (odp_flow_key_to_flow(key, key_len, flow)) {
1148         /* This should not happen: it indicates that odp_flow_key_from_flow()
1149          * and odp_flow_key_to_flow() disagree on the acceptable form of a
1150          * flow.  Log the problem as an error, with enough details to enable
1151          * debugging. */
1152         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
1153
1154         if (!VLOG_DROP_ERR(&rl)) {
1155             struct ds s;
1156
1157             ds_init(&s);
1158             odp_flow_format(key, key_len, NULL, 0, NULL, &s, true);
1159             VLOG_ERR("internal error parsing flow key %s", ds_cstr(&s));
1160             ds_destroy(&s);
1161         }
1162
1163         return EINVAL;
1164     }
1165
1166     in_port = flow->in_port.odp_port;
1167     if (!is_valid_port_number(in_port) && in_port != ODPP_NONE) {
1168         return EINVAL;
1169     }
1170
1171     return 0;
1172 }
1173
1174 static int
1175 dpif_netdev_flow_get(const struct dpif *dpif,
1176                      const struct nlattr *nl_key, size_t nl_key_len,
1177                      struct ofpbuf **bufp,
1178                      struct nlattr **maskp, size_t *mask_len,
1179                      struct nlattr **actionsp, size_t *actions_len,
1180                      struct dpif_flow_stats *stats)
1181 {
1182     struct dp_netdev *dp = get_dp_netdev(dpif);
1183     struct dp_netdev_flow *netdev_flow;
1184     struct flow key;
1185     int error;
1186
1187     error = dpif_netdev_flow_from_nlattrs(nl_key, nl_key_len, &key);
1188     if (error) {
1189         return error;
1190     }
1191
1192     netdev_flow = dp_netdev_find_flow(dp, &key);
1193
1194     if (netdev_flow) {
1195         if (stats) {
1196             get_dpif_flow_stats(netdev_flow, stats);
1197         }
1198
1199         if (maskp) {
1200             struct flow_wildcards wc;
1201
1202             *bufp = ofpbuf_new(sizeof(struct odputil_keybuf));
1203             minimask_expand(&netdev_flow->cr.match.mask, &wc);
1204             odp_flow_key_from_mask(*bufp, &wc.masks, &netdev_flow->flow,
1205                                    odp_to_u32(wc.masks.in_port.odp_port),
1206                                    SIZE_MAX, true);
1207             *maskp = ofpbuf_data(*bufp);
1208             *mask_len = ofpbuf_size(*bufp);
1209         }
1210         if (actionsp) {
1211             struct dp_netdev_actions *actions;
1212
1213             actions = dp_netdev_flow_get_actions(netdev_flow);
1214             *actionsp = actions->actions;
1215             *actions_len = actions->size;
1216         }
1217      } else {
1218         error = ENOENT;
1219     }
1220
1221     return error;
1222 }
1223
1224 static int
1225 dp_netdev_flow_add(struct dp_netdev *dp, struct match *match,
1226                    const struct nlattr *actions, size_t actions_len)
1227     OVS_REQUIRES(dp->flow_mutex)
1228 {
1229     struct dp_netdev_flow *netdev_flow;
1230
1231     netdev_flow = xzalloc(sizeof *netdev_flow);
1232     *CONST_CAST(struct flow *, &netdev_flow->flow) = match->flow;
1233
1234     ovs_refcount_init(&netdev_flow->ref_cnt);
1235
1236     ovsthread_stats_init(&netdev_flow->stats);
1237
1238     ovsrcu_set(&netdev_flow->actions,
1239                dp_netdev_actions_create(actions, actions_len));
1240
1241     cls_rule_init(CONST_CAST(struct cls_rule *, &netdev_flow->cr),
1242                   match, NETDEV_RULE_PRIORITY);
1243     cmap_insert(&dp->flow_table,
1244                 CONST_CAST(struct cmap_node *, &netdev_flow->node),
1245                 flow_hash(&match->flow, 0));
1246     classifier_insert(&dp->cls,
1247                       CONST_CAST(struct cls_rule *, &netdev_flow->cr));
1248
1249     return 0;
1250 }
1251
1252 static void
1253 clear_stats(struct dp_netdev_flow *netdev_flow)
1254 {
1255     struct dp_netdev_flow_stats *bucket;
1256     size_t i;
1257
1258     OVSTHREAD_STATS_FOR_EACH_BUCKET (bucket, i, &netdev_flow->stats) {
1259         ovs_mutex_lock(&bucket->mutex);
1260         bucket->used = 0;
1261         bucket->packet_count = 0;
1262         bucket->byte_count = 0;
1263         bucket->tcp_flags = 0;
1264         ovs_mutex_unlock(&bucket->mutex);
1265     }
1266 }
1267
1268 static int
1269 dpif_netdev_flow_put(struct dpif *dpif, const struct dpif_flow_put *put)
1270 {
1271     struct dp_netdev *dp = get_dp_netdev(dpif);
1272     struct dp_netdev_flow *netdev_flow;
1273     struct miniflow miniflow;
1274     struct match match;
1275     int error;
1276
1277     error = dpif_netdev_flow_from_nlattrs(put->key, put->key_len, &match.flow);
1278     if (error) {
1279         return error;
1280     }
1281     error = dpif_netdev_mask_from_nlattrs(put->key, put->key_len,
1282                                           put->mask, put->mask_len,
1283                                           &match.flow, &match.wc.masks);
1284     if (error) {
1285         return error;
1286     }
1287     miniflow_init(&miniflow, &match.flow);
1288
1289     ovs_mutex_lock(&dp->flow_mutex);
1290     netdev_flow = dp_netdev_lookup_flow(dp, &miniflow);
1291     if (!netdev_flow) {
1292         if (put->flags & DPIF_FP_CREATE) {
1293             if (cmap_count(&dp->flow_table) < MAX_FLOWS) {
1294                 if (put->stats) {
1295                     memset(put->stats, 0, sizeof *put->stats);
1296                 }
1297                 error = dp_netdev_flow_add(dp, &match, put->actions,
1298                                            put->actions_len);
1299             } else {
1300                 error = EFBIG;
1301             }
1302         } else {
1303             error = ENOENT;
1304         }
1305     } else {
1306         if (put->flags & DPIF_FP_MODIFY
1307             && flow_equal(&match.flow, &netdev_flow->flow)) {
1308             struct dp_netdev_actions *new_actions;
1309             struct dp_netdev_actions *old_actions;
1310
1311             new_actions = dp_netdev_actions_create(put->actions,
1312                                                    put->actions_len);
1313
1314             old_actions = dp_netdev_flow_get_actions(netdev_flow);
1315             ovsrcu_set(&netdev_flow->actions, new_actions);
1316
1317             if (put->stats) {
1318                 get_dpif_flow_stats(netdev_flow, put->stats);
1319             }
1320             if (put->flags & DPIF_FP_ZERO_STATS) {
1321                 clear_stats(netdev_flow);
1322             }
1323
1324             ovsrcu_postpone(dp_netdev_actions_free, old_actions);
1325         } else if (put->flags & DPIF_FP_CREATE) {
1326             error = EEXIST;
1327         } else {
1328             /* Overlapping flow. */
1329             error = EINVAL;
1330         }
1331     }
1332     ovs_mutex_unlock(&dp->flow_mutex);
1333     miniflow_destroy(&miniflow);
1334
1335     return error;
1336 }
1337
1338 static int
1339 dpif_netdev_flow_del(struct dpif *dpif, const struct dpif_flow_del *del)
1340 {
1341     struct dp_netdev *dp = get_dp_netdev(dpif);
1342     struct dp_netdev_flow *netdev_flow;
1343     struct flow key;
1344     int error;
1345
1346     error = dpif_netdev_flow_from_nlattrs(del->key, del->key_len, &key);
1347     if (error) {
1348         return error;
1349     }
1350
1351     ovs_mutex_lock(&dp->flow_mutex);
1352     netdev_flow = dp_netdev_find_flow(dp, &key);
1353     if (netdev_flow) {
1354         if (del->stats) {
1355             get_dpif_flow_stats(netdev_flow, del->stats);
1356         }
1357         dp_netdev_remove_flow(dp, netdev_flow);
1358     } else {
1359         error = ENOENT;
1360     }
1361     ovs_mutex_unlock(&dp->flow_mutex);
1362
1363     return error;
1364 }
1365
1366 struct dpif_netdev_flow_dump {
1367     struct dpif_flow_dump up;
1368     struct cmap_position pos;
1369     int status;
1370     struct ovs_mutex mutex;
1371 };
1372
1373 static struct dpif_netdev_flow_dump *
1374 dpif_netdev_flow_dump_cast(struct dpif_flow_dump *dump)
1375 {
1376     return CONTAINER_OF(dump, struct dpif_netdev_flow_dump, up);
1377 }
1378
1379 static struct dpif_flow_dump *
1380 dpif_netdev_flow_dump_create(const struct dpif *dpif_)
1381 {
1382     struct dpif_netdev_flow_dump *dump;
1383
1384     dump = xmalloc(sizeof *dump);
1385     dpif_flow_dump_init(&dump->up, dpif_);
1386     memset(&dump->pos, 0, sizeof dump->pos);
1387     dump->status = 0;
1388     ovs_mutex_init(&dump->mutex);
1389
1390     return &dump->up;
1391 }
1392
1393 static int
1394 dpif_netdev_flow_dump_destroy(struct dpif_flow_dump *dump_)
1395 {
1396     struct dpif_netdev_flow_dump *dump = dpif_netdev_flow_dump_cast(dump_);
1397
1398     ovs_mutex_destroy(&dump->mutex);
1399     free(dump);
1400     return 0;
1401 }
1402
1403 struct dpif_netdev_flow_dump_thread {
1404     struct dpif_flow_dump_thread up;
1405     struct dpif_netdev_flow_dump *dump;
1406     struct odputil_keybuf keybuf[FLOW_DUMP_MAX_BATCH];
1407     struct odputil_keybuf maskbuf[FLOW_DUMP_MAX_BATCH];
1408 };
1409
1410 static struct dpif_netdev_flow_dump_thread *
1411 dpif_netdev_flow_dump_thread_cast(struct dpif_flow_dump_thread *thread)
1412 {
1413     return CONTAINER_OF(thread, struct dpif_netdev_flow_dump_thread, up);
1414 }
1415
1416 static struct dpif_flow_dump_thread *
1417 dpif_netdev_flow_dump_thread_create(struct dpif_flow_dump *dump_)
1418 {
1419     struct dpif_netdev_flow_dump *dump = dpif_netdev_flow_dump_cast(dump_);
1420     struct dpif_netdev_flow_dump_thread *thread;
1421
1422     thread = xmalloc(sizeof *thread);
1423     dpif_flow_dump_thread_init(&thread->up, &dump->up);
1424     thread->dump = dump;
1425     return &thread->up;
1426 }
1427
1428 static void
1429 dpif_netdev_flow_dump_thread_destroy(struct dpif_flow_dump_thread *thread_)
1430 {
1431     struct dpif_netdev_flow_dump_thread *thread
1432         = dpif_netdev_flow_dump_thread_cast(thread_);
1433
1434     free(thread);
1435 }
1436
1437 static int
1438 dpif_netdev_flow_dump_next(struct dpif_flow_dump_thread *thread_,
1439                            struct dpif_flow *flows, int max_flows)
1440 {
1441     struct dpif_netdev_flow_dump_thread *thread
1442         = dpif_netdev_flow_dump_thread_cast(thread_);
1443     struct dpif_netdev_flow_dump *dump = thread->dump;
1444     struct dpif_netdev *dpif = dpif_netdev_cast(thread->up.dpif);
1445     struct dp_netdev_flow *netdev_flows[FLOW_DUMP_MAX_BATCH];
1446     struct dp_netdev *dp = get_dp_netdev(&dpif->dpif);
1447     int n_flows = 0;
1448     int i;
1449
1450     ovs_mutex_lock(&dump->mutex);
1451     if (!dump->status) {
1452         for (n_flows = 0; n_flows < MIN(max_flows, FLOW_DUMP_MAX_BATCH);
1453              n_flows++) {
1454             struct cmap_node *node;
1455
1456             node = cmap_next_position(&dp->flow_table, &dump->pos);
1457             if (!node) {
1458                 dump->status = EOF;
1459                 break;
1460             }
1461             netdev_flows[n_flows] = CONTAINER_OF(node, struct dp_netdev_flow,
1462                                                  node);
1463         }
1464     }
1465     ovs_mutex_unlock(&dump->mutex);
1466
1467     for (i = 0; i < n_flows; i++) {
1468         struct odputil_keybuf *maskbuf = &thread->maskbuf[i];
1469         struct odputil_keybuf *keybuf = &thread->keybuf[i];
1470         struct dp_netdev_flow *netdev_flow = netdev_flows[i];
1471         struct dpif_flow *f = &flows[i];
1472         struct dp_netdev_actions *dp_actions;
1473         struct flow_wildcards wc;
1474         struct ofpbuf buf;
1475
1476         minimask_expand(&netdev_flow->cr.match.mask, &wc);
1477
1478         /* Key. */
1479         ofpbuf_use_stack(&buf, keybuf, sizeof *keybuf);
1480         odp_flow_key_from_flow(&buf, &netdev_flow->flow, &wc.masks,
1481                                netdev_flow->flow.in_port.odp_port, true);
1482         f->key = ofpbuf_data(&buf);
1483         f->key_len = ofpbuf_size(&buf);
1484
1485         /* Mask. */
1486         ofpbuf_use_stack(&buf, maskbuf, sizeof *maskbuf);
1487         odp_flow_key_from_mask(&buf, &wc.masks, &netdev_flow->flow,
1488                                odp_to_u32(wc.masks.in_port.odp_port),
1489                                SIZE_MAX, true);
1490         f->mask = ofpbuf_data(&buf);
1491         f->mask_len = ofpbuf_size(&buf);
1492
1493         /* Actions. */
1494         dp_actions = dp_netdev_flow_get_actions(netdev_flow);
1495         f->actions = dp_actions->actions;
1496         f->actions_len = dp_actions->size;
1497
1498         /* Stats. */
1499         get_dpif_flow_stats(netdev_flow, &f->stats);
1500     }
1501
1502     return n_flows;
1503 }
1504
1505 static int
1506 dpif_netdev_execute(struct dpif *dpif, struct dpif_execute *execute)
1507 {
1508     struct dp_netdev *dp = get_dp_netdev(dpif);
1509     struct dpif_packet packet, *pp;
1510     struct pkt_metadata *md = &execute->md;
1511
1512     if (ofpbuf_size(execute->packet) < ETH_HEADER_LEN ||
1513         ofpbuf_size(execute->packet) > UINT16_MAX) {
1514         return EINVAL;
1515     }
1516
1517     packet.ofpbuf = *execute->packet;
1518     pp = &packet;
1519
1520     dp_netdev_execute_actions(dp, &pp, 1, false, md,
1521                               execute->actions, execute->actions_len);
1522
1523     /* Even though may_steal is set to false, some actions could modify or
1524      * reallocate the ofpbuf memory. We need to pass those changes to the
1525      * caller */
1526     *execute->packet = packet.ofpbuf;
1527
1528     return 0;
1529 }
1530
1531 static void
1532 dpif_netdev_operate(struct dpif *dpif, struct dpif_op **ops, size_t n_ops)
1533 {
1534     size_t i;
1535
1536     for (i = 0; i < n_ops; i++) {
1537         struct dpif_op *op = ops[i];
1538
1539         switch (op->type) {
1540         case DPIF_OP_FLOW_PUT:
1541             op->error = dpif_netdev_flow_put(dpif, &op->u.flow_put);
1542             break;
1543
1544         case DPIF_OP_FLOW_DEL:
1545             op->error = dpif_netdev_flow_del(dpif, &op->u.flow_del);
1546             break;
1547
1548         case DPIF_OP_EXECUTE:
1549             op->error = dpif_netdev_execute(dpif, &op->u.execute);
1550             break;
1551         }
1552     }
1553 }
1554
1555 static int
1556 dpif_netdev_queue_to_priority(const struct dpif *dpif OVS_UNUSED,
1557                               uint32_t queue_id, uint32_t *priority)
1558 {
1559     *priority = queue_id;
1560     return 0;
1561 }
1562
1563 \f
1564 /* Creates and returns a new 'struct dp_netdev_actions', with a reference count
1565  * of 1, whose actions are a copy of from the 'ofpacts_len' bytes of
1566  * 'ofpacts'. */
1567 struct dp_netdev_actions *
1568 dp_netdev_actions_create(const struct nlattr *actions, size_t size)
1569 {
1570     struct dp_netdev_actions *netdev_actions;
1571
1572     netdev_actions = xmalloc(sizeof *netdev_actions);
1573     netdev_actions->actions = xmemdup(actions, size);
1574     netdev_actions->size = size;
1575
1576     return netdev_actions;
1577 }
1578
1579 struct dp_netdev_actions *
1580 dp_netdev_flow_get_actions(const struct dp_netdev_flow *flow)
1581 {
1582     return ovsrcu_get(struct dp_netdev_actions *, &flow->actions);
1583 }
1584
1585 static void
1586 dp_netdev_actions_free(struct dp_netdev_actions *actions)
1587 {
1588     free(actions->actions);
1589     free(actions);
1590 }
1591 \f
1592
1593 static void
1594 dp_netdev_process_rxq_port(struct dp_netdev *dp,
1595                           struct dp_netdev_port *port,
1596                           struct netdev_rxq *rxq)
1597 {
1598     struct dpif_packet *packets[NETDEV_MAX_RX_BATCH];
1599     int error, cnt;
1600
1601     error = netdev_rxq_recv(rxq, packets, &cnt);
1602     if (!error) {
1603         dp_netdev_port_input(dp, packets, cnt, port->port_no);
1604     } else if (error != EAGAIN && error != EOPNOTSUPP) {
1605         static struct vlog_rate_limit rl
1606             = VLOG_RATE_LIMIT_INIT(1, 5);
1607
1608         VLOG_ERR_RL(&rl, "error receiving data from %s: %s",
1609                     netdev_get_name(port->netdev),
1610                     ovs_strerror(error));
1611     }
1612 }
1613
1614 static void
1615 dpif_netdev_run(struct dpif *dpif)
1616 {
1617     struct dp_netdev_port *port;
1618     struct dp_netdev *dp = get_dp_netdev(dpif);
1619
1620     CMAP_FOR_EACH (port, node, &dp->ports) {
1621         if (!netdev_is_pmd(port->netdev)) {
1622             int i;
1623
1624             for (i = 0; i < netdev_n_rxq(port->netdev); i++) {
1625                 dp_netdev_process_rxq_port(dp, port, port->rxq[i]);
1626             }
1627         }
1628     }
1629 }
1630
1631 static void
1632 dpif_netdev_wait(struct dpif *dpif)
1633 {
1634     struct dp_netdev_port *port;
1635     struct dp_netdev *dp = get_dp_netdev(dpif);
1636
1637     ovs_mutex_lock(&dp_netdev_mutex);
1638     CMAP_FOR_EACH (port, node, &dp->ports) {
1639         if (!netdev_is_pmd(port->netdev)) {
1640             int i;
1641
1642             for (i = 0; i < netdev_n_rxq(port->netdev); i++) {
1643                 netdev_rxq_wait(port->rxq[i]);
1644             }
1645         }
1646     }
1647     ovs_mutex_unlock(&dp_netdev_mutex);
1648 }
1649
1650 struct rxq_poll {
1651     struct dp_netdev_port *port;
1652     struct netdev_rxq *rx;
1653 };
1654
1655 static int
1656 pmd_load_queues(struct pmd_thread *f,
1657                 struct rxq_poll **ppoll_list, int poll_cnt)
1658 {
1659     struct dp_netdev *dp = f->dp;
1660     struct rxq_poll *poll_list = *ppoll_list;
1661     struct dp_netdev_port *port;
1662     int id = f->id;
1663     int index;
1664     int i;
1665
1666     /* Simple scheduler for netdev rx polling. */
1667     for (i = 0; i < poll_cnt; i++) {
1668          port_unref(poll_list[i].port);
1669     }
1670
1671     poll_cnt = 0;
1672     index = 0;
1673
1674     CMAP_FOR_EACH (port, node, &f->dp->ports) {
1675         if (netdev_is_pmd(port->netdev)) {
1676             int i;
1677
1678             for (i = 0; i < netdev_n_rxq(port->netdev); i++) {
1679                 if ((index % dp->n_pmd_threads) == id) {
1680                     poll_list = xrealloc(poll_list, sizeof *poll_list * (poll_cnt + 1));
1681
1682                     port_ref(port);
1683                     poll_list[poll_cnt].port = port;
1684                     poll_list[poll_cnt].rx = port->rxq[i];
1685                     poll_cnt++;
1686                 }
1687                 index++;
1688             }
1689         }
1690     }
1691
1692     *ppoll_list = poll_list;
1693     return poll_cnt;
1694 }
1695
1696 static void *
1697 pmd_thread_main(void *f_)
1698 {
1699     struct pmd_thread *f = f_;
1700     struct dp_netdev *dp = f->dp;
1701     unsigned int lc = 0;
1702     struct rxq_poll *poll_list;
1703     unsigned int port_seq;
1704     int poll_cnt;
1705     int i;
1706
1707     poll_cnt = 0;
1708     poll_list = NULL;
1709
1710     pmd_thread_setaffinity_cpu(f->id);
1711 reload:
1712     poll_cnt = pmd_load_queues(f, &poll_list, poll_cnt);
1713     atomic_read(&f->change_seq, &port_seq);
1714
1715     for (;;) {
1716         unsigned int c_port_seq;
1717         int i;
1718
1719         for (i = 0; i < poll_cnt; i++) {
1720             dp_netdev_process_rxq_port(dp,  poll_list[i].port, poll_list[i].rx);
1721         }
1722
1723         if (lc++ > 1024) {
1724             ovsrcu_quiesce();
1725
1726             /* XXX: need completely userspace based signaling method.
1727              * to keep this thread entirely in userspace.
1728              * For now using atomic counter. */
1729             lc = 0;
1730             atomic_read_explicit(&f->change_seq, &c_port_seq, memory_order_consume);
1731             if (c_port_seq != port_seq) {
1732                 break;
1733             }
1734         }
1735     }
1736
1737     if (!latch_is_set(&f->dp->exit_latch)){
1738         goto reload;
1739     }
1740
1741     for (i = 0; i < poll_cnt; i++) {
1742          port_unref(poll_list[i].port);
1743     }
1744
1745     free(poll_list);
1746     return NULL;
1747 }
1748
1749 static void
1750 dp_netdev_disable_upcall(struct dp_netdev *dp)
1751     OVS_ACQUIRES(dp->upcall_rwlock)
1752 {
1753     fat_rwlock_wrlock(&dp->upcall_rwlock);
1754 }
1755
1756 static void
1757 dpif_netdev_disable_upcall(struct dpif *dpif)
1758     OVS_NO_THREAD_SAFETY_ANALYSIS
1759 {
1760     struct dp_netdev *dp = get_dp_netdev(dpif);
1761     dp_netdev_disable_upcall(dp);
1762 }
1763
1764 static void
1765 dp_netdev_enable_upcall(struct dp_netdev *dp)
1766     OVS_RELEASES(dp->upcall_rwlock)
1767 {
1768     fat_rwlock_unlock(&dp->upcall_rwlock);
1769 }
1770
1771 static void
1772 dpif_netdev_enable_upcall(struct dpif *dpif)
1773     OVS_NO_THREAD_SAFETY_ANALYSIS
1774 {
1775     struct dp_netdev *dp = get_dp_netdev(dpif);
1776     dp_netdev_enable_upcall(dp);
1777 }
1778
1779 static void
1780 dp_netdev_set_pmd_threads(struct dp_netdev *dp, int n)
1781 {
1782     int i;
1783
1784     if (n == dp->n_pmd_threads) {
1785         return;
1786     }
1787
1788     /* Stop existing threads. */
1789     latch_set(&dp->exit_latch);
1790     dp_netdev_reload_pmd_threads(dp);
1791     for (i = 0; i < dp->n_pmd_threads; i++) {
1792         struct pmd_thread *f = &dp->pmd_threads[i];
1793
1794         xpthread_join(f->thread, NULL);
1795     }
1796     latch_poll(&dp->exit_latch);
1797     free(dp->pmd_threads);
1798
1799     /* Start new threads. */
1800     dp->pmd_threads = xmalloc(n * sizeof *dp->pmd_threads);
1801     dp->n_pmd_threads = n;
1802
1803     for (i = 0; i < n; i++) {
1804         struct pmd_thread *f = &dp->pmd_threads[i];
1805
1806         f->dp = dp;
1807         f->id = i;
1808         atomic_store(&f->change_seq, 1);
1809
1810         /* Each thread will distribute all devices rx-queues among
1811          * themselves. */
1812         f->thread = ovs_thread_create("pmd", pmd_thread_main, f);
1813     }
1814 }
1815
1816 \f
1817 static void *
1818 dp_netdev_flow_stats_new_cb(void)
1819 {
1820     struct dp_netdev_flow_stats *bucket = xzalloc_cacheline(sizeof *bucket);
1821     ovs_mutex_init(&bucket->mutex);
1822     return bucket;
1823 }
1824
1825 static void
1826 dp_netdev_flow_used(struct dp_netdev_flow *netdev_flow,
1827                     int cnt, int size,
1828                     uint16_t tcp_flags)
1829 {
1830     long long int now = time_msec();
1831     struct dp_netdev_flow_stats *bucket;
1832
1833     bucket = ovsthread_stats_bucket_get(&netdev_flow->stats,
1834                                         dp_netdev_flow_stats_new_cb);
1835
1836     ovs_mutex_lock(&bucket->mutex);
1837     bucket->used = MAX(now, bucket->used);
1838     bucket->packet_count += cnt;
1839     bucket->byte_count += size;
1840     bucket->tcp_flags |= tcp_flags;
1841     ovs_mutex_unlock(&bucket->mutex);
1842 }
1843
1844 static void *
1845 dp_netdev_stats_new_cb(void)
1846 {
1847     struct dp_netdev_stats *bucket = xzalloc_cacheline(sizeof *bucket);
1848     ovs_mutex_init(&bucket->mutex);
1849     return bucket;
1850 }
1851
1852 static void
1853 dp_netdev_count_packet(struct dp_netdev *dp, enum dp_stat_type type, int cnt)
1854 {
1855     struct dp_netdev_stats *bucket;
1856
1857     bucket = ovsthread_stats_bucket_get(&dp->stats, dp_netdev_stats_new_cb);
1858     ovs_mutex_lock(&bucket->mutex);
1859     bucket->n[type] += cnt;
1860     ovs_mutex_unlock(&bucket->mutex);
1861 }
1862
1863 struct packet_batch {
1864     unsigned int packet_count;
1865     unsigned int byte_count;
1866     uint16_t tcp_flags;
1867
1868     struct dp_netdev_flow *flow;
1869
1870     struct dpif_packet *packets[NETDEV_MAX_RX_BATCH];
1871     struct pkt_metadata md;
1872 };
1873
1874 static inline void
1875 packet_batch_update(struct packet_batch *batch,
1876                     struct dpif_packet *packet, const struct miniflow *mf)
1877 {
1878     batch->tcp_flags |= miniflow_get_tcp_flags(mf);
1879     batch->packets[batch->packet_count++] = packet;
1880     batch->byte_count += ofpbuf_size(&packet->ofpbuf);
1881 }
1882
1883 static inline void
1884 packet_batch_init(struct packet_batch *batch, struct dp_netdev_flow *flow,
1885                   struct pkt_metadata *md)
1886 {
1887     batch->flow = flow;
1888     batch->md = *md;
1889
1890     batch->packet_count = 0;
1891     batch->byte_count = 0;
1892     batch->tcp_flags = 0;
1893 }
1894
1895 static inline void
1896 packet_batch_execute(struct packet_batch *batch, struct dp_netdev *dp)
1897 {
1898     struct dp_netdev_actions *actions;
1899     struct dp_netdev_flow *flow = batch->flow;
1900
1901     dp_netdev_flow_used(batch->flow, batch->packet_count, batch->byte_count,
1902                         batch->tcp_flags);
1903
1904     actions = dp_netdev_flow_get_actions(flow);
1905
1906     dp_netdev_execute_actions(dp, batch->packets,
1907                               batch->packet_count, true, &batch->md,
1908                               actions->actions, actions->size);
1909
1910     dp_netdev_count_packet(dp, DP_STAT_HIT, batch->packet_count);
1911 }
1912
1913 static void
1914 dp_netdev_input(struct dp_netdev *dp, struct dpif_packet **packets, int cnt,
1915                 struct pkt_metadata *md)
1916 {
1917     struct dp_netdev_queue q = DP_NETDEV_QUEUE_INITIALIZER;
1918     struct packet_batch batches[NETDEV_MAX_RX_BATCH];
1919     struct netdev_flow_key keys[NETDEV_MAX_RX_BATCH];
1920     const struct miniflow *mfs[NETDEV_MAX_RX_BATCH]; /* NULL at bad packets. */
1921     struct cls_rule *rules[NETDEV_MAX_RX_BATCH];
1922     size_t n_batches, i;
1923
1924     for (i = 0; i < cnt; i++) {
1925         if (OVS_UNLIKELY(ofpbuf_size(&packets[i]->ofpbuf) < ETH_HEADER_LEN)) {
1926             dpif_packet_delete(packets[i]);
1927             mfs[i] = NULL;
1928             continue;
1929         }
1930
1931         miniflow_initialize(&keys[i].flow, keys[i].buf);
1932         miniflow_extract(&packets[i]->ofpbuf, md, &keys[i].flow);
1933         mfs[i] = &keys[i].flow;
1934     }
1935
1936     classifier_lookup_miniflow_batch(&dp->cls, mfs, rules, cnt);
1937
1938     n_batches = 0;
1939     for (i = 0; i < cnt; i++) {
1940         struct dp_netdev_flow *flow;
1941         struct packet_batch *batch;
1942         size_t j;
1943
1944         if (OVS_UNLIKELY(!mfs[i])) {
1945             continue;
1946         }
1947
1948         if (OVS_UNLIKELY(!rules[i])) {
1949             struct ofpbuf *buf = &packets[i]->ofpbuf;
1950
1951             dp_netdev_count_packet(dp, DP_STAT_MISS, 1);
1952             dp_netdev_queue_userspace_packet(&q, buf, DPIF_UC_MISS,
1953                                              mfs[i], NULL);
1954             dpif_packet_delete(packets[i]);
1955             continue;
1956         }
1957
1958         /* XXX: This O(n^2) algortihm makes sense if we're operating under the
1959          * assumption that the number of distinct flows (and therefore the
1960          * number of distinct batches) is quite small.  If this turns out not
1961          * to be the case, it may make sense to pre sort based on the
1962          * netdev_flow pointer.  That done we can get the appropriate batching
1963          * in O(n * log(n)) instead. */
1964         batch = NULL;
1965         flow = dp_netdev_flow_cast(rules[i]);
1966         for (j = 0; j < n_batches; j++) {
1967             if (batches[j].flow == flow) {
1968                 batch = &batches[j];
1969                 break;
1970             }
1971         }
1972
1973         if (!batch) {
1974             batch = &batches[n_batches++];
1975             packet_batch_init(batch, flow, md);
1976         }
1977         packet_batch_update(batch, packets[i], mfs[i]);
1978     }
1979
1980     for (i = 0; i < n_batches; i++) {
1981         packet_batch_execute(&batches[i], dp);
1982     }
1983
1984     if (q.packet_count) {
1985         dp_netdev_execute_userspace_queue(&q, dp);
1986     }
1987 }
1988
1989 static void
1990 dp_netdev_port_input(struct dp_netdev *dp, struct dpif_packet **packets,
1991                      int cnt, odp_port_t port_no)
1992 {
1993     uint32_t *recirc_depth = recirc_depth_get();
1994     struct pkt_metadata md = PKT_METADATA_INITIALIZER(port_no);
1995
1996     *recirc_depth = 0;
1997     dp_netdev_input(dp, packets, cnt, &md);
1998 }
1999
2000 static int
2001 dp_netdev_queue_userspace_packet(struct dp_netdev_queue *q,
2002                                  struct ofpbuf *packet, int type,
2003                                  const struct miniflow *key,
2004                                  const struct nlattr *userdata)
2005 {
2006     if (q->packet_count < NETDEV_MAX_RX_BATCH) {
2007         int cnt = q->packet_count;
2008         struct dpif_upcall *upcall = &q->upcalls[cnt];
2009         struct ofpbuf *buf = &q->bufs[cnt];
2010         size_t buf_size;
2011         struct flow flow;
2012         void *data;
2013
2014         upcall->type = type;
2015
2016         /* Allocate buffer big enough for everything. */
2017         buf_size = ODPUTIL_FLOW_KEY_BYTES;
2018         if (userdata) {
2019             buf_size += NLA_ALIGN(userdata->nla_len);
2020         }
2021         buf_size += ofpbuf_size(packet);
2022         ofpbuf_init(buf, buf_size);
2023
2024         /* Put ODP flow. */
2025         miniflow_expand(key, &flow);
2026         odp_flow_key_from_flow(buf, &flow, NULL, flow.in_port.odp_port, true);
2027         upcall->key = ofpbuf_data(buf);
2028         upcall->key_len = ofpbuf_size(buf);
2029
2030         /* Put userdata. */
2031         if (userdata) {
2032             upcall->userdata = ofpbuf_put(buf, userdata,
2033                                           NLA_ALIGN(userdata->nla_len));
2034         }
2035
2036         /* We have to perform a copy of the packet, because we cannot send DPDK
2037          * mbufs to a non pmd thread. When the upcall processing will be done
2038          * in the pmd thread, this copy can be avoided */
2039         data = ofpbuf_put(buf, ofpbuf_data(packet), ofpbuf_size(packet));
2040         ofpbuf_use_stub(&upcall->packet, data, ofpbuf_size(packet));
2041         ofpbuf_set_size(&upcall->packet, ofpbuf_size(packet));
2042
2043         q->packet_count++;
2044         return 0;
2045     } else {
2046         return ENOBUFS;
2047     }
2048 }
2049
2050 static void
2051 dp_netdev_execute_userspace_queue(struct dp_netdev_queue *q,
2052                                   struct dp_netdev *dp)
2053 {
2054     struct dpif_upcall *upcalls = q->upcalls;
2055     struct ofpbuf *bufs = q->bufs;
2056     int cnt = q->packet_count;
2057
2058     if (!fat_rwlock_tryrdlock(&dp->upcall_rwlock)) {
2059         ovs_assert(dp->upcall_cb);
2060         dp->upcall_cb(dp->dpif, upcalls, bufs, cnt);
2061         fat_rwlock_unlock(&dp->upcall_rwlock);
2062     } else {
2063         int i;
2064
2065         for (i = 0; i < cnt; i++) {
2066             ofpbuf_uninit(&bufs[i]);
2067             ofpbuf_uninit(&upcalls[i].packet);
2068         }
2069     }
2070 }
2071
2072 struct dp_netdev_execute_aux {
2073     struct dp_netdev *dp;
2074 };
2075
2076 static void
2077 dpif_netdev_register_upcall_cb(struct dpif *dpif, exec_upcall_cb *cb)
2078 {
2079     struct dp_netdev *dp = get_dp_netdev(dpif);
2080     dp->upcall_cb = cb;
2081 }
2082
2083 static void
2084 dp_execute_cb(void *aux_, struct dpif_packet **packets, int cnt,
2085               struct pkt_metadata *md,
2086               const struct nlattr *a, bool may_steal)
2087     OVS_NO_THREAD_SAFETY_ANALYSIS
2088 {
2089     struct dp_netdev_execute_aux *aux = aux_;
2090     int type = nl_attr_type(a);
2091     struct dp_netdev_port *p;
2092     uint32_t *depth = recirc_depth_get();
2093     int i;
2094
2095     switch ((enum ovs_action_attr)type) {
2096     case OVS_ACTION_ATTR_OUTPUT:
2097         p = dp_netdev_lookup_port(aux->dp, u32_to_odp(nl_attr_get_u32(a)));
2098         if (OVS_LIKELY(p)) {
2099             netdev_send(p->netdev, packets, cnt, may_steal);
2100         } else if (may_steal) {
2101             for (i = 0; i < cnt; i++) {
2102                 dpif_packet_delete(packets[i]);
2103             }
2104         }
2105         break;
2106
2107     case OVS_ACTION_ATTR_USERSPACE: {
2108         const struct nlattr *userdata;
2109         struct netdev_flow_key key;
2110         struct dp_netdev_queue q = DP_NETDEV_QUEUE_INITIALIZER;
2111
2112         userdata = nl_attr_find_nested(a, OVS_USERSPACE_ATTR_USERDATA);
2113
2114         miniflow_initialize(&key.flow, key.buf);
2115
2116         for (i = 0; i < cnt; i++) {
2117             struct ofpbuf *packet;
2118
2119             packet = &packets[i]->ofpbuf;
2120
2121             miniflow_extract(packet, md, &key.flow);
2122
2123             dp_netdev_queue_userspace_packet(&q, packet,
2124                                              DPIF_UC_ACTION, &key.flow,
2125                                              userdata);
2126             if (may_steal) {
2127                 dpif_packet_delete(packets[i]);
2128             }
2129         }
2130
2131         if (q.packet_count) {
2132             dp_netdev_execute_userspace_queue(&q, aux->dp);
2133         }
2134         break;
2135     }
2136
2137     case OVS_ACTION_ATTR_HASH: {
2138         const struct ovs_action_hash *hash_act;
2139         struct netdev_flow_key key;
2140         uint32_t hash;
2141
2142         hash_act = nl_attr_get(a);
2143
2144         miniflow_initialize(&key.flow, key.buf);
2145
2146         for (i = 0; i < cnt; i++) {
2147
2148             /* XXX: this is slow. Use RSS hash in the future */
2149             miniflow_extract(&packets[i]->ofpbuf, md, &key.flow);
2150
2151             if (hash_act->hash_alg == OVS_HASH_ALG_L4) {
2152                 /* Hash need not be symmetric, nor does it need to include
2153                  * L2 fields. */
2154                 hash = miniflow_hash_5tuple(&key.flow, hash_act->hash_basis);
2155             } else {
2156                 VLOG_WARN("Unknown hash algorithm specified "
2157                           "for the hash action.");
2158                 hash = 2;
2159             }
2160
2161             if (!hash) {
2162                 hash = 1; /* 0 is not valid */
2163             }
2164
2165             if (i == 0) {
2166                 md->dp_hash = hash;
2167             }
2168             packets[i]->dp_hash = hash;
2169         }
2170         break;
2171     }
2172
2173     case OVS_ACTION_ATTR_RECIRC:
2174         if (*depth < MAX_RECIRC_DEPTH) {
2175
2176             (*depth)++;
2177             for (i = 0; i < cnt; i++) {
2178                 struct dpif_packet *recirc_pkt;
2179                 struct pkt_metadata recirc_md = *md;
2180
2181                 recirc_pkt = (may_steal) ? packets[i]
2182                                     : dpif_packet_clone(packets[i]);
2183
2184                 recirc_md.recirc_id = nl_attr_get_u32(a);
2185
2186                 /* Hash is private to each packet */
2187                 recirc_md.dp_hash = packets[i]->dp_hash;
2188
2189                 dp_netdev_input(aux->dp, &recirc_pkt, 1, &recirc_md);
2190             }
2191             (*depth)--;
2192
2193             break;
2194         } else {
2195             VLOG_WARN("Packet dropped. Max recirculation depth exceeded.");
2196             if (may_steal) {
2197                 for (i = 0; i < cnt; i++) {
2198                     dpif_packet_delete(packets[i]);
2199                 }
2200             }
2201         }
2202         break;
2203
2204     case OVS_ACTION_ATTR_PUSH_VLAN:
2205     case OVS_ACTION_ATTR_POP_VLAN:
2206     case OVS_ACTION_ATTR_PUSH_MPLS:
2207     case OVS_ACTION_ATTR_POP_MPLS:
2208     case OVS_ACTION_ATTR_SET:
2209     case OVS_ACTION_ATTR_SAMPLE:
2210     case OVS_ACTION_ATTR_UNSPEC:
2211     case __OVS_ACTION_ATTR_MAX:
2212         OVS_NOT_REACHED();
2213     }
2214 }
2215
2216 static void
2217 dp_netdev_execute_actions(struct dp_netdev *dp,
2218                           struct dpif_packet **packets, int cnt,
2219                           bool may_steal, struct pkt_metadata *md,
2220                           const struct nlattr *actions, size_t actions_len)
2221 {
2222     struct dp_netdev_execute_aux aux = {dp};
2223
2224     odp_execute_actions(&aux, packets, cnt, may_steal, md, actions,
2225                         actions_len, dp_execute_cb);
2226 }
2227
2228 const struct dpif_class dpif_netdev_class = {
2229     "netdev",
2230     dpif_netdev_enumerate,
2231     dpif_netdev_port_open_type,
2232     dpif_netdev_open,
2233     dpif_netdev_close,
2234     dpif_netdev_destroy,
2235     dpif_netdev_run,
2236     dpif_netdev_wait,
2237     dpif_netdev_get_stats,
2238     dpif_netdev_port_add,
2239     dpif_netdev_port_del,
2240     dpif_netdev_port_query_by_number,
2241     dpif_netdev_port_query_by_name,
2242     NULL,                       /* port_get_pid */
2243     dpif_netdev_port_dump_start,
2244     dpif_netdev_port_dump_next,
2245     dpif_netdev_port_dump_done,
2246     dpif_netdev_port_poll,
2247     dpif_netdev_port_poll_wait,
2248     dpif_netdev_flow_get,
2249     dpif_netdev_flow_flush,
2250     dpif_netdev_flow_dump_create,
2251     dpif_netdev_flow_dump_destroy,
2252     dpif_netdev_flow_dump_thread_create,
2253     dpif_netdev_flow_dump_thread_destroy,
2254     dpif_netdev_flow_dump_next,
2255     dpif_netdev_operate,
2256     NULL,                       /* recv_set */
2257     NULL,                       /* handlers_set */
2258     dpif_netdev_queue_to_priority,
2259     NULL,                       /* recv */
2260     NULL,                       /* recv_wait */
2261     NULL,                       /* recv_purge */
2262     dpif_netdev_register_upcall_cb,
2263     dpif_netdev_enable_upcall,
2264     dpif_netdev_disable_upcall,
2265 };
2266
2267 static void
2268 dpif_dummy_change_port_number(struct unixctl_conn *conn, int argc OVS_UNUSED,
2269                               const char *argv[], void *aux OVS_UNUSED)
2270 {
2271     struct dp_netdev_port *old_port;
2272     struct dp_netdev_port *new_port;
2273     struct dp_netdev *dp;
2274     odp_port_t port_no;
2275
2276     ovs_mutex_lock(&dp_netdev_mutex);
2277     dp = shash_find_data(&dp_netdevs, argv[1]);
2278     if (!dp || !dpif_netdev_class_is_dummy(dp->class)) {
2279         ovs_mutex_unlock(&dp_netdev_mutex);
2280         unixctl_command_reply_error(conn, "unknown datapath or not a dummy");
2281         return;
2282     }
2283     ovs_refcount_ref(&dp->ref_cnt);
2284     ovs_mutex_unlock(&dp_netdev_mutex);
2285
2286     ovs_mutex_lock(&dp->port_mutex);
2287     if (get_port_by_name(dp, argv[2], &old_port)) {
2288         unixctl_command_reply_error(conn, "unknown port");
2289         goto exit;
2290     }
2291
2292     port_no = u32_to_odp(atoi(argv[3]));
2293     if (!port_no || port_no == ODPP_NONE) {
2294         unixctl_command_reply_error(conn, "bad port number");
2295         goto exit;
2296     }
2297     if (dp_netdev_lookup_port(dp, port_no)) {
2298         unixctl_command_reply_error(conn, "port number already in use");
2299         goto exit;
2300     }
2301
2302     /* Remove old port. */
2303     cmap_remove(&dp->ports, &old_port->node, hash_port_no(old_port->port_no));
2304     ovsrcu_postpone(free, old_port);
2305
2306     /* Insert new port (cmap semantics mean we cannot re-insert 'old_port'). */
2307     new_port = xmemdup(old_port, sizeof *old_port);
2308     new_port->port_no = port_no;
2309     cmap_insert(&dp->ports, &new_port->node, hash_port_no(port_no));
2310
2311     seq_change(dp->port_seq);
2312     unixctl_command_reply(conn, NULL);
2313
2314 exit:
2315     ovs_mutex_unlock(&dp->port_mutex);
2316     dp_netdev_unref(dp);
2317 }
2318
2319 static void
2320 dpif_dummy_delete_port(struct unixctl_conn *conn, int argc OVS_UNUSED,
2321                        const char *argv[], void *aux OVS_UNUSED)
2322 {
2323     struct dp_netdev_port *port;
2324     struct dp_netdev *dp;
2325
2326     ovs_mutex_lock(&dp_netdev_mutex);
2327     dp = shash_find_data(&dp_netdevs, argv[1]);
2328     if (!dp || !dpif_netdev_class_is_dummy(dp->class)) {
2329         ovs_mutex_unlock(&dp_netdev_mutex);
2330         unixctl_command_reply_error(conn, "unknown datapath or not a dummy");
2331         return;
2332     }
2333     ovs_refcount_ref(&dp->ref_cnt);
2334     ovs_mutex_unlock(&dp_netdev_mutex);
2335
2336     ovs_mutex_lock(&dp->port_mutex);
2337     if (get_port_by_name(dp, argv[2], &port)) {
2338         unixctl_command_reply_error(conn, "unknown port");
2339     } else if (port->port_no == ODPP_LOCAL) {
2340         unixctl_command_reply_error(conn, "can't delete local port");
2341     } else {
2342         do_del_port(dp, port);
2343         unixctl_command_reply(conn, NULL);
2344     }
2345     ovs_mutex_unlock(&dp->port_mutex);
2346
2347     dp_netdev_unref(dp);
2348 }
2349
2350 static void
2351 dpif_dummy_register__(const char *type)
2352 {
2353     struct dpif_class *class;
2354
2355     class = xmalloc(sizeof *class);
2356     *class = dpif_netdev_class;
2357     class->type = xstrdup(type);
2358     dp_register_provider(class);
2359 }
2360
2361 void
2362 dpif_dummy_register(bool override)
2363 {
2364     if (override) {
2365         struct sset types;
2366         const char *type;
2367
2368         sset_init(&types);
2369         dp_enumerate_types(&types);
2370         SSET_FOR_EACH (type, &types) {
2371             if (!dp_unregister_provider(type)) {
2372                 dpif_dummy_register__(type);
2373             }
2374         }
2375         sset_destroy(&types);
2376     }
2377
2378     dpif_dummy_register__("dummy");
2379
2380     unixctl_command_register("dpif-dummy/change-port-number",
2381                              "DP PORT NEW-NUMBER",
2382                              3, 3, dpif_dummy_change_port_number, NULL);
2383     unixctl_command_register("dpif-dummy/delete-port", "DP PORT",
2384                              2, 2, dpif_dummy_delete_port, NULL);
2385 }