dc555ddde10afdb3779a22472b96d08c95f96631
[cascardo/ovs.git] / ofproto / ofproto-dpif.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
19 #include "ofproto/ofproto-dpif.h"
20 #include "ofproto/ofproto-provider.h"
21
22 #include <errno.h>
23
24 #include "bfd.h"
25 #include "bond.h"
26 #include "bundle.h"
27 #include "byte-order.h"
28 #include "connectivity.h"
29 #include "connmgr.h"
30 #include "coverage.h"
31 #include "cfm.h"
32 #include "dpif.h"
33 #include "dynamic-string.h"
34 #include "fail-open.h"
35 #include "guarded-list.h"
36 #include "hmapx.h"
37 #include "lacp.h"
38 #include "learn.h"
39 #include "mac-learning.h"
40 #include "meta-flow.h"
41 #include "multipath.h"
42 #include "netdev-vport.h"
43 #include "netdev.h"
44 #include "netlink.h"
45 #include "nx-match.h"
46 #include "odp-util.h"
47 #include "odp-execute.h"
48 #include "ofp-util.h"
49 #include "ofpbuf.h"
50 #include "ofp-actions.h"
51 #include "ofp-parse.h"
52 #include "ofp-print.h"
53 #include "ofproto-dpif-ipfix.h"
54 #include "ofproto-dpif-mirror.h"
55 #include "ofproto-dpif-monitor.h"
56 #include "ofproto-dpif-rid.h"
57 #include "ofproto-dpif-sflow.h"
58 #include "ofproto-dpif-upcall.h"
59 #include "ofproto-dpif-xlate.h"
60 #include "ovs-rcu.h"
61 #include "poll-loop.h"
62 #include "seq.h"
63 #include "simap.h"
64 #include "smap.h"
65 #include "timer.h"
66 #include "tunnel.h"
67 #include "unaligned.h"
68 #include "unixctl.h"
69 #include "vlan-bitmap.h"
70 #include "vlog.h"
71
72 VLOG_DEFINE_THIS_MODULE(ofproto_dpif);
73
74 COVERAGE_DEFINE(ofproto_dpif_expired);
75 COVERAGE_DEFINE(packet_in_overflow);
76
77 /* No bfd/cfm status change. */
78 #define NO_STATUS_CHANGE -1
79
80 struct flow_miss;
81
82 struct rule_dpif {
83     struct rule up;
84
85     /* These statistics:
86      *
87      *   - Do include packets and bytes from datapath flows which have not
88      *   recently been processed by a revalidator. */
89     struct ovs_mutex stats_mutex;
90     struct dpif_flow_stats stats OVS_GUARDED;
91 };
92
93 /* RULE_CAST() depends on this. */
94 BUILD_ASSERT_DECL(offsetof(struct rule_dpif, up) == 0);
95
96 static void rule_get_stats(struct rule *, uint64_t *packets, uint64_t *bytes,
97                            long long int *used);
98 static struct rule_dpif *rule_dpif_cast(const struct rule *);
99 static void rule_expire(struct rule_dpif *);
100
101 struct group_dpif {
102     struct ofgroup up;
103
104     /* These statistics:
105      *
106      *   - Do include packets and bytes from datapath flows which have not
107      *   recently been processed by a revalidator. */
108     struct ovs_mutex stats_mutex;
109     uint64_t packet_count OVS_GUARDED;  /* Number of packets received. */
110     uint64_t byte_count OVS_GUARDED;    /* Number of bytes received. */
111     struct bucket_counter *bucket_stats OVS_GUARDED;  /* Bucket statistics. */
112 };
113
114 struct ofbundle {
115     struct hmap_node hmap_node; /* In struct ofproto's "bundles" hmap. */
116     struct ofproto_dpif *ofproto; /* Owning ofproto. */
117     void *aux;                  /* Key supplied by ofproto's client. */
118     char *name;                 /* Identifier for log messages. */
119
120     /* Configuration. */
121     struct list ports;          /* Contains "struct ofport"s. */
122     enum port_vlan_mode vlan_mode; /* VLAN mode */
123     int vlan;                   /* -1=trunk port, else a 12-bit VLAN ID. */
124     unsigned long *trunks;      /* Bitmap of trunked VLANs, if 'vlan' == -1.
125                                  * NULL if all VLANs are trunked. */
126     struct lacp *lacp;          /* LACP if LACP is enabled, otherwise NULL. */
127     struct bond *bond;          /* Nonnull iff more than one port. */
128     bool use_priority_tags;     /* Use 802.1p tag for frames in VLAN 0? */
129
130     /* Status. */
131     bool floodable;          /* True if no port has OFPUTIL_PC_NO_FLOOD set. */
132 };
133
134 static void bundle_remove(struct ofport *);
135 static void bundle_update(struct ofbundle *);
136 static void bundle_destroy(struct ofbundle *);
137 static void bundle_del_port(struct ofport_dpif *);
138 static void bundle_run(struct ofbundle *);
139 static void bundle_wait(struct ofbundle *);
140
141 static void stp_run(struct ofproto_dpif *ofproto);
142 static void stp_wait(struct ofproto_dpif *ofproto);
143 static int set_stp_port(struct ofport *,
144                         const struct ofproto_port_stp_settings *);
145
146 struct ofport_dpif {
147     struct hmap_node odp_port_node; /* In dpif_backer's "odp_to_ofport_map". */
148     struct ofport up;
149
150     odp_port_t odp_port;
151     struct ofbundle *bundle;    /* Bundle that contains this port, if any. */
152     struct list bundle_node;    /* In struct ofbundle's "ports" list. */
153     struct cfm *cfm;            /* Connectivity Fault Management, if any. */
154     struct bfd *bfd;            /* BFD, if any. */
155     bool may_enable;            /* May be enabled in bonds. */
156     bool is_tunnel;             /* This port is a tunnel. */
157     bool is_layer3;             /* This is a layer 3 port. */
158     long long int carrier_seq;  /* Carrier status changes. */
159     struct ofport_dpif *peer;   /* Peer if patch port. */
160
161     /* Spanning tree. */
162     struct stp_port *stp_port;  /* Spanning Tree Protocol, if any. */
163     enum stp_state stp_state;   /* Always STP_DISABLED if STP not in use. */
164     long long int stp_state_entered;
165
166     /* Queue to DSCP mapping. */
167     struct ofproto_port_queue *qdscp;
168     size_t n_qdscp;
169
170     /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
171      *
172      * This is deprecated.  It is only for compatibility with broken device
173      * drivers in old versions of Linux that do not properly support VLANs when
174      * VLAN devices are not used.  When broken device drivers are no longer in
175      * widespread use, we will delete these interfaces. */
176     ofp_port_t realdev_ofp_port;
177     int vlandev_vid;
178 };
179
180 /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
181  *
182  * This is deprecated.  It is only for compatibility with broken device drivers
183  * in old versions of Linux that do not properly support VLANs when VLAN
184  * devices are not used.  When broken device drivers are no longer in
185  * widespread use, we will delete these interfaces. */
186 struct vlan_splinter {
187     struct hmap_node realdev_vid_node;
188     struct hmap_node vlandev_node;
189     ofp_port_t realdev_ofp_port;
190     ofp_port_t vlandev_ofp_port;
191     int vid;
192 };
193
194 static void vsp_remove(struct ofport_dpif *);
195 static void vsp_add(struct ofport_dpif *, ofp_port_t realdev_ofp_port, int vid);
196
197 static odp_port_t ofp_port_to_odp_port(const struct ofproto_dpif *,
198                                        ofp_port_t);
199
200 static ofp_port_t odp_port_to_ofp_port(const struct ofproto_dpif *,
201                                        odp_port_t);
202
203 static struct ofport_dpif *
204 ofport_dpif_cast(const struct ofport *ofport)
205 {
206     return ofport ? CONTAINER_OF(ofport, struct ofport_dpif, up) : NULL;
207 }
208
209 static void port_run(struct ofport_dpif *);
210 static int set_bfd(struct ofport *, const struct smap *);
211 static int set_cfm(struct ofport *, const struct cfm_settings *);
212 static void ofport_update_peer(struct ofport_dpif *);
213
214 struct dpif_completion {
215     struct list list_node;
216     struct ofoperation *op;
217 };
218
219 /* Reasons that we might need to revalidate every datapath flow, and
220  * corresponding coverage counters.
221  *
222  * A value of 0 means that there is no need to revalidate.
223  *
224  * It would be nice to have some cleaner way to integrate with coverage
225  * counters, but with only a few reasons I guess this is good enough for
226  * now. */
227 enum revalidate_reason {
228     REV_RECONFIGURE = 1,       /* Switch configuration changed. */
229     REV_STP,                   /* Spanning tree protocol port status change. */
230     REV_BOND,                  /* Bonding changed. */
231     REV_PORT_TOGGLED,          /* Port enabled or disabled by CFM, LACP, ...*/
232     REV_FLOW_TABLE,            /* Flow table changed. */
233     REV_MAC_LEARNING,          /* Mac learning changed. */
234 };
235 COVERAGE_DEFINE(rev_reconfigure);
236 COVERAGE_DEFINE(rev_stp);
237 COVERAGE_DEFINE(rev_bond);
238 COVERAGE_DEFINE(rev_port_toggled);
239 COVERAGE_DEFINE(rev_flow_table);
240 COVERAGE_DEFINE(rev_mac_learning);
241
242 /* Stores mapping between 'recirc_id' and 'ofproto-dpif'. */
243 struct dpif_backer_recirc_node {
244     struct hmap_node hmap_node;
245     struct ofproto_dpif *ofproto;
246     uint32_t recirc_id;
247 };
248
249 /* All datapaths of a given type share a single dpif backer instance. */
250 struct dpif_backer {
251     char *type;
252     int refcount;
253     struct dpif *dpif;
254     struct udpif *udpif;
255
256     struct ovs_rwlock odp_to_ofport_lock;
257     struct hmap odp_to_ofport_map OVS_GUARDED; /* Contains "struct ofport"s. */
258
259     struct simap tnl_backers;      /* Set of dpif ports backing tunnels. */
260
261     enum revalidate_reason need_revalidate; /* Revalidate all flows. */
262
263     bool recv_set_enable; /* Enables or disables receiving packets. */
264
265     /* Recirculation. */
266     struct recirc_id_pool *rid_pool;       /* Recirculation ID pool. */
267     struct hmap recirc_map;         /* Map of 'recirc_id's to 'ofproto's. */
268     struct ovs_mutex recirc_mutex;  /* Protects 'recirc_map'. */
269     bool enable_recirc;   /* True if the datapath supports recirculation */
270
271     /* True if the datapath supports variable-length
272      * OVS_USERSPACE_ATTR_USERDATA in OVS_ACTION_ATTR_USERSPACE actions.
273      * False if the datapath supports only 8-byte (or shorter) userdata. */
274     bool variable_length_userdata;
275
276     /* Maximum number of MPLS label stack entries that the datapath supports
277      * in a match */
278     size_t max_mpls_depth;
279 };
280
281 /* All existing ofproto_backer instances, indexed by ofproto->up.type. */
282 static struct shash all_dpif_backers = SHASH_INITIALIZER(&all_dpif_backers);
283
284 struct ofproto_dpif {
285     struct hmap_node all_ofproto_dpifs_node; /* In 'all_ofproto_dpifs'. */
286     struct ofproto up;
287     struct dpif_backer *backer;
288
289     uint64_t dump_seq; /* Last read of udpif_dump_seq(). */
290
291     /* Special OpenFlow rules. */
292     struct rule_dpif *miss_rule; /* Sends flow table misses to controller. */
293     struct rule_dpif *no_packet_in_rule; /* Drops flow table misses. */
294     struct rule_dpif *drop_frags_rule; /* Used in OFPC_FRAG_DROP mode. */
295
296     /* Bridging. */
297     struct netflow *netflow;
298     struct dpif_sflow *sflow;
299     struct dpif_ipfix *ipfix;
300     struct hmap bundles;        /* Contains "struct ofbundle"s. */
301     struct mac_learning *ml;
302     bool has_bonded_bundles;
303     bool lacp_enabled;
304     struct mbridge *mbridge;
305
306     struct ovs_mutex stats_mutex;
307     struct netdev_stats stats OVS_GUARDED; /* To account packets generated and
308                                             * consumed in userspace. */
309
310     /* Spanning tree. */
311     struct stp *stp;
312     long long int stp_last_tick;
313
314     /* VLAN splinters. */
315     struct ovs_mutex vsp_mutex;
316     struct hmap realdev_vid_map OVS_GUARDED; /* (realdev,vid) -> vlandev. */
317     struct hmap vlandev_map OVS_GUARDED;     /* vlandev -> (realdev,vid). */
318
319     /* Ports. */
320     struct sset ports;             /* Set of standard port names. */
321     struct sset ghost_ports;       /* Ports with no datapath port. */
322     struct sset port_poll_set;     /* Queued names for port_poll() reply. */
323     int port_poll_errno;           /* Last errno for port_poll() reply. */
324     uint64_t change_seq;           /* Connectivity status changes. */
325
326     /* Work queues. */
327     struct guarded_list pins;      /* Contains "struct ofputil_packet_in"s. */
328     struct seq *pins_seq;          /* For notifying 'pins' reception. */
329     uint64_t pins_seqno;
330 };
331
332 /* All existing ofproto_dpif instances, indexed by ->up.name. */
333 static struct hmap all_ofproto_dpifs = HMAP_INITIALIZER(&all_ofproto_dpifs);
334
335 static void ofproto_dpif_unixctl_init(void);
336
337 static inline struct ofproto_dpif *
338 ofproto_dpif_cast(const struct ofproto *ofproto)
339 {
340     ovs_assert(ofproto->ofproto_class == &ofproto_dpif_class);
341     return CONTAINER_OF(ofproto, struct ofproto_dpif, up);
342 }
343
344 size_t
345 ofproto_dpif_get_max_mpls_depth(const struct ofproto_dpif *ofproto)
346 {
347     return ofproto->backer->max_mpls_depth;
348 }
349
350 bool
351 ofproto_dpif_get_enable_recirc(const struct ofproto_dpif *ofproto)
352 {
353     return ofproto->backer->enable_recirc;
354 }
355
356 static struct ofport_dpif *get_ofp_port(const struct ofproto_dpif *ofproto,
357                                         ofp_port_t ofp_port);
358 static void ofproto_trace(struct ofproto_dpif *, struct flow *,
359                           const struct ofpbuf *packet,
360                           const struct ofpact[], size_t ofpacts_len,
361                           struct ds *);
362
363 /* Global variables. */
364 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
365
366 /* Initial mappings of port to bridge mappings. */
367 static struct shash init_ofp_ports = SHASH_INITIALIZER(&init_ofp_ports);
368
369 /* Executes 'fm'.  The caller retains ownership of 'fm' and everything in
370  * it. */
371 void
372 ofproto_dpif_flow_mod(struct ofproto_dpif *ofproto,
373                       struct ofputil_flow_mod *fm)
374 {
375     ofproto_flow_mod(&ofproto->up, fm);
376 }
377
378 /* Appends 'pin' to the queue of "packet ins" to be sent to the controller.
379  * Takes ownership of 'pin' and pin->packet. */
380 void
381 ofproto_dpif_send_packet_in(struct ofproto_dpif *ofproto,
382                             struct ofproto_packet_in *pin)
383 {
384     if (!guarded_list_push_back(&ofproto->pins, &pin->list_node, 1024)) {
385         COVERAGE_INC(packet_in_overflow);
386         free(CONST_CAST(void *, pin->up.packet));
387         free(pin);
388     }
389
390     /* Wakes up main thread for packet-in I/O. */
391     seq_change(ofproto->pins_seq);
392 }
393
394 /* The default "table-miss" behaviour for OpenFlow1.3+ is to drop the
395  * packet rather than to send the packet to the controller.
396  *
397  * This function returns false to indicate that a packet_in message
398  * for a "table-miss" should be sent to at least one controller.
399  * False otherwise. */
400 bool
401 ofproto_dpif_wants_packet_in_on_miss(struct ofproto_dpif *ofproto)
402 {
403     return connmgr_wants_packet_in_on_miss(ofproto->up.connmgr);
404 }
405 \f
406 /* Factory functions. */
407
408 static void
409 init(const struct shash *iface_hints)
410 {
411     struct shash_node *node;
412
413     /* Make a local copy, since we don't own 'iface_hints' elements. */
414     SHASH_FOR_EACH(node, iface_hints) {
415         const struct iface_hint *orig_hint = node->data;
416         struct iface_hint *new_hint = xmalloc(sizeof *new_hint);
417
418         new_hint->br_name = xstrdup(orig_hint->br_name);
419         new_hint->br_type = xstrdup(orig_hint->br_type);
420         new_hint->ofp_port = orig_hint->ofp_port;
421
422         shash_add(&init_ofp_ports, node->name, new_hint);
423     }
424 }
425
426 static void
427 enumerate_types(struct sset *types)
428 {
429     dp_enumerate_types(types);
430 }
431
432 static int
433 enumerate_names(const char *type, struct sset *names)
434 {
435     struct ofproto_dpif *ofproto;
436
437     sset_clear(names);
438     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
439         if (strcmp(type, ofproto->up.type)) {
440             continue;
441         }
442         sset_add(names, ofproto->up.name);
443     }
444
445     return 0;
446 }
447
448 static int
449 del(const char *type, const char *name)
450 {
451     struct dpif *dpif;
452     int error;
453
454     error = dpif_open(name, type, &dpif);
455     if (!error) {
456         error = dpif_delete(dpif);
457         dpif_close(dpif);
458     }
459     return error;
460 }
461 \f
462 static const char *
463 port_open_type(const char *datapath_type, const char *port_type)
464 {
465     return dpif_port_open_type(datapath_type, port_type);
466 }
467
468 /* Type functions. */
469
470 static void process_dpif_port_changes(struct dpif_backer *);
471 static void process_dpif_all_ports_changed(struct dpif_backer *);
472 static void process_dpif_port_change(struct dpif_backer *,
473                                      const char *devname);
474 static void process_dpif_port_error(struct dpif_backer *, int error);
475
476 static struct ofproto_dpif *
477 lookup_ofproto_dpif_by_port_name(const char *name)
478 {
479     struct ofproto_dpif *ofproto;
480
481     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
482         if (sset_contains(&ofproto->ports, name)) {
483             return ofproto;
484         }
485     }
486
487     return NULL;
488 }
489
490 static int
491 type_run(const char *type)
492 {
493     struct dpif_backer *backer;
494
495     backer = shash_find_data(&all_dpif_backers, type);
496     if (!backer) {
497         /* This is not necessarily a problem, since backers are only
498          * created on demand. */
499         return 0;
500     }
501
502     dpif_run(backer->dpif);
503
504     /* If vswitchd started with other_config:flow_restore_wait set as "true",
505      * and the configuration has now changed to "false", enable receiving
506      * packets from the datapath. */
507     if (!backer->recv_set_enable && !ofproto_get_flow_restore_wait()) {
508         int error;
509
510         backer->recv_set_enable = true;
511
512         error = dpif_recv_set(backer->dpif, backer->recv_set_enable);
513         if (error) {
514             VLOG_ERR("Failed to enable receiving packets in dpif.");
515             return error;
516         }
517         dpif_flow_flush(backer->dpif);
518         backer->need_revalidate = REV_RECONFIGURE;
519     }
520
521     if (backer->recv_set_enable) {
522         udpif_set_threads(backer->udpif, n_handlers, n_revalidators);
523     }
524
525     if (backer->need_revalidate) {
526         struct ofproto_dpif *ofproto;
527         struct simap_node *node;
528         struct simap tmp_backers;
529
530         /* Handle tunnel garbage collection. */
531         simap_init(&tmp_backers);
532         simap_swap(&backer->tnl_backers, &tmp_backers);
533
534         HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
535             struct ofport_dpif *iter;
536
537             if (backer != ofproto->backer) {
538                 continue;
539             }
540
541             HMAP_FOR_EACH (iter, up.hmap_node, &ofproto->up.ports) {
542                 char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
543                 const char *dp_port;
544
545                 if (!iter->is_tunnel) {
546                     continue;
547                 }
548
549                 dp_port = netdev_vport_get_dpif_port(iter->up.netdev,
550                                                      namebuf, sizeof namebuf);
551                 node = simap_find(&tmp_backers, dp_port);
552                 if (node) {
553                     simap_put(&backer->tnl_backers, dp_port, node->data);
554                     simap_delete(&tmp_backers, node);
555                     node = simap_find(&backer->tnl_backers, dp_port);
556                 } else {
557                     node = simap_find(&backer->tnl_backers, dp_port);
558                     if (!node) {
559                         odp_port_t odp_port = ODPP_NONE;
560
561                         if (!dpif_port_add(backer->dpif, iter->up.netdev,
562                                            &odp_port)) {
563                             simap_put(&backer->tnl_backers, dp_port,
564                                       odp_to_u32(odp_port));
565                             node = simap_find(&backer->tnl_backers, dp_port);
566                         }
567                     }
568                 }
569
570                 iter->odp_port = node ? u32_to_odp(node->data) : ODPP_NONE;
571                 if (tnl_port_reconfigure(iter, iter->up.netdev,
572                                          iter->odp_port)) {
573                     backer->need_revalidate = REV_RECONFIGURE;
574                 }
575             }
576         }
577
578         SIMAP_FOR_EACH (node, &tmp_backers) {
579             dpif_port_del(backer->dpif, u32_to_odp(node->data));
580         }
581         simap_destroy(&tmp_backers);
582
583         switch (backer->need_revalidate) {
584         case REV_RECONFIGURE:   COVERAGE_INC(rev_reconfigure);   break;
585         case REV_STP:           COVERAGE_INC(rev_stp);           break;
586         case REV_BOND:          COVERAGE_INC(rev_bond);          break;
587         case REV_PORT_TOGGLED:  COVERAGE_INC(rev_port_toggled);  break;
588         case REV_FLOW_TABLE:    COVERAGE_INC(rev_flow_table);    break;
589         case REV_MAC_LEARNING:  COVERAGE_INC(rev_mac_learning);  break;
590         }
591         backer->need_revalidate = 0;
592
593         HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
594             struct ofport_dpif *ofport;
595             struct ofbundle *bundle;
596
597             if (ofproto->backer != backer) {
598                 continue;
599             }
600
601             ovs_rwlock_wrlock(&xlate_rwlock);
602             xlate_ofproto_set(ofproto, ofproto->up.name,
603                               ofproto->backer->dpif, ofproto->miss_rule,
604                               ofproto->no_packet_in_rule, ofproto->ml,
605                               ofproto->stp, ofproto->mbridge,
606                               ofproto->sflow, ofproto->ipfix,
607                               ofproto->netflow, ofproto->up.frag_handling,
608                               ofproto->up.forward_bpdu,
609                               connmgr_has_in_band(ofproto->up.connmgr),
610                               ofproto->backer->enable_recirc,
611                               ofproto->backer->variable_length_userdata,
612                               ofproto->backer->max_mpls_depth);
613
614             HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
615                 xlate_bundle_set(ofproto, bundle, bundle->name,
616                                  bundle->vlan_mode, bundle->vlan,
617                                  bundle->trunks, bundle->use_priority_tags,
618                                  bundle->bond, bundle->lacp,
619                                  bundle->floodable);
620             }
621
622             HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
623                 int stp_port = ofport->stp_port
624                     ? stp_port_no(ofport->stp_port)
625                     : -1;
626                 xlate_ofport_set(ofproto, ofport->bundle, ofport,
627                                  ofport->up.ofp_port, ofport->odp_port,
628                                  ofport->up.netdev, ofport->cfm,
629                                  ofport->bfd, ofport->peer, stp_port,
630                                  ofport->qdscp, ofport->n_qdscp,
631                                  ofport->up.pp.config, ofport->up.pp.state,
632                                  ofport->is_tunnel, ofport->may_enable);
633             }
634             ovs_rwlock_unlock(&xlate_rwlock);
635         }
636
637         udpif_revalidate(backer->udpif);
638     }
639
640     process_dpif_port_changes(backer);
641
642     return 0;
643 }
644
645 /* Check for and handle port changes in 'backer''s dpif. */
646 static void
647 process_dpif_port_changes(struct dpif_backer *backer)
648 {
649     for (;;) {
650         char *devname;
651         int error;
652
653         error = dpif_port_poll(backer->dpif, &devname);
654         switch (error) {
655         case EAGAIN:
656             return;
657
658         case ENOBUFS:
659             process_dpif_all_ports_changed(backer);
660             break;
661
662         case 0:
663             process_dpif_port_change(backer, devname);
664             free(devname);
665             break;
666
667         default:
668             process_dpif_port_error(backer, error);
669             break;
670         }
671     }
672 }
673
674 static void
675 process_dpif_all_ports_changed(struct dpif_backer *backer)
676 {
677     struct ofproto_dpif *ofproto;
678     struct dpif_port dpif_port;
679     struct dpif_port_dump dump;
680     struct sset devnames;
681     const char *devname;
682
683     sset_init(&devnames);
684     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
685         if (ofproto->backer == backer) {
686             struct ofport *ofport;
687
688             HMAP_FOR_EACH (ofport, hmap_node, &ofproto->up.ports) {
689                 sset_add(&devnames, netdev_get_name(ofport->netdev));
690             }
691         }
692     }
693     DPIF_PORT_FOR_EACH (&dpif_port, &dump, backer->dpif) {
694         sset_add(&devnames, dpif_port.name);
695     }
696
697     SSET_FOR_EACH (devname, &devnames) {
698         process_dpif_port_change(backer, devname);
699     }
700     sset_destroy(&devnames);
701 }
702
703 static void
704 process_dpif_port_change(struct dpif_backer *backer, const char *devname)
705 {
706     struct ofproto_dpif *ofproto;
707     struct dpif_port port;
708
709     /* Don't report on the datapath's device. */
710     if (!strcmp(devname, dpif_base_name(backer->dpif))) {
711         return;
712     }
713
714     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node,
715                    &all_ofproto_dpifs) {
716         if (simap_contains(&ofproto->backer->tnl_backers, devname)) {
717             return;
718         }
719     }
720
721     ofproto = lookup_ofproto_dpif_by_port_name(devname);
722     if (dpif_port_query_by_name(backer->dpif, devname, &port)) {
723         /* The port was removed.  If we know the datapath,
724          * report it through poll_set().  If we don't, it may be
725          * notifying us of a removal we initiated, so ignore it.
726          * If there's a pending ENOBUFS, let it stand, since
727          * everything will be reevaluated. */
728         if (ofproto && ofproto->port_poll_errno != ENOBUFS) {
729             sset_add(&ofproto->port_poll_set, devname);
730             ofproto->port_poll_errno = 0;
731         }
732     } else if (!ofproto) {
733         /* The port was added, but we don't know with which
734          * ofproto we should associate it.  Delete it. */
735         dpif_port_del(backer->dpif, port.port_no);
736     } else {
737         struct ofport_dpif *ofport;
738
739         ofport = ofport_dpif_cast(shash_find_data(
740                                       &ofproto->up.port_by_name, devname));
741         if (ofport
742             && ofport->odp_port != port.port_no
743             && !odp_port_to_ofport(backer, port.port_no))
744         {
745             /* 'ofport''s datapath port number has changed from
746              * 'ofport->odp_port' to 'port.port_no'.  Update our internal data
747              * structures to match. */
748             ovs_rwlock_wrlock(&backer->odp_to_ofport_lock);
749             hmap_remove(&backer->odp_to_ofport_map, &ofport->odp_port_node);
750             ofport->odp_port = port.port_no;
751             hmap_insert(&backer->odp_to_ofport_map, &ofport->odp_port_node,
752                         hash_odp_port(port.port_no));
753             ovs_rwlock_unlock(&backer->odp_to_ofport_lock);
754             backer->need_revalidate = REV_RECONFIGURE;
755         }
756     }
757     dpif_port_destroy(&port);
758 }
759
760 /* Propagate 'error' to all ofprotos based on 'backer'. */
761 static void
762 process_dpif_port_error(struct dpif_backer *backer, int error)
763 {
764     struct ofproto_dpif *ofproto;
765
766     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
767         if (ofproto->backer == backer) {
768             sset_clear(&ofproto->port_poll_set);
769             ofproto->port_poll_errno = error;
770         }
771     }
772 }
773
774 static void
775 type_wait(const char *type)
776 {
777     struct dpif_backer *backer;
778
779     backer = shash_find_data(&all_dpif_backers, type);
780     if (!backer) {
781         /* This is not necessarily a problem, since backers are only
782          * created on demand. */
783         return;
784     }
785
786     dpif_wait(backer->dpif);
787 }
788 \f
789 /* Basic life-cycle. */
790
791 static int add_internal_flows(struct ofproto_dpif *);
792
793 static struct ofproto *
794 alloc(void)
795 {
796     struct ofproto_dpif *ofproto = xmalloc(sizeof *ofproto);
797     return &ofproto->up;
798 }
799
800 static void
801 dealloc(struct ofproto *ofproto_)
802 {
803     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
804     free(ofproto);
805 }
806
807 /* Called when 'ofproto' is destructed.  Checks for and clears any
808  * recirc_id leak. */
809 static void
810 dpif_backer_recirc_clear_ofproto(struct dpif_backer *backer,
811                                  struct ofproto_dpif *ofproto)
812 {
813     struct dpif_backer_recirc_node *node;
814
815     ovs_mutex_lock(&backer->recirc_mutex);
816     HMAP_FOR_EACH (node, hmap_node, &backer->recirc_map) {
817         if (node->ofproto == ofproto) {
818             VLOG_ERR("recirc_id %"PRIu32", not freed when ofproto (%s) "
819                      "is destructed", node->recirc_id, ofproto->up.name);
820             hmap_remove(&backer->recirc_map, &node->hmap_node);
821             ovsrcu_postpone(free, node);
822         }
823     }
824     ovs_mutex_unlock(&backer->recirc_mutex);
825 }
826
827 static void
828 close_dpif_backer(struct dpif_backer *backer)
829 {
830     ovs_assert(backer->refcount > 0);
831
832     if (--backer->refcount) {
833         return;
834     }
835
836     udpif_destroy(backer->udpif);
837
838     simap_destroy(&backer->tnl_backers);
839     ovs_rwlock_destroy(&backer->odp_to_ofport_lock);
840     hmap_destroy(&backer->odp_to_ofport_map);
841     shash_find_and_delete(&all_dpif_backers, backer->type);
842     recirc_id_pool_destroy(backer->rid_pool);
843     hmap_destroy(&backer->recirc_map);
844     ovs_mutex_destroy(&backer->recirc_mutex);
845     free(backer->type);
846     dpif_close(backer->dpif);
847     free(backer);
848 }
849
850 /* Datapath port slated for removal from datapath. */
851 struct odp_garbage {
852     struct list list_node;
853     odp_port_t odp_port;
854 };
855
856 static bool check_variable_length_userdata(struct dpif_backer *backer);
857 static size_t check_max_mpls_depth(struct dpif_backer *backer);
858 static bool check_recirc(struct dpif_backer *backer);
859
860 static int
861 open_dpif_backer(const char *type, struct dpif_backer **backerp)
862 {
863     struct dpif_backer *backer;
864     struct dpif_port_dump port_dump;
865     struct dpif_port port;
866     struct shash_node *node;
867     struct list garbage_list;
868     struct odp_garbage *garbage, *next;
869
870     struct sset names;
871     char *backer_name;
872     const char *name;
873     int error;
874
875     backer = shash_find_data(&all_dpif_backers, type);
876     if (backer) {
877         backer->refcount++;
878         *backerp = backer;
879         return 0;
880     }
881
882     backer_name = xasprintf("ovs-%s", type);
883
884     /* Remove any existing datapaths, since we assume we're the only
885      * userspace controlling the datapath. */
886     sset_init(&names);
887     dp_enumerate_names(type, &names);
888     SSET_FOR_EACH(name, &names) {
889         struct dpif *old_dpif;
890
891         /* Don't remove our backer if it exists. */
892         if (!strcmp(name, backer_name)) {
893             continue;
894         }
895
896         if (dpif_open(name, type, &old_dpif)) {
897             VLOG_WARN("couldn't open old datapath %s to remove it", name);
898         } else {
899             dpif_delete(old_dpif);
900             dpif_close(old_dpif);
901         }
902     }
903     sset_destroy(&names);
904
905     backer = xmalloc(sizeof *backer);
906
907     error = dpif_create_and_open(backer_name, type, &backer->dpif);
908     free(backer_name);
909     if (error) {
910         VLOG_ERR("failed to open datapath of type %s: %s", type,
911                  ovs_strerror(error));
912         free(backer);
913         return error;
914     }
915     backer->udpif = udpif_create(backer, backer->dpif);
916
917     backer->type = xstrdup(type);
918     backer->refcount = 1;
919     hmap_init(&backer->odp_to_ofport_map);
920     ovs_rwlock_init(&backer->odp_to_ofport_lock);
921     backer->need_revalidate = 0;
922     simap_init(&backer->tnl_backers);
923     backer->recv_set_enable = !ofproto_get_flow_restore_wait();
924     *backerp = backer;
925
926     if (backer->recv_set_enable) {
927         dpif_flow_flush(backer->dpif);
928     }
929
930     /* Loop through the ports already on the datapath and remove any
931      * that we don't need anymore. */
932     list_init(&garbage_list);
933     dpif_port_dump_start(&port_dump, backer->dpif);
934     while (dpif_port_dump_next(&port_dump, &port)) {
935         node = shash_find(&init_ofp_ports, port.name);
936         if (!node && strcmp(port.name, dpif_base_name(backer->dpif))) {
937             garbage = xmalloc(sizeof *garbage);
938             garbage->odp_port = port.port_no;
939             list_push_front(&garbage_list, &garbage->list_node);
940         }
941     }
942     dpif_port_dump_done(&port_dump);
943
944     LIST_FOR_EACH_SAFE (garbage, next, list_node, &garbage_list) {
945         dpif_port_del(backer->dpif, garbage->odp_port);
946         list_remove(&garbage->list_node);
947         free(garbage);
948     }
949
950     shash_add(&all_dpif_backers, type, backer);
951
952     backer->enable_recirc = check_recirc(backer);
953     backer->variable_length_userdata = check_variable_length_userdata(backer);
954     backer->max_mpls_depth = check_max_mpls_depth(backer);
955     backer->rid_pool = recirc_id_pool_create();
956     ovs_mutex_init(&backer->recirc_mutex);
957     hmap_init(&backer->recirc_map);
958
959     error = dpif_recv_set(backer->dpif, backer->recv_set_enable);
960     if (error) {
961         VLOG_ERR("failed to listen on datapath of type %s: %s",
962                  type, ovs_strerror(error));
963         close_dpif_backer(backer);
964         return error;
965     }
966
967     if (backer->recv_set_enable) {
968         udpif_set_threads(backer->udpif, n_handlers, n_revalidators);
969     }
970
971     return error;
972 }
973
974 /* Tests whether 'backer''s datapath supports recirculation.  Only newer
975  * datapaths support OVS_KEY_ATTR_RECIRC_ID in keys.  We need to disable some
976  * features on older datapaths that don't support this feature.
977  *
978  * Returns false if 'backer' definitely does not support recirculation, true if
979  * it seems to support recirculation or if at least the error we get is
980  * ambiguous. */
981 static bool
982 check_recirc(struct dpif_backer *backer)
983 {
984     struct flow flow;
985     struct odputil_keybuf keybuf;
986     struct ofpbuf key;
987     int error;
988     bool enable_recirc = false;
989
990     memset(&flow, 0, sizeof flow);
991     flow.recirc_id = 1;
992     flow.dp_hash = 1;
993
994     ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
995     odp_flow_key_from_flow(&key, &flow, NULL, 0);
996
997     error = dpif_flow_put(backer->dpif, DPIF_FP_CREATE,
998                           ofpbuf_data(&key), ofpbuf_size(&key), NULL, 0, NULL,
999                           0, NULL);
1000     if (error && error != EEXIST) {
1001         if (error != EINVAL) {
1002             VLOG_WARN("%s: Reciculation flow probe failed (%s)",
1003                       dpif_name(backer->dpif), ovs_strerror(error));
1004         }
1005         goto done;
1006     }
1007
1008     error = dpif_flow_del(backer->dpif, ofpbuf_data(&key), ofpbuf_size(&key),
1009                           NULL);
1010     if (error) {
1011         VLOG_WARN("%s: failed to delete recirculation feature probe flow",
1012                   dpif_name(backer->dpif));
1013     }
1014
1015     enable_recirc = true;
1016
1017 done:
1018     if (enable_recirc) {
1019         VLOG_INFO("%s: Datapath supports recirculation",
1020                   dpif_name(backer->dpif));
1021     } else {
1022         VLOG_INFO("%s: Datapath does not support recirculation",
1023                   dpif_name(backer->dpif));
1024     }
1025
1026     return enable_recirc;
1027 }
1028
1029 /* Tests whether 'backer''s datapath supports variable-length
1030  * OVS_USERSPACE_ATTR_USERDATA in OVS_ACTION_ATTR_USERSPACE actions.  We need
1031  * to disable some features on older datapaths that don't support this
1032  * feature.
1033  *
1034  * Returns false if 'backer' definitely does not support variable-length
1035  * userdata, true if it seems to support them or if at least the error we get
1036  * is ambiguous. */
1037 static bool
1038 check_variable_length_userdata(struct dpif_backer *backer)
1039 {
1040     struct eth_header *eth;
1041     struct ofpbuf actions;
1042     struct dpif_execute execute;
1043     struct ofpbuf packet;
1044     size_t start;
1045     int error;
1046
1047     /* Compose a userspace action that will cause an ERANGE error on older
1048      * datapaths that don't support variable-length userdata.
1049      *
1050      * We really test for using userdata longer than 8 bytes, but older
1051      * datapaths accepted these, silently truncating the userdata to 8 bytes.
1052      * The same older datapaths rejected userdata shorter than 8 bytes, so we
1053      * test for that instead as a proxy for longer userdata support. */
1054     ofpbuf_init(&actions, 64);
1055     start = nl_msg_start_nested(&actions, OVS_ACTION_ATTR_USERSPACE);
1056     nl_msg_put_u32(&actions, OVS_USERSPACE_ATTR_PID,
1057                    dpif_port_get_pid(backer->dpif, ODPP_NONE, 0));
1058     nl_msg_put_unspec_zero(&actions, OVS_USERSPACE_ATTR_USERDATA, 4);
1059     nl_msg_end_nested(&actions, start);
1060
1061     /* Compose a dummy ethernet packet. */
1062     ofpbuf_init(&packet, ETH_HEADER_LEN);
1063     eth = ofpbuf_put_zeros(&packet, ETH_HEADER_LEN);
1064     eth->eth_type = htons(0x1234);
1065
1066     /* Execute the actions.  On older datapaths this fails with ERANGE, on
1067      * newer datapaths it succeeds. */
1068     execute.actions = ofpbuf_data(&actions);
1069     execute.actions_len = ofpbuf_size(&actions);
1070     execute.packet = &packet;
1071     execute.md = PKT_METADATA_INITIALIZER(0);
1072     execute.needs_help = false;
1073
1074     error = dpif_execute(backer->dpif, &execute);
1075
1076     ofpbuf_uninit(&packet);
1077     ofpbuf_uninit(&actions);
1078
1079     switch (error) {
1080     case 0:
1081         return true;
1082
1083     case ERANGE:
1084         /* Variable-length userdata is not supported. */
1085         VLOG_WARN("%s: datapath does not support variable-length userdata "
1086                   "feature (needs Linux 3.10+ or kernel module from OVS "
1087                   "1..11+).  The NXAST_SAMPLE action will be ignored.",
1088                   dpif_name(backer->dpif));
1089         return false;
1090
1091     default:
1092         /* Something odd happened.  We're not sure whether variable-length
1093          * userdata is supported.  Default to "yes". */
1094         VLOG_WARN("%s: variable-length userdata feature probe failed (%s)",
1095                   dpif_name(backer->dpif), ovs_strerror(error));
1096         return true;
1097     }
1098 }
1099
1100 /* Tests the MPLS label stack depth supported by 'backer''s datapath.
1101  *
1102  * Returns the number of elements in a struct flow's mpls_lse field
1103  * if the datapath supports at least that many entries in an
1104  * MPLS label stack.
1105  * Otherwise returns the number of MPLS push actions supported by
1106  * the datapath. */
1107 static size_t
1108 check_max_mpls_depth(struct dpif_backer *backer)
1109 {
1110     struct flow flow;
1111     int n;
1112
1113     for (n = 0; n < FLOW_MAX_MPLS_LABELS; n++) {
1114         struct odputil_keybuf keybuf;
1115         struct ofpbuf key;
1116         int error;
1117
1118         memset(&flow, 0, sizeof flow);
1119         flow.dl_type = htons(ETH_TYPE_MPLS);
1120         flow_set_mpls_bos(&flow, n, 1);
1121
1122         ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
1123         odp_flow_key_from_flow(&key, &flow, NULL, 0);
1124
1125         error = dpif_flow_put(backer->dpif, DPIF_FP_CREATE,
1126                               ofpbuf_data(&key), ofpbuf_size(&key), NULL, 0, NULL, 0, NULL);
1127         if (error && error != EEXIST) {
1128             if (error != EINVAL) {
1129                 VLOG_WARN("%s: MPLS stack length feature probe failed (%s)",
1130                           dpif_name(backer->dpif), ovs_strerror(error));
1131             }
1132             break;
1133         }
1134
1135         error = dpif_flow_del(backer->dpif, ofpbuf_data(&key), ofpbuf_size(&key), NULL);
1136         if (error) {
1137             VLOG_WARN("%s: failed to delete MPLS feature probe flow",
1138                       dpif_name(backer->dpif));
1139         }
1140     }
1141
1142     VLOG_INFO("%s: MPLS label stack length probed as %d",
1143               dpif_name(backer->dpif), n);
1144     return n;
1145 }
1146
1147 static int
1148 construct(struct ofproto *ofproto_)
1149 {
1150     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1151     struct shash_node *node, *next;
1152     int error;
1153
1154     error = open_dpif_backer(ofproto->up.type, &ofproto->backer);
1155     if (error) {
1156         return error;
1157     }
1158
1159     ofproto->netflow = NULL;
1160     ofproto->sflow = NULL;
1161     ofproto->ipfix = NULL;
1162     ofproto->stp = NULL;
1163     ofproto->dump_seq = 0;
1164     hmap_init(&ofproto->bundles);
1165     ofproto->ml = mac_learning_create(MAC_ENTRY_DEFAULT_IDLE_TIME);
1166     ofproto->mbridge = mbridge_create();
1167     ofproto->has_bonded_bundles = false;
1168     ofproto->lacp_enabled = false;
1169     ovs_mutex_init_adaptive(&ofproto->stats_mutex);
1170     ovs_mutex_init(&ofproto->vsp_mutex);
1171
1172     guarded_list_init(&ofproto->pins);
1173
1174     ofproto_dpif_unixctl_init();
1175
1176     hmap_init(&ofproto->vlandev_map);
1177     hmap_init(&ofproto->realdev_vid_map);
1178
1179     sset_init(&ofproto->ports);
1180     sset_init(&ofproto->ghost_ports);
1181     sset_init(&ofproto->port_poll_set);
1182     ofproto->port_poll_errno = 0;
1183     ofproto->change_seq = 0;
1184     ofproto->pins_seq = seq_create();
1185     ofproto->pins_seqno = seq_read(ofproto->pins_seq);
1186
1187
1188     SHASH_FOR_EACH_SAFE (node, next, &init_ofp_ports) {
1189         struct iface_hint *iface_hint = node->data;
1190
1191         if (!strcmp(iface_hint->br_name, ofproto->up.name)) {
1192             /* Check if the datapath already has this port. */
1193             if (dpif_port_exists(ofproto->backer->dpif, node->name)) {
1194                 sset_add(&ofproto->ports, node->name);
1195             }
1196
1197             free(iface_hint->br_name);
1198             free(iface_hint->br_type);
1199             free(iface_hint);
1200             shash_delete(&init_ofp_ports, node);
1201         }
1202     }
1203
1204     hmap_insert(&all_ofproto_dpifs, &ofproto->all_ofproto_dpifs_node,
1205                 hash_string(ofproto->up.name, 0));
1206     memset(&ofproto->stats, 0, sizeof ofproto->stats);
1207
1208     ofproto_init_tables(ofproto_, N_TABLES);
1209     error = add_internal_flows(ofproto);
1210
1211     ofproto->up.tables[TBL_INTERNAL].flags = OFTABLE_HIDDEN | OFTABLE_READONLY;
1212
1213     return error;
1214 }
1215
1216 static int
1217 add_internal_miss_flow(struct ofproto_dpif *ofproto, int id,
1218                   const struct ofpbuf *ofpacts, struct rule_dpif **rulep)
1219 {
1220     struct match match;
1221     int error;
1222     struct rule *rule;
1223
1224     match_init_catchall(&match);
1225     match_set_reg(&match, 0, id);
1226
1227     error = ofproto_dpif_add_internal_flow(ofproto, &match, 0, ofpacts, &rule);
1228     *rulep = error ? NULL : rule_dpif_cast(rule);
1229
1230     return error;
1231 }
1232
1233 static int
1234 add_internal_flows(struct ofproto_dpif *ofproto)
1235 {
1236     struct ofpact_controller *controller;
1237     uint64_t ofpacts_stub[128 / 8];
1238     struct ofpbuf ofpacts;
1239     struct rule *unused_rulep OVS_UNUSED;
1240     struct ofpact_resubmit *resubmit;
1241     struct match match;
1242     int error;
1243     int id;
1244
1245     ofpbuf_use_stack(&ofpacts, ofpacts_stub, sizeof ofpacts_stub);
1246     id = 1;
1247
1248     controller = ofpact_put_CONTROLLER(&ofpacts);
1249     controller->max_len = UINT16_MAX;
1250     controller->controller_id = 0;
1251     controller->reason = OFPR_NO_MATCH;
1252     ofpact_pad(&ofpacts);
1253
1254     error = add_internal_miss_flow(ofproto, id++, &ofpacts,
1255                                    &ofproto->miss_rule);
1256     if (error) {
1257         return error;
1258     }
1259
1260     ofpbuf_clear(&ofpacts);
1261     error = add_internal_miss_flow(ofproto, id++, &ofpacts,
1262                                    &ofproto->no_packet_in_rule);
1263     if (error) {
1264         return error;
1265     }
1266
1267     error = add_internal_miss_flow(ofproto, id++, &ofpacts,
1268                                    &ofproto->drop_frags_rule);
1269     if (error) {
1270         return error;
1271     }
1272
1273     /* Drop any run away non-recirc rule lookups. Recirc_id has to be
1274      * zero when reaching this rule.
1275      *
1276      * (priority=2), recirc_id=0, actions=drop
1277      */
1278     ofpbuf_clear(&ofpacts);
1279     match_init_catchall(&match);
1280     match_set_recirc_id(&match, 0);
1281     error = ofproto_dpif_add_internal_flow(ofproto, &match, 2, &ofpacts,
1282                                            &unused_rulep);
1283     if (error) {
1284         return error;
1285     }
1286
1287     /* Continue rule lookups for not-matched recirc rules from table 0.
1288      *
1289      * (priority=1), actions=resubmit(, 0)
1290      */
1291     resubmit = ofpact_put_RESUBMIT(&ofpacts);
1292     resubmit->ofpact.compat = 0;
1293     resubmit->in_port = OFPP_IN_PORT;
1294     resubmit->table_id = 0;
1295
1296     match_init_catchall(&match);
1297
1298     error = ofproto_dpif_add_internal_flow(ofproto, &match, 1, &ofpacts,
1299                                            &unused_rulep);
1300
1301     return error;
1302 }
1303
1304 static void
1305 destruct(struct ofproto *ofproto_)
1306 {
1307     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1308     struct rule_dpif *rule, *next_rule;
1309     struct ofproto_packet_in *pin, *next_pin;
1310     struct oftable *table;
1311     struct list pins;
1312
1313     ofproto->backer->need_revalidate = REV_RECONFIGURE;
1314     ovs_rwlock_wrlock(&xlate_rwlock);
1315     xlate_remove_ofproto(ofproto);
1316     ovs_rwlock_unlock(&xlate_rwlock);
1317
1318     /* Ensure that the upcall processing threads have no remaining references
1319      * to the ofproto or anything in it. */
1320     udpif_synchronize(ofproto->backer->udpif);
1321
1322     hmap_remove(&all_ofproto_dpifs, &ofproto->all_ofproto_dpifs_node);
1323
1324     OFPROTO_FOR_EACH_TABLE (table, &ofproto->up) {
1325         struct cls_cursor cursor;
1326
1327         fat_rwlock_rdlock(&table->cls.rwlock);
1328         cls_cursor_init(&cursor, &table->cls, NULL);
1329         fat_rwlock_unlock(&table->cls.rwlock);
1330         CLS_CURSOR_FOR_EACH_SAFE (rule, next_rule, up.cr, &cursor) {
1331             ofproto_rule_delete(&ofproto->up, &rule->up);
1332         }
1333     }
1334
1335     guarded_list_pop_all(&ofproto->pins, &pins);
1336     LIST_FOR_EACH_SAFE (pin, next_pin, list_node, &pins) {
1337         list_remove(&pin->list_node);
1338         free(CONST_CAST(void *, pin->up.packet));
1339         free(pin);
1340     }
1341     guarded_list_destroy(&ofproto->pins);
1342
1343     dpif_backer_recirc_clear_ofproto(ofproto->backer, ofproto);
1344
1345     mbridge_unref(ofproto->mbridge);
1346
1347     netflow_unref(ofproto->netflow);
1348     dpif_sflow_unref(ofproto->sflow);
1349     hmap_destroy(&ofproto->bundles);
1350     mac_learning_unref(ofproto->ml);
1351
1352     hmap_destroy(&ofproto->vlandev_map);
1353     hmap_destroy(&ofproto->realdev_vid_map);
1354
1355     sset_destroy(&ofproto->ports);
1356     sset_destroy(&ofproto->ghost_ports);
1357     sset_destroy(&ofproto->port_poll_set);
1358
1359     ovs_mutex_destroy(&ofproto->stats_mutex);
1360     ovs_mutex_destroy(&ofproto->vsp_mutex);
1361
1362     seq_destroy(ofproto->pins_seq);
1363
1364     close_dpif_backer(ofproto->backer);
1365 }
1366
1367 static int
1368 run(struct ofproto *ofproto_)
1369 {
1370     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1371     uint64_t new_seq, new_dump_seq;
1372
1373     if (mbridge_need_revalidate(ofproto->mbridge)) {
1374         ofproto->backer->need_revalidate = REV_RECONFIGURE;
1375         ovs_rwlock_wrlock(&ofproto->ml->rwlock);
1376         mac_learning_flush(ofproto->ml);
1377         ovs_rwlock_unlock(&ofproto->ml->rwlock);
1378     }
1379
1380     /* Always updates the ofproto->pins_seqno to avoid frequent wakeup during
1381      * flow restore.  Even though nothing is processed during flow restore,
1382      * all queued 'pins' will be handled immediately when flow restore
1383      * completes. */
1384     ofproto->pins_seqno = seq_read(ofproto->pins_seq);
1385
1386     /* Do not perform any periodic activity required by 'ofproto' while
1387      * waiting for flow restore to complete. */
1388     if (!ofproto_get_flow_restore_wait()) {
1389         struct ofproto_packet_in *pin, *next_pin;
1390         struct list pins;
1391
1392         guarded_list_pop_all(&ofproto->pins, &pins);
1393         LIST_FOR_EACH_SAFE (pin, next_pin, list_node, &pins) {
1394             connmgr_send_packet_in(ofproto->up.connmgr, pin);
1395             list_remove(&pin->list_node);
1396             free(CONST_CAST(void *, pin->up.packet));
1397             free(pin);
1398         }
1399     }
1400
1401     if (ofproto->netflow) {
1402         netflow_run(ofproto->netflow);
1403     }
1404     if (ofproto->sflow) {
1405         dpif_sflow_run(ofproto->sflow);
1406     }
1407     if (ofproto->ipfix) {
1408         dpif_ipfix_run(ofproto->ipfix);
1409     }
1410
1411     new_seq = seq_read(connectivity_seq_get());
1412     if (ofproto->change_seq != new_seq) {
1413         struct ofport_dpif *ofport;
1414
1415         HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
1416             port_run(ofport);
1417         }
1418
1419         ofproto->change_seq = new_seq;
1420     }
1421     if (ofproto->lacp_enabled || ofproto->has_bonded_bundles) {
1422         struct ofbundle *bundle;
1423
1424         HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
1425             bundle_run(bundle);
1426         }
1427     }
1428
1429     stp_run(ofproto);
1430     ovs_rwlock_wrlock(&ofproto->ml->rwlock);
1431     if (mac_learning_run(ofproto->ml)) {
1432         ofproto->backer->need_revalidate = REV_MAC_LEARNING;
1433     }
1434     ovs_rwlock_unlock(&ofproto->ml->rwlock);
1435
1436     new_dump_seq = seq_read(udpif_dump_seq(ofproto->backer->udpif));
1437     if (ofproto->dump_seq != new_dump_seq) {
1438         struct rule *rule, *next_rule;
1439
1440         /* We know stats are relatively fresh, so now is a good time to do some
1441          * periodic work. */
1442         ofproto->dump_seq = new_dump_seq;
1443
1444         /* Expire OpenFlow flows whose idle_timeout or hard_timeout
1445          * has passed. */
1446         ovs_mutex_lock(&ofproto_mutex);
1447         LIST_FOR_EACH_SAFE (rule, next_rule, expirable,
1448                             &ofproto->up.expirable) {
1449             rule_expire(rule_dpif_cast(rule));
1450         }
1451         ovs_mutex_unlock(&ofproto_mutex);
1452
1453         /* All outstanding data in existing flows has been accounted, so it's a
1454          * good time to do bond rebalancing. */
1455         if (ofproto->has_bonded_bundles) {
1456             struct ofbundle *bundle;
1457
1458             HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
1459                 if (bundle->bond) {
1460                     bond_rebalance(bundle->bond);
1461                 }
1462             }
1463         }
1464     }
1465
1466     return 0;
1467 }
1468
1469 static void
1470 wait(struct ofproto *ofproto_)
1471 {
1472     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1473
1474     if (ofproto_get_flow_restore_wait()) {
1475         return;
1476     }
1477
1478     if (ofproto->sflow) {
1479         dpif_sflow_wait(ofproto->sflow);
1480     }
1481     if (ofproto->ipfix) {
1482         dpif_ipfix_wait(ofproto->ipfix);
1483     }
1484     if (ofproto->lacp_enabled || ofproto->has_bonded_bundles) {
1485         struct ofbundle *bundle;
1486
1487         HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) {
1488             bundle_wait(bundle);
1489         }
1490     }
1491     if (ofproto->netflow) {
1492         netflow_wait(ofproto->netflow);
1493     }
1494     ovs_rwlock_rdlock(&ofproto->ml->rwlock);
1495     mac_learning_wait(ofproto->ml);
1496     ovs_rwlock_unlock(&ofproto->ml->rwlock);
1497     stp_wait(ofproto);
1498     if (ofproto->backer->need_revalidate) {
1499         /* Shouldn't happen, but if it does just go around again. */
1500         VLOG_DBG_RL(&rl, "need revalidate in ofproto_wait_cb()");
1501         poll_immediate_wake();
1502     }
1503
1504     seq_wait(udpif_dump_seq(ofproto->backer->udpif), ofproto->dump_seq);
1505     seq_wait(ofproto->pins_seq, ofproto->pins_seqno);
1506 }
1507
1508 static void
1509 type_get_memory_usage(const char *type, struct simap *usage)
1510 {
1511     struct dpif_backer *backer;
1512
1513     backer = shash_find_data(&all_dpif_backers, type);
1514     if (backer) {
1515         udpif_get_memory_usage(backer->udpif, usage);
1516     }
1517 }
1518
1519 static void
1520 flush(struct ofproto *ofproto_)
1521 {
1522     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1523     struct dpif_backer *backer = ofproto->backer;
1524
1525     if (backer) {
1526         udpif_flush(backer->udpif);
1527     }
1528 }
1529
1530 static void
1531 get_features(struct ofproto *ofproto_ OVS_UNUSED,
1532              bool *arp_match_ip, enum ofputil_action_bitmap *actions)
1533 {
1534     *arp_match_ip = true;
1535     *actions = (OFPUTIL_A_OUTPUT |
1536                 OFPUTIL_A_SET_VLAN_VID |
1537                 OFPUTIL_A_SET_VLAN_PCP |
1538                 OFPUTIL_A_STRIP_VLAN |
1539                 OFPUTIL_A_SET_DL_SRC |
1540                 OFPUTIL_A_SET_DL_DST |
1541                 OFPUTIL_A_SET_NW_SRC |
1542                 OFPUTIL_A_SET_NW_DST |
1543                 OFPUTIL_A_SET_NW_TOS |
1544                 OFPUTIL_A_SET_TP_SRC |
1545                 OFPUTIL_A_SET_TP_DST |
1546                 OFPUTIL_A_ENQUEUE);
1547 }
1548
1549 static void
1550 get_tables(struct ofproto *ofproto_, struct ofp12_table_stats *ots)
1551 {
1552     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1553     struct dpif_dp_stats s;
1554     uint64_t n_miss, n_no_pkt_in, n_bytes, n_dropped_frags;
1555     uint64_t n_lookup;
1556     long long int used;
1557
1558     strcpy(ots->name, "classifier");
1559
1560     dpif_get_dp_stats(ofproto->backer->dpif, &s);
1561     rule_get_stats(&ofproto->miss_rule->up, &n_miss, &n_bytes, &used);
1562     rule_get_stats(&ofproto->no_packet_in_rule->up, &n_no_pkt_in, &n_bytes,
1563                    &used);
1564     rule_get_stats(&ofproto->drop_frags_rule->up, &n_dropped_frags, &n_bytes,
1565                    &used);
1566     n_lookup = s.n_hit + s.n_missed - n_dropped_frags;
1567     ots->lookup_count = htonll(n_lookup);
1568     ots->matched_count = htonll(n_lookup - n_miss - n_no_pkt_in);
1569 }
1570
1571 static struct ofport *
1572 port_alloc(void)
1573 {
1574     struct ofport_dpif *port = xmalloc(sizeof *port);
1575     return &port->up;
1576 }
1577
1578 static void
1579 port_dealloc(struct ofport *port_)
1580 {
1581     struct ofport_dpif *port = ofport_dpif_cast(port_);
1582     free(port);
1583 }
1584
1585 static int
1586 port_construct(struct ofport *port_)
1587 {
1588     struct ofport_dpif *port = ofport_dpif_cast(port_);
1589     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
1590     const struct netdev *netdev = port->up.netdev;
1591     char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
1592     struct dpif_port dpif_port;
1593     int error;
1594
1595     ofproto->backer->need_revalidate = REV_RECONFIGURE;
1596     port->bundle = NULL;
1597     port->cfm = NULL;
1598     port->bfd = NULL;
1599     port->may_enable = true;
1600     port->stp_port = NULL;
1601     port->stp_state = STP_DISABLED;
1602     port->is_tunnel = false;
1603     port->peer = NULL;
1604     port->qdscp = NULL;
1605     port->n_qdscp = 0;
1606     port->realdev_ofp_port = 0;
1607     port->vlandev_vid = 0;
1608     port->carrier_seq = netdev_get_carrier_resets(netdev);
1609     port->is_layer3 = netdev_vport_is_layer3(netdev);
1610
1611     if (netdev_vport_is_patch(netdev)) {
1612         /* By bailing out here, we don't submit the port to the sFlow module
1613          * to be considered for counter polling export.  This is correct
1614          * because the patch port represents an interface that sFlow considers
1615          * to be "internal" to the switch as a whole, and therefore not an
1616          * candidate for counter polling. */
1617         port->odp_port = ODPP_NONE;
1618         ofport_update_peer(port);
1619         return 0;
1620     }
1621
1622     error = dpif_port_query_by_name(ofproto->backer->dpif,
1623                                     netdev_vport_get_dpif_port(netdev, namebuf,
1624                                                                sizeof namebuf),
1625                                     &dpif_port);
1626     if (error) {
1627         return error;
1628     }
1629
1630     port->odp_port = dpif_port.port_no;
1631
1632     if (netdev_get_tunnel_config(netdev)) {
1633         tnl_port_add(port, port->up.netdev, port->odp_port);
1634         port->is_tunnel = true;
1635     } else {
1636         /* Sanity-check that a mapping doesn't already exist.  This
1637          * shouldn't happen for non-tunnel ports. */
1638         if (odp_port_to_ofp_port(ofproto, port->odp_port) != OFPP_NONE) {
1639             VLOG_ERR("port %s already has an OpenFlow port number",
1640                      dpif_port.name);
1641             dpif_port_destroy(&dpif_port);
1642             return EBUSY;
1643         }
1644
1645         ovs_rwlock_wrlock(&ofproto->backer->odp_to_ofport_lock);
1646         hmap_insert(&ofproto->backer->odp_to_ofport_map, &port->odp_port_node,
1647                     hash_odp_port(port->odp_port));
1648         ovs_rwlock_unlock(&ofproto->backer->odp_to_ofport_lock);
1649     }
1650     dpif_port_destroy(&dpif_port);
1651
1652     if (ofproto->sflow) {
1653         dpif_sflow_add_port(ofproto->sflow, port_, port->odp_port);
1654     }
1655
1656     return 0;
1657 }
1658
1659 static void
1660 port_destruct(struct ofport *port_)
1661 {
1662     struct ofport_dpif *port = ofport_dpif_cast(port_);
1663     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
1664     const char *devname = netdev_get_name(port->up.netdev);
1665     char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
1666     const char *dp_port_name;
1667
1668     ofproto->backer->need_revalidate = REV_RECONFIGURE;
1669     ovs_rwlock_wrlock(&xlate_rwlock);
1670     xlate_ofport_remove(port);
1671     ovs_rwlock_unlock(&xlate_rwlock);
1672
1673     dp_port_name = netdev_vport_get_dpif_port(port->up.netdev, namebuf,
1674                                               sizeof namebuf);
1675     if (dpif_port_exists(ofproto->backer->dpif, dp_port_name)) {
1676         /* The underlying device is still there, so delete it.  This
1677          * happens when the ofproto is being destroyed, since the caller
1678          * assumes that removal of attached ports will happen as part of
1679          * destruction. */
1680         if (!port->is_tunnel) {
1681             dpif_port_del(ofproto->backer->dpif, port->odp_port);
1682         }
1683     }
1684
1685     if (port->peer) {
1686         port->peer->peer = NULL;
1687         port->peer = NULL;
1688     }
1689
1690     if (port->odp_port != ODPP_NONE && !port->is_tunnel) {
1691         ovs_rwlock_wrlock(&ofproto->backer->odp_to_ofport_lock);
1692         hmap_remove(&ofproto->backer->odp_to_ofport_map, &port->odp_port_node);
1693         ovs_rwlock_unlock(&ofproto->backer->odp_to_ofport_lock);
1694     }
1695
1696     tnl_port_del(port);
1697     sset_find_and_delete(&ofproto->ports, devname);
1698     sset_find_and_delete(&ofproto->ghost_ports, devname);
1699     bundle_remove(port_);
1700     set_cfm(port_, NULL);
1701     set_bfd(port_, NULL);
1702     if (port->stp_port) {
1703         stp_port_disable(port->stp_port);
1704     }
1705     if (ofproto->sflow) {
1706         dpif_sflow_del_port(ofproto->sflow, port->odp_port);
1707     }
1708
1709     free(port->qdscp);
1710 }
1711
1712 static void
1713 port_modified(struct ofport *port_)
1714 {
1715     struct ofport_dpif *port = ofport_dpif_cast(port_);
1716
1717     if (port->bundle && port->bundle->bond) {
1718         bond_slave_set_netdev(port->bundle->bond, port, port->up.netdev);
1719     }
1720
1721     if (port->cfm) {
1722         cfm_set_netdev(port->cfm, port->up.netdev);
1723     }
1724
1725     if (port->bfd) {
1726         bfd_set_netdev(port->bfd, port->up.netdev);
1727     }
1728
1729     ofproto_dpif_monitor_port_update(port, port->bfd, port->cfm,
1730                                      port->up.pp.hw_addr);
1731
1732     if (port->is_tunnel && tnl_port_reconfigure(port, port->up.netdev,
1733                                                 port->odp_port)) {
1734         ofproto_dpif_cast(port->up.ofproto)->backer->need_revalidate =
1735             REV_RECONFIGURE;
1736     }
1737
1738     ofport_update_peer(port);
1739 }
1740
1741 static void
1742 port_reconfigured(struct ofport *port_, enum ofputil_port_config old_config)
1743 {
1744     struct ofport_dpif *port = ofport_dpif_cast(port_);
1745     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
1746     enum ofputil_port_config changed = old_config ^ port->up.pp.config;
1747
1748     if (changed & (OFPUTIL_PC_NO_RECV | OFPUTIL_PC_NO_RECV_STP |
1749                    OFPUTIL_PC_NO_FWD | OFPUTIL_PC_NO_FLOOD |
1750                    OFPUTIL_PC_NO_PACKET_IN)) {
1751         ofproto->backer->need_revalidate = REV_RECONFIGURE;
1752
1753         if (changed & OFPUTIL_PC_NO_FLOOD && port->bundle) {
1754             bundle_update(port->bundle);
1755         }
1756     }
1757 }
1758
1759 static int
1760 set_sflow(struct ofproto *ofproto_,
1761           const struct ofproto_sflow_options *sflow_options)
1762 {
1763     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1764     struct dpif_sflow *ds = ofproto->sflow;
1765
1766     if (sflow_options) {
1767         if (!ds) {
1768             struct ofport_dpif *ofport;
1769
1770             ds = ofproto->sflow = dpif_sflow_create();
1771             HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
1772                 dpif_sflow_add_port(ds, &ofport->up, ofport->odp_port);
1773             }
1774             ofproto->backer->need_revalidate = REV_RECONFIGURE;
1775         }
1776         dpif_sflow_set_options(ds, sflow_options);
1777     } else {
1778         if (ds) {
1779             dpif_sflow_unref(ds);
1780             ofproto->backer->need_revalidate = REV_RECONFIGURE;
1781             ofproto->sflow = NULL;
1782         }
1783     }
1784     return 0;
1785 }
1786
1787 static int
1788 set_ipfix(
1789     struct ofproto *ofproto_,
1790     const struct ofproto_ipfix_bridge_exporter_options *bridge_exporter_options,
1791     const struct ofproto_ipfix_flow_exporter_options *flow_exporters_options,
1792     size_t n_flow_exporters_options)
1793 {
1794     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1795     struct dpif_ipfix *di = ofproto->ipfix;
1796     bool has_options = bridge_exporter_options || flow_exporters_options;
1797
1798     if (has_options && !di) {
1799         di = ofproto->ipfix = dpif_ipfix_create();
1800     }
1801
1802     if (di) {
1803         /* Call set_options in any case to cleanly flush the flow
1804          * caches in the last exporters that are to be destroyed. */
1805         dpif_ipfix_set_options(
1806             di, bridge_exporter_options, flow_exporters_options,
1807             n_flow_exporters_options);
1808
1809         if (!has_options) {
1810             dpif_ipfix_unref(di);
1811             ofproto->ipfix = NULL;
1812         }
1813     }
1814
1815     return 0;
1816 }
1817
1818 static int
1819 set_cfm(struct ofport *ofport_, const struct cfm_settings *s)
1820 {
1821     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1822     int error = 0;
1823
1824     if (s) {
1825         if (!ofport->cfm) {
1826             struct ofproto_dpif *ofproto;
1827
1828             ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1829             ofproto->backer->need_revalidate = REV_RECONFIGURE;
1830             ofport->cfm = cfm_create(ofport->up.netdev);
1831         }
1832
1833         if (cfm_configure(ofport->cfm, s)) {
1834             error = 0;
1835             goto out;
1836         }
1837
1838         error = EINVAL;
1839     }
1840     cfm_unref(ofport->cfm);
1841     ofport->cfm = NULL;
1842 out:
1843     ofproto_dpif_monitor_port_update(ofport, ofport->bfd, ofport->cfm,
1844                                      ofport->up.pp.hw_addr);
1845     return error;
1846 }
1847
1848 static int
1849 get_cfm_status(const struct ofport *ofport_, bool force,
1850                struct ofproto_cfm_status *status)
1851 {
1852     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1853     int ret = 0;
1854
1855     if (ofport->cfm) {
1856         if (cfm_check_status_change(ofport->cfm) || force) {
1857             status->faults = cfm_get_fault(ofport->cfm);
1858             status->flap_count = cfm_get_flap_count(ofport->cfm);
1859             status->remote_opstate = cfm_get_opup(ofport->cfm);
1860             status->health = cfm_get_health(ofport->cfm);
1861             cfm_get_remote_mpids(ofport->cfm, &status->rmps, &status->n_rmps);
1862         } else {
1863             ret = NO_STATUS_CHANGE;
1864         }
1865     } else {
1866         ret = ENOENT;
1867     }
1868
1869     return ret;
1870 }
1871
1872 static int
1873 set_bfd(struct ofport *ofport_, const struct smap *cfg)
1874 {
1875     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport_->ofproto);
1876     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1877     struct bfd *old;
1878
1879     old = ofport->bfd;
1880     ofport->bfd = bfd_configure(old, netdev_get_name(ofport->up.netdev),
1881                                 cfg, ofport->up.netdev);
1882     if (ofport->bfd != old) {
1883         ofproto->backer->need_revalidate = REV_RECONFIGURE;
1884     }
1885     ofproto_dpif_monitor_port_update(ofport, ofport->bfd, ofport->cfm,
1886                                      ofport->up.pp.hw_addr);
1887     return 0;
1888 }
1889
1890 static int
1891 get_bfd_status(struct ofport *ofport_, bool force, struct smap *smap)
1892 {
1893     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1894     int ret = 0;
1895
1896     if (ofport->bfd) {
1897         if (bfd_check_status_change(ofport->bfd) || force) {
1898             bfd_get_status(ofport->bfd, smap);
1899         } else {
1900             ret = NO_STATUS_CHANGE;
1901         }
1902     } else {
1903         ret = ENOENT;
1904     }
1905
1906     return ret;
1907 }
1908 \f
1909 /* Spanning Tree. */
1910
1911 static void
1912 send_bpdu_cb(struct ofpbuf *pkt, int port_num, void *ofproto_)
1913 {
1914     struct ofproto_dpif *ofproto = ofproto_;
1915     struct stp_port *sp = stp_get_port(ofproto->stp, port_num);
1916     struct ofport_dpif *ofport;
1917
1918     ofport = stp_port_get_aux(sp);
1919     if (!ofport) {
1920         VLOG_WARN_RL(&rl, "%s: cannot send BPDU on unknown port %d",
1921                      ofproto->up.name, port_num);
1922     } else {
1923         struct eth_header *eth = ofpbuf_l2(pkt);
1924
1925         netdev_get_etheraddr(ofport->up.netdev, eth->eth_src);
1926         if (eth_addr_is_zero(eth->eth_src)) {
1927             VLOG_WARN_RL(&rl, "%s: cannot send BPDU on port %d "
1928                          "with unknown MAC", ofproto->up.name, port_num);
1929         } else {
1930             ofproto_dpif_send_packet(ofport, pkt);
1931         }
1932     }
1933     ofpbuf_delete(pkt);
1934 }
1935
1936 /* Configures STP on 'ofproto_' using the settings defined in 's'. */
1937 static int
1938 set_stp(struct ofproto *ofproto_, const struct ofproto_stp_settings *s)
1939 {
1940     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1941
1942     /* Only revalidate flows if the configuration changed. */
1943     if (!s != !ofproto->stp) {
1944         ofproto->backer->need_revalidate = REV_RECONFIGURE;
1945     }
1946
1947     if (s) {
1948         if (!ofproto->stp) {
1949             ofproto->stp = stp_create(ofproto_->name, s->system_id,
1950                                       send_bpdu_cb, ofproto);
1951             ofproto->stp_last_tick = time_msec();
1952         }
1953
1954         stp_set_bridge_id(ofproto->stp, s->system_id);
1955         stp_set_bridge_priority(ofproto->stp, s->priority);
1956         stp_set_hello_time(ofproto->stp, s->hello_time);
1957         stp_set_max_age(ofproto->stp, s->max_age);
1958         stp_set_forward_delay(ofproto->stp, s->fwd_delay);
1959     }  else {
1960         struct ofport *ofport;
1961
1962         HMAP_FOR_EACH (ofport, hmap_node, &ofproto->up.ports) {
1963             set_stp_port(ofport, NULL);
1964         }
1965
1966         stp_unref(ofproto->stp);
1967         ofproto->stp = NULL;
1968     }
1969
1970     return 0;
1971 }
1972
1973 static int
1974 get_stp_status(struct ofproto *ofproto_, struct ofproto_stp_status *s)
1975 {
1976     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1977
1978     if (ofproto->stp) {
1979         s->enabled = true;
1980         s->bridge_id = stp_get_bridge_id(ofproto->stp);
1981         s->designated_root = stp_get_designated_root(ofproto->stp);
1982         s->root_path_cost = stp_get_root_path_cost(ofproto->stp);
1983     } else {
1984         s->enabled = false;
1985     }
1986
1987     return 0;
1988 }
1989
1990 static void
1991 update_stp_port_state(struct ofport_dpif *ofport)
1992 {
1993     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1994     enum stp_state state;
1995
1996     /* Figure out new state. */
1997     state = ofport->stp_port ? stp_port_get_state(ofport->stp_port)
1998                              : STP_DISABLED;
1999
2000     /* Update state. */
2001     if (ofport->stp_state != state) {
2002         enum ofputil_port_state of_state;
2003         bool fwd_change;
2004
2005         VLOG_DBG_RL(&rl, "port %s: STP state changed from %s to %s",
2006                     netdev_get_name(ofport->up.netdev),
2007                     stp_state_name(ofport->stp_state),
2008                     stp_state_name(state));
2009         if (stp_learn_in_state(ofport->stp_state)
2010                 != stp_learn_in_state(state)) {
2011             /* xxx Learning action flows should also be flushed. */
2012             ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2013             mac_learning_flush(ofproto->ml);
2014             ovs_rwlock_unlock(&ofproto->ml->rwlock);
2015         }
2016         fwd_change = stp_forward_in_state(ofport->stp_state)
2017                         != stp_forward_in_state(state);
2018
2019         ofproto->backer->need_revalidate = REV_STP;
2020         ofport->stp_state = state;
2021         ofport->stp_state_entered = time_msec();
2022
2023         if (fwd_change && ofport->bundle) {
2024             bundle_update(ofport->bundle);
2025         }
2026
2027         /* Update the STP state bits in the OpenFlow port description. */
2028         of_state = ofport->up.pp.state & ~OFPUTIL_PS_STP_MASK;
2029         of_state |= (state == STP_LISTENING ? OFPUTIL_PS_STP_LISTEN
2030                      : state == STP_LEARNING ? OFPUTIL_PS_STP_LEARN
2031                      : state == STP_FORWARDING ? OFPUTIL_PS_STP_FORWARD
2032                      : state == STP_BLOCKING ?  OFPUTIL_PS_STP_BLOCK
2033                      : 0);
2034         ofproto_port_set_state(&ofport->up, of_state);
2035     }
2036 }
2037
2038 /* Configures STP on 'ofport_' using the settings defined in 's'.  The
2039  * caller is responsible for assigning STP port numbers and ensuring
2040  * there are no duplicates. */
2041 static int
2042 set_stp_port(struct ofport *ofport_,
2043              const struct ofproto_port_stp_settings *s)
2044 {
2045     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2046     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2047     struct stp_port *sp = ofport->stp_port;
2048
2049     if (!s || !s->enable) {
2050         if (sp) {
2051             ofport->stp_port = NULL;
2052             stp_port_disable(sp);
2053             update_stp_port_state(ofport);
2054         }
2055         return 0;
2056     } else if (sp && stp_port_no(sp) != s->port_num
2057             && ofport == stp_port_get_aux(sp)) {
2058         /* The port-id changed, so disable the old one if it's not
2059          * already in use by another port. */
2060         stp_port_disable(sp);
2061     }
2062
2063     sp = ofport->stp_port = stp_get_port(ofproto->stp, s->port_num);
2064     stp_port_enable(sp);
2065
2066     stp_port_set_aux(sp, ofport);
2067     stp_port_set_priority(sp, s->priority);
2068     stp_port_set_path_cost(sp, s->path_cost);
2069
2070     update_stp_port_state(ofport);
2071
2072     return 0;
2073 }
2074
2075 static int
2076 get_stp_port_status(struct ofport *ofport_,
2077                     struct ofproto_port_stp_status *s)
2078 {
2079     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2080     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2081     struct stp_port *sp = ofport->stp_port;
2082
2083     if (!ofproto->stp || !sp) {
2084         s->enabled = false;
2085         return 0;
2086     }
2087
2088     s->enabled = true;
2089     s->port_id = stp_port_get_id(sp);
2090     s->state = stp_port_get_state(sp);
2091     s->sec_in_state = (time_msec() - ofport->stp_state_entered) / 1000;
2092     s->role = stp_port_get_role(sp);
2093
2094     return 0;
2095 }
2096
2097 static int
2098 get_stp_port_stats(struct ofport *ofport_,
2099                    struct ofproto_port_stp_stats *s)
2100 {
2101     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2102     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2103     struct stp_port *sp = ofport->stp_port;
2104
2105     if (!ofproto->stp || !sp) {
2106         s->enabled = false;
2107         return 0;
2108     }
2109
2110     s->enabled = true;
2111     stp_port_get_counts(sp, &s->tx_count, &s->rx_count, &s->error_count);
2112
2113     return 0;
2114 }
2115
2116 static void
2117 stp_run(struct ofproto_dpif *ofproto)
2118 {
2119     if (ofproto->stp) {
2120         long long int now = time_msec();
2121         long long int elapsed = now - ofproto->stp_last_tick;
2122         struct stp_port *sp;
2123
2124         if (elapsed > 0) {
2125             stp_tick(ofproto->stp, MIN(INT_MAX, elapsed));
2126             ofproto->stp_last_tick = now;
2127         }
2128         while (stp_get_changed_port(ofproto->stp, &sp)) {
2129             struct ofport_dpif *ofport = stp_port_get_aux(sp);
2130
2131             if (ofport) {
2132                 update_stp_port_state(ofport);
2133             }
2134         }
2135
2136         if (stp_check_and_reset_fdb_flush(ofproto->stp)) {
2137             ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2138             mac_learning_flush(ofproto->ml);
2139             ovs_rwlock_unlock(&ofproto->ml->rwlock);
2140         }
2141     }
2142 }
2143
2144 static void
2145 stp_wait(struct ofproto_dpif *ofproto)
2146 {
2147     if (ofproto->stp) {
2148         poll_timer_wait(1000);
2149     }
2150 }
2151 \f
2152 static int
2153 set_queues(struct ofport *ofport_, const struct ofproto_port_queue *qdscp,
2154            size_t n_qdscp)
2155 {
2156     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2157     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2158
2159     if (ofport->n_qdscp != n_qdscp
2160         || (n_qdscp && memcmp(ofport->qdscp, qdscp,
2161                               n_qdscp * sizeof *qdscp))) {
2162         ofproto->backer->need_revalidate = REV_RECONFIGURE;
2163         free(ofport->qdscp);
2164         ofport->qdscp = n_qdscp
2165             ? xmemdup(qdscp, n_qdscp * sizeof *qdscp)
2166             : NULL;
2167         ofport->n_qdscp = n_qdscp;
2168     }
2169
2170     return 0;
2171 }
2172 \f
2173 /* Bundles. */
2174
2175 /* Expires all MAC learning entries associated with 'bundle' and forces its
2176  * ofproto to revalidate every flow.
2177  *
2178  * Normally MAC learning entries are removed only from the ofproto associated
2179  * with 'bundle', but if 'all_ofprotos' is true, then the MAC learning entries
2180  * are removed from every ofproto.  When patch ports and SLB bonds are in use
2181  * and a VM migration happens and the gratuitous ARPs are somehow lost, this
2182  * avoids a MAC_ENTRY_IDLE_TIME delay before the migrated VM can communicate
2183  * with the host from which it migrated. */
2184 static void
2185 bundle_flush_macs(struct ofbundle *bundle, bool all_ofprotos)
2186 {
2187     struct ofproto_dpif *ofproto = bundle->ofproto;
2188     struct mac_learning *ml = ofproto->ml;
2189     struct mac_entry *mac, *next_mac;
2190
2191     ofproto->backer->need_revalidate = REV_RECONFIGURE;
2192     ovs_rwlock_wrlock(&ml->rwlock);
2193     LIST_FOR_EACH_SAFE (mac, next_mac, lru_node, &ml->lrus) {
2194         if (mac->port.p == bundle) {
2195             if (all_ofprotos) {
2196                 struct ofproto_dpif *o;
2197
2198                 HMAP_FOR_EACH (o, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
2199                     if (o != ofproto) {
2200                         struct mac_entry *e;
2201
2202                         ovs_rwlock_wrlock(&o->ml->rwlock);
2203                         e = mac_learning_lookup(o->ml, mac->mac, mac->vlan);
2204                         if (e) {
2205                             mac_learning_expire(o->ml, e);
2206                         }
2207                         ovs_rwlock_unlock(&o->ml->rwlock);
2208                     }
2209                 }
2210             }
2211
2212             mac_learning_expire(ml, mac);
2213         }
2214     }
2215     ovs_rwlock_unlock(&ml->rwlock);
2216 }
2217
2218 static struct ofbundle *
2219 bundle_lookup(const struct ofproto_dpif *ofproto, void *aux)
2220 {
2221     struct ofbundle *bundle;
2222
2223     HMAP_FOR_EACH_IN_BUCKET (bundle, hmap_node, hash_pointer(aux, 0),
2224                              &ofproto->bundles) {
2225         if (bundle->aux == aux) {
2226             return bundle;
2227         }
2228     }
2229     return NULL;
2230 }
2231
2232 static void
2233 bundle_update(struct ofbundle *bundle)
2234 {
2235     struct ofport_dpif *port;
2236
2237     bundle->floodable = true;
2238     LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2239         if (port->up.pp.config & OFPUTIL_PC_NO_FLOOD
2240             || port->is_layer3
2241             || !stp_forward_in_state(port->stp_state)) {
2242             bundle->floodable = false;
2243             break;
2244         }
2245     }
2246 }
2247
2248 static void
2249 bundle_del_port(struct ofport_dpif *port)
2250 {
2251     struct ofbundle *bundle = port->bundle;
2252
2253     bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE;
2254
2255     list_remove(&port->bundle_node);
2256     port->bundle = NULL;
2257
2258     if (bundle->lacp) {
2259         lacp_slave_unregister(bundle->lacp, port);
2260     }
2261     if (bundle->bond) {
2262         bond_slave_unregister(bundle->bond, port);
2263     }
2264
2265     bundle_update(bundle);
2266 }
2267
2268 static bool
2269 bundle_add_port(struct ofbundle *bundle, ofp_port_t ofp_port,
2270                 struct lacp_slave_settings *lacp)
2271 {
2272     struct ofport_dpif *port;
2273
2274     port = get_ofp_port(bundle->ofproto, ofp_port);
2275     if (!port) {
2276         return false;
2277     }
2278
2279     if (port->bundle != bundle) {
2280         bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE;
2281         if (port->bundle) {
2282             bundle_remove(&port->up);
2283         }
2284
2285         port->bundle = bundle;
2286         list_push_back(&bundle->ports, &port->bundle_node);
2287         if (port->up.pp.config & OFPUTIL_PC_NO_FLOOD
2288             || port->is_layer3
2289             || !stp_forward_in_state(port->stp_state)) {
2290             bundle->floodable = false;
2291         }
2292     }
2293     if (lacp) {
2294         bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE;
2295         lacp_slave_register(bundle->lacp, port, lacp);
2296     }
2297
2298     return true;
2299 }
2300
2301 static void
2302 bundle_destroy(struct ofbundle *bundle)
2303 {
2304     struct ofproto_dpif *ofproto;
2305     struct ofport_dpif *port, *next_port;
2306
2307     if (!bundle) {
2308         return;
2309     }
2310
2311     ofproto = bundle->ofproto;
2312     mbridge_unregister_bundle(ofproto->mbridge, bundle->aux);
2313
2314     ovs_rwlock_wrlock(&xlate_rwlock);
2315     xlate_bundle_remove(bundle);
2316     ovs_rwlock_unlock(&xlate_rwlock);
2317
2318     LIST_FOR_EACH_SAFE (port, next_port, bundle_node, &bundle->ports) {
2319         bundle_del_port(port);
2320     }
2321
2322     bundle_flush_macs(bundle, true);
2323     hmap_remove(&ofproto->bundles, &bundle->hmap_node);
2324     free(bundle->name);
2325     free(bundle->trunks);
2326     lacp_unref(bundle->lacp);
2327     bond_unref(bundle->bond);
2328     free(bundle);
2329 }
2330
2331 static int
2332 bundle_set(struct ofproto *ofproto_, void *aux,
2333            const struct ofproto_bundle_settings *s)
2334 {
2335     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2336     bool need_flush = false;
2337     struct ofport_dpif *port;
2338     struct ofbundle *bundle;
2339     unsigned long *trunks;
2340     int vlan;
2341     size_t i;
2342     bool ok;
2343
2344     if (!s) {
2345         bundle_destroy(bundle_lookup(ofproto, aux));
2346         return 0;
2347     }
2348
2349     ovs_assert(s->n_slaves == 1 || s->bond != NULL);
2350     ovs_assert((s->lacp != NULL) == (s->lacp_slaves != NULL));
2351
2352     bundle = bundle_lookup(ofproto, aux);
2353     if (!bundle) {
2354         bundle = xmalloc(sizeof *bundle);
2355
2356         bundle->ofproto = ofproto;
2357         hmap_insert(&ofproto->bundles, &bundle->hmap_node,
2358                     hash_pointer(aux, 0));
2359         bundle->aux = aux;
2360         bundle->name = NULL;
2361
2362         list_init(&bundle->ports);
2363         bundle->vlan_mode = PORT_VLAN_TRUNK;
2364         bundle->vlan = -1;
2365         bundle->trunks = NULL;
2366         bundle->use_priority_tags = s->use_priority_tags;
2367         bundle->lacp = NULL;
2368         bundle->bond = NULL;
2369
2370         bundle->floodable = true;
2371         mbridge_register_bundle(ofproto->mbridge, bundle);
2372     }
2373
2374     if (!bundle->name || strcmp(s->name, bundle->name)) {
2375         free(bundle->name);
2376         bundle->name = xstrdup(s->name);
2377     }
2378
2379     /* LACP. */
2380     if (s->lacp) {
2381         ofproto->lacp_enabled = true;
2382         if (!bundle->lacp) {
2383             ofproto->backer->need_revalidate = REV_RECONFIGURE;
2384             bundle->lacp = lacp_create();
2385         }
2386         lacp_configure(bundle->lacp, s->lacp);
2387     } else {
2388         lacp_unref(bundle->lacp);
2389         bundle->lacp = NULL;
2390     }
2391
2392     /* Update set of ports. */
2393     ok = true;
2394     for (i = 0; i < s->n_slaves; i++) {
2395         if (!bundle_add_port(bundle, s->slaves[i],
2396                              s->lacp ? &s->lacp_slaves[i] : NULL)) {
2397             ok = false;
2398         }
2399     }
2400     if (!ok || list_size(&bundle->ports) != s->n_slaves) {
2401         struct ofport_dpif *next_port;
2402
2403         LIST_FOR_EACH_SAFE (port, next_port, bundle_node, &bundle->ports) {
2404             for (i = 0; i < s->n_slaves; i++) {
2405                 if (s->slaves[i] == port->up.ofp_port) {
2406                     goto found;
2407                 }
2408             }
2409
2410             bundle_del_port(port);
2411         found: ;
2412         }
2413     }
2414     ovs_assert(list_size(&bundle->ports) <= s->n_slaves);
2415
2416     if (list_is_empty(&bundle->ports)) {
2417         bundle_destroy(bundle);
2418         return EINVAL;
2419     }
2420
2421     /* Set VLAN tagging mode */
2422     if (s->vlan_mode != bundle->vlan_mode
2423         || s->use_priority_tags != bundle->use_priority_tags) {
2424         bundle->vlan_mode = s->vlan_mode;
2425         bundle->use_priority_tags = s->use_priority_tags;
2426         need_flush = true;
2427     }
2428
2429     /* Set VLAN tag. */
2430     vlan = (s->vlan_mode == PORT_VLAN_TRUNK ? -1
2431             : s->vlan >= 0 && s->vlan <= 4095 ? s->vlan
2432             : 0);
2433     if (vlan != bundle->vlan) {
2434         bundle->vlan = vlan;
2435         need_flush = true;
2436     }
2437
2438     /* Get trunked VLANs. */
2439     switch (s->vlan_mode) {
2440     case PORT_VLAN_ACCESS:
2441         trunks = NULL;
2442         break;
2443
2444     case PORT_VLAN_TRUNK:
2445         trunks = CONST_CAST(unsigned long *, s->trunks);
2446         break;
2447
2448     case PORT_VLAN_NATIVE_UNTAGGED:
2449     case PORT_VLAN_NATIVE_TAGGED:
2450         if (vlan != 0 && (!s->trunks
2451                           || !bitmap_is_set(s->trunks, vlan)
2452                           || bitmap_is_set(s->trunks, 0))) {
2453             /* Force trunking the native VLAN and prohibit trunking VLAN 0. */
2454             if (s->trunks) {
2455                 trunks = bitmap_clone(s->trunks, 4096);
2456             } else {
2457                 trunks = bitmap_allocate1(4096);
2458             }
2459             bitmap_set1(trunks, vlan);
2460             bitmap_set0(trunks, 0);
2461         } else {
2462             trunks = CONST_CAST(unsigned long *, s->trunks);
2463         }
2464         break;
2465
2466     default:
2467         OVS_NOT_REACHED();
2468     }
2469     if (!vlan_bitmap_equal(trunks, bundle->trunks)) {
2470         free(bundle->trunks);
2471         if (trunks == s->trunks) {
2472             bundle->trunks = vlan_bitmap_clone(trunks);
2473         } else {
2474             bundle->trunks = trunks;
2475             trunks = NULL;
2476         }
2477         need_flush = true;
2478     }
2479     if (trunks != s->trunks) {
2480         free(trunks);
2481     }
2482
2483     /* Bonding. */
2484     if (!list_is_short(&bundle->ports)) {
2485         bundle->ofproto->has_bonded_bundles = true;
2486         if (bundle->bond) {
2487             if (bond_reconfigure(bundle->bond, s->bond)) {
2488                 ofproto->backer->need_revalidate = REV_RECONFIGURE;
2489             }
2490         } else {
2491             bundle->bond = bond_create(s->bond, ofproto);
2492             ofproto->backer->need_revalidate = REV_RECONFIGURE;
2493         }
2494
2495         LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2496             bond_slave_register(bundle->bond, port,
2497                                 port->up.ofp_port, port->up.netdev);
2498         }
2499     } else {
2500         bond_unref(bundle->bond);
2501         bundle->bond = NULL;
2502     }
2503
2504     /* If we changed something that would affect MAC learning, un-learn
2505      * everything on this port and force flow revalidation. */
2506     if (need_flush) {
2507         bundle_flush_macs(bundle, false);
2508     }
2509
2510     return 0;
2511 }
2512
2513 static void
2514 bundle_remove(struct ofport *port_)
2515 {
2516     struct ofport_dpif *port = ofport_dpif_cast(port_);
2517     struct ofbundle *bundle = port->bundle;
2518
2519     if (bundle) {
2520         bundle_del_port(port);
2521         if (list_is_empty(&bundle->ports)) {
2522             bundle_destroy(bundle);
2523         } else if (list_is_short(&bundle->ports)) {
2524             bond_unref(bundle->bond);
2525             bundle->bond = NULL;
2526         }
2527     }
2528 }
2529
2530 static void
2531 send_pdu_cb(void *port_, const void *pdu, size_t pdu_size)
2532 {
2533     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 10);
2534     struct ofport_dpif *port = port_;
2535     uint8_t ea[ETH_ADDR_LEN];
2536     int error;
2537
2538     error = netdev_get_etheraddr(port->up.netdev, ea);
2539     if (!error) {
2540         struct ofpbuf packet;
2541         void *packet_pdu;
2542
2543         ofpbuf_init(&packet, 0);
2544         packet_pdu = eth_compose(&packet, eth_addr_lacp, ea, ETH_TYPE_LACP,
2545                                  pdu_size);
2546         memcpy(packet_pdu, pdu, pdu_size);
2547
2548         ofproto_dpif_send_packet(port, &packet);
2549         ofpbuf_uninit(&packet);
2550     } else {
2551         VLOG_ERR_RL(&rl, "port %s: cannot obtain Ethernet address of iface "
2552                     "%s (%s)", port->bundle->name,
2553                     netdev_get_name(port->up.netdev), ovs_strerror(error));
2554     }
2555 }
2556
2557 static void
2558 bundle_send_learning_packets(struct ofbundle *bundle)
2559 {
2560     struct ofproto_dpif *ofproto = bundle->ofproto;
2561     struct ofpbuf *learning_packet;
2562     int error, n_packets, n_errors;
2563     struct mac_entry *e;
2564     struct list packets;
2565
2566     list_init(&packets);
2567     ovs_rwlock_rdlock(&ofproto->ml->rwlock);
2568     LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) {
2569         if (e->port.p != bundle) {
2570             void *port_void;
2571
2572             learning_packet = bond_compose_learning_packet(bundle->bond,
2573                                                            e->mac, e->vlan,
2574                                                            &port_void);
2575             /* Temporarily use 'frame' as a private pointer (see below). */
2576             ovs_assert(learning_packet->frame == ofpbuf_data(learning_packet));
2577             learning_packet->frame = port_void;
2578             list_push_back(&packets, &learning_packet->list_node);
2579         }
2580     }
2581     ovs_rwlock_unlock(&ofproto->ml->rwlock);
2582
2583     error = n_packets = n_errors = 0;
2584     LIST_FOR_EACH (learning_packet, list_node, &packets) {
2585         int ret;
2586         void *port_void = learning_packet->frame;
2587
2588         /* Restore 'frame'. */
2589         learning_packet->frame = ofpbuf_data(learning_packet);
2590         ret = ofproto_dpif_send_packet(port_void, learning_packet);
2591         if (ret) {
2592             error = ret;
2593             n_errors++;
2594         }
2595         n_packets++;
2596     }
2597     ofpbuf_list_delete(&packets);
2598
2599     if (n_errors) {
2600         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
2601         VLOG_WARN_RL(&rl, "bond %s: %d errors sending %d gratuitous learning "
2602                      "packets, last error was: %s",
2603                      bundle->name, n_errors, n_packets, ovs_strerror(error));
2604     } else {
2605         VLOG_DBG("bond %s: sent %d gratuitous learning packets",
2606                  bundle->name, n_packets);
2607     }
2608 }
2609
2610 static void
2611 bundle_run(struct ofbundle *bundle)
2612 {
2613     if (bundle->lacp) {
2614         lacp_run(bundle->lacp, send_pdu_cb);
2615     }
2616     if (bundle->bond) {
2617         struct ofport_dpif *port;
2618
2619         LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2620             bond_slave_set_may_enable(bundle->bond, port, port->may_enable);
2621         }
2622
2623         if (bond_run(bundle->bond, lacp_status(bundle->lacp))) {
2624             bundle->ofproto->backer->need_revalidate = REV_BOND;
2625         }
2626
2627         if (bond_should_send_learning_packets(bundle->bond)) {
2628             bundle_send_learning_packets(bundle);
2629         }
2630     }
2631 }
2632
2633 static void
2634 bundle_wait(struct ofbundle *bundle)
2635 {
2636     if (bundle->lacp) {
2637         lacp_wait(bundle->lacp);
2638     }
2639     if (bundle->bond) {
2640         bond_wait(bundle->bond);
2641     }
2642 }
2643 \f
2644 /* Mirrors. */
2645
2646 static int
2647 mirror_set__(struct ofproto *ofproto_, void *aux,
2648              const struct ofproto_mirror_settings *s)
2649 {
2650     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2651     struct ofbundle **srcs, **dsts;
2652     int error;
2653     size_t i;
2654
2655     if (!s) {
2656         mirror_destroy(ofproto->mbridge, aux);
2657         return 0;
2658     }
2659
2660     srcs = xmalloc(s->n_srcs * sizeof *srcs);
2661     dsts = xmalloc(s->n_dsts * sizeof *dsts);
2662
2663     for (i = 0; i < s->n_srcs; i++) {
2664         srcs[i] = bundle_lookup(ofproto, s->srcs[i]);
2665     }
2666
2667     for (i = 0; i < s->n_dsts; i++) {
2668         dsts[i] = bundle_lookup(ofproto, s->dsts[i]);
2669     }
2670
2671     error = mirror_set(ofproto->mbridge, aux, s->name, srcs, s->n_srcs, dsts,
2672                        s->n_dsts, s->src_vlans,
2673                        bundle_lookup(ofproto, s->out_bundle), s->out_vlan);
2674     free(srcs);
2675     free(dsts);
2676     return error;
2677 }
2678
2679 static int
2680 mirror_get_stats__(struct ofproto *ofproto, void *aux,
2681                    uint64_t *packets, uint64_t *bytes)
2682 {
2683     return mirror_get_stats(ofproto_dpif_cast(ofproto)->mbridge, aux, packets,
2684                             bytes);
2685 }
2686
2687 static int
2688 set_flood_vlans(struct ofproto *ofproto_, unsigned long *flood_vlans)
2689 {
2690     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2691     ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2692     if (mac_learning_set_flood_vlans(ofproto->ml, flood_vlans)) {
2693         mac_learning_flush(ofproto->ml);
2694     }
2695     ovs_rwlock_unlock(&ofproto->ml->rwlock);
2696     return 0;
2697 }
2698
2699 static bool
2700 is_mirror_output_bundle(const struct ofproto *ofproto_, void *aux)
2701 {
2702     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2703     struct ofbundle *bundle = bundle_lookup(ofproto, aux);
2704     return bundle && mirror_bundle_out(ofproto->mbridge, bundle) != 0;
2705 }
2706
2707 static void
2708 forward_bpdu_changed(struct ofproto *ofproto_)
2709 {
2710     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2711     ofproto->backer->need_revalidate = REV_RECONFIGURE;
2712 }
2713
2714 static void
2715 set_mac_table_config(struct ofproto *ofproto_, unsigned int idle_time,
2716                      size_t max_entries)
2717 {
2718     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2719     ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2720     mac_learning_set_idle_time(ofproto->ml, idle_time);
2721     mac_learning_set_max_entries(ofproto->ml, max_entries);
2722     ovs_rwlock_unlock(&ofproto->ml->rwlock);
2723 }
2724 \f
2725 /* Ports. */
2726
2727 static struct ofport_dpif *
2728 get_ofp_port(const struct ofproto_dpif *ofproto, ofp_port_t ofp_port)
2729 {
2730     struct ofport *ofport = ofproto_get_port(&ofproto->up, ofp_port);
2731     return ofport ? ofport_dpif_cast(ofport) : NULL;
2732 }
2733
2734 static void
2735 ofproto_port_from_dpif_port(struct ofproto_dpif *ofproto,
2736                             struct ofproto_port *ofproto_port,
2737                             struct dpif_port *dpif_port)
2738 {
2739     ofproto_port->name = dpif_port->name;
2740     ofproto_port->type = dpif_port->type;
2741     ofproto_port->ofp_port = odp_port_to_ofp_port(ofproto, dpif_port->port_no);
2742 }
2743
2744 static void
2745 ofport_update_peer(struct ofport_dpif *ofport)
2746 {
2747     const struct ofproto_dpif *ofproto;
2748     struct dpif_backer *backer;
2749     char *peer_name;
2750
2751     if (!netdev_vport_is_patch(ofport->up.netdev)) {
2752         return;
2753     }
2754
2755     backer = ofproto_dpif_cast(ofport->up.ofproto)->backer;
2756     backer->need_revalidate = REV_RECONFIGURE;
2757
2758     if (ofport->peer) {
2759         ofport->peer->peer = NULL;
2760         ofport->peer = NULL;
2761     }
2762
2763     peer_name = netdev_vport_patch_peer(ofport->up.netdev);
2764     if (!peer_name) {
2765         return;
2766     }
2767
2768     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
2769         struct ofport *peer_ofport;
2770         struct ofport_dpif *peer;
2771         char *peer_peer;
2772
2773         if (ofproto->backer != backer) {
2774             continue;
2775         }
2776
2777         peer_ofport = shash_find_data(&ofproto->up.port_by_name, peer_name);
2778         if (!peer_ofport) {
2779             continue;
2780         }
2781
2782         peer = ofport_dpif_cast(peer_ofport);
2783         peer_peer = netdev_vport_patch_peer(peer->up.netdev);
2784         if (peer_peer && !strcmp(netdev_get_name(ofport->up.netdev),
2785                                  peer_peer)) {
2786             ofport->peer = peer;
2787             ofport->peer->peer = ofport;
2788         }
2789         free(peer_peer);
2790
2791         break;
2792     }
2793     free(peer_name);
2794 }
2795
2796 static void
2797 port_run(struct ofport_dpif *ofport)
2798 {
2799     long long int carrier_seq = netdev_get_carrier_resets(ofport->up.netdev);
2800     bool carrier_changed = carrier_seq != ofport->carrier_seq;
2801     bool enable = netdev_get_carrier(ofport->up.netdev);
2802     bool cfm_enable = false;
2803     bool bfd_enable = false;
2804
2805     ofport->carrier_seq = carrier_seq;
2806
2807     if (ofport->cfm) {
2808         int cfm_opup = cfm_get_opup(ofport->cfm);
2809
2810         cfm_enable = !cfm_get_fault(ofport->cfm);
2811
2812         if (cfm_opup >= 0) {
2813             cfm_enable = cfm_enable && cfm_opup;
2814         }
2815     }
2816
2817     if (ofport->bfd) {
2818         bfd_enable = bfd_forwarding(ofport->bfd);
2819     }
2820
2821     if (ofport->bfd || ofport->cfm) {
2822         enable = enable && (cfm_enable || bfd_enable);
2823     }
2824
2825     if (ofport->bundle) {
2826         enable = enable && lacp_slave_may_enable(ofport->bundle->lacp, ofport);
2827         if (carrier_changed) {
2828             lacp_slave_carrier_changed(ofport->bundle->lacp, ofport);
2829         }
2830     }
2831
2832     if (ofport->may_enable != enable) {
2833         struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2834         ofproto->backer->need_revalidate = REV_PORT_TOGGLED;
2835     }
2836
2837     ofport->may_enable = enable;
2838 }
2839
2840 static int
2841 port_query_by_name(const struct ofproto *ofproto_, const char *devname,
2842                    struct ofproto_port *ofproto_port)
2843 {
2844     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2845     struct dpif_port dpif_port;
2846     int error;
2847
2848     if (sset_contains(&ofproto->ghost_ports, devname)) {
2849         const char *type = netdev_get_type_from_name(devname);
2850
2851         /* We may be called before ofproto->up.port_by_name is populated with
2852          * the appropriate ofport.  For this reason, we must get the name and
2853          * type from the netdev layer directly. */
2854         if (type) {
2855             const struct ofport *ofport;
2856
2857             ofport = shash_find_data(&ofproto->up.port_by_name, devname);
2858             ofproto_port->ofp_port = ofport ? ofport->ofp_port : OFPP_NONE;
2859             ofproto_port->name = xstrdup(devname);
2860             ofproto_port->type = xstrdup(type);
2861             return 0;
2862         }
2863         return ENODEV;
2864     }
2865
2866     if (!sset_contains(&ofproto->ports, devname)) {
2867         return ENODEV;
2868     }
2869     error = dpif_port_query_by_name(ofproto->backer->dpif,
2870                                     devname, &dpif_port);
2871     if (!error) {
2872         ofproto_port_from_dpif_port(ofproto, ofproto_port, &dpif_port);
2873     }
2874     return error;
2875 }
2876
2877 static int
2878 port_add(struct ofproto *ofproto_, struct netdev *netdev)
2879 {
2880     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2881     const char *devname = netdev_get_name(netdev);
2882     char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
2883     const char *dp_port_name;
2884
2885     if (netdev_vport_is_patch(netdev)) {
2886         sset_add(&ofproto->ghost_ports, netdev_get_name(netdev));
2887         return 0;
2888     }
2889
2890     dp_port_name = netdev_vport_get_dpif_port(netdev, namebuf, sizeof namebuf);
2891     if (!dpif_port_exists(ofproto->backer->dpif, dp_port_name)) {
2892         odp_port_t port_no = ODPP_NONE;
2893         int error;
2894
2895         error = dpif_port_add(ofproto->backer->dpif, netdev, &port_no);
2896         if (error) {
2897             return error;
2898         }
2899         if (netdev_get_tunnel_config(netdev)) {
2900             simap_put(&ofproto->backer->tnl_backers,
2901                       dp_port_name, odp_to_u32(port_no));
2902         }
2903     }
2904
2905     if (netdev_get_tunnel_config(netdev)) {
2906         sset_add(&ofproto->ghost_ports, devname);
2907     } else {
2908         sset_add(&ofproto->ports, devname);
2909     }
2910     return 0;
2911 }
2912
2913 static int
2914 port_del(struct ofproto *ofproto_, ofp_port_t ofp_port)
2915 {
2916     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2917     struct ofport_dpif *ofport = get_ofp_port(ofproto, ofp_port);
2918     int error = 0;
2919
2920     if (!ofport) {
2921         return 0;
2922     }
2923
2924     sset_find_and_delete(&ofproto->ghost_ports,
2925                          netdev_get_name(ofport->up.netdev));
2926     ofproto->backer->need_revalidate = REV_RECONFIGURE;
2927     if (!ofport->is_tunnel && !netdev_vport_is_patch(ofport->up.netdev)) {
2928         error = dpif_port_del(ofproto->backer->dpif, ofport->odp_port);
2929         if (!error) {
2930             /* The caller is going to close ofport->up.netdev.  If this is a
2931              * bonded port, then the bond is using that netdev, so remove it
2932              * from the bond.  The client will need to reconfigure everything
2933              * after deleting ports, so then the slave will get re-added. */
2934             bundle_remove(&ofport->up);
2935         }
2936     }
2937     return error;
2938 }
2939
2940 static int
2941 port_get_stats(const struct ofport *ofport_, struct netdev_stats *stats)
2942 {
2943     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2944     int error;
2945
2946     error = netdev_get_stats(ofport->up.netdev, stats);
2947
2948     if (!error && ofport_->ofp_port == OFPP_LOCAL) {
2949         struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2950
2951         ovs_mutex_lock(&ofproto->stats_mutex);
2952         /* ofproto->stats.tx_packets represents packets that we created
2953          * internally and sent to some port (e.g. packets sent with
2954          * ofproto_dpif_send_packet()).  Account for them as if they had
2955          * come from OFPP_LOCAL and got forwarded. */
2956
2957         if (stats->rx_packets != UINT64_MAX) {
2958             stats->rx_packets += ofproto->stats.tx_packets;
2959         }
2960
2961         if (stats->rx_bytes != UINT64_MAX) {
2962             stats->rx_bytes += ofproto->stats.tx_bytes;
2963         }
2964
2965         /* ofproto->stats.rx_packets represents packets that were received on
2966          * some port and we processed internally and dropped (e.g. STP).
2967          * Account for them as if they had been forwarded to OFPP_LOCAL. */
2968
2969         if (stats->tx_packets != UINT64_MAX) {
2970             stats->tx_packets += ofproto->stats.rx_packets;
2971         }
2972
2973         if (stats->tx_bytes != UINT64_MAX) {
2974             stats->tx_bytes += ofproto->stats.rx_bytes;
2975         }
2976         ovs_mutex_unlock(&ofproto->stats_mutex);
2977     }
2978
2979     return error;
2980 }
2981
2982 struct port_dump_state {
2983     uint32_t bucket;
2984     uint32_t offset;
2985     bool ghost;
2986
2987     struct ofproto_port port;
2988     bool has_port;
2989 };
2990
2991 static int
2992 port_dump_start(const struct ofproto *ofproto_ OVS_UNUSED, void **statep)
2993 {
2994     *statep = xzalloc(sizeof(struct port_dump_state));
2995     return 0;
2996 }
2997
2998 static int
2999 port_dump_next(const struct ofproto *ofproto_, void *state_,
3000                struct ofproto_port *port)
3001 {
3002     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3003     struct port_dump_state *state = state_;
3004     const struct sset *sset;
3005     struct sset_node *node;
3006
3007     if (state->has_port) {
3008         ofproto_port_destroy(&state->port);
3009         state->has_port = false;
3010     }
3011     sset = state->ghost ? &ofproto->ghost_ports : &ofproto->ports;
3012     while ((node = sset_at_position(sset, &state->bucket, &state->offset))) {
3013         int error;
3014
3015         error = port_query_by_name(ofproto_, node->name, &state->port);
3016         if (!error) {
3017             *port = state->port;
3018             state->has_port = true;
3019             return 0;
3020         } else if (error != ENODEV) {
3021             return error;
3022         }
3023     }
3024
3025     if (!state->ghost) {
3026         state->ghost = true;
3027         state->bucket = 0;
3028         state->offset = 0;
3029         return port_dump_next(ofproto_, state_, port);
3030     }
3031
3032     return EOF;
3033 }
3034
3035 static int
3036 port_dump_done(const struct ofproto *ofproto_ OVS_UNUSED, void *state_)
3037 {
3038     struct port_dump_state *state = state_;
3039
3040     if (state->has_port) {
3041         ofproto_port_destroy(&state->port);
3042     }
3043     free(state);
3044     return 0;
3045 }
3046
3047 static int
3048 port_poll(const struct ofproto *ofproto_, char **devnamep)
3049 {
3050     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3051
3052     if (ofproto->port_poll_errno) {
3053         int error = ofproto->port_poll_errno;
3054         ofproto->port_poll_errno = 0;
3055         return error;
3056     }
3057
3058     if (sset_is_empty(&ofproto->port_poll_set)) {
3059         return EAGAIN;
3060     }
3061
3062     *devnamep = sset_pop(&ofproto->port_poll_set);
3063     return 0;
3064 }
3065
3066 static void
3067 port_poll_wait(const struct ofproto *ofproto_)
3068 {
3069     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3070     dpif_port_poll_wait(ofproto->backer->dpif);
3071 }
3072
3073 static int
3074 port_is_lacp_current(const struct ofport *ofport_)
3075 {
3076     const struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
3077     return (ofport->bundle && ofport->bundle->lacp
3078             ? lacp_slave_is_current(ofport->bundle->lacp, ofport)
3079             : -1);
3080 }
3081 \f
3082 /* If 'rule' is an OpenFlow rule, that has expired according to OpenFlow rules,
3083  * then delete it entirely. */
3084 static void
3085 rule_expire(struct rule_dpif *rule)
3086     OVS_REQUIRES(ofproto_mutex)
3087 {
3088     uint16_t hard_timeout, idle_timeout;
3089     long long int now = time_msec();
3090     int reason = -1;
3091
3092     ovs_assert(!rule->up.pending);
3093
3094     hard_timeout = rule->up.hard_timeout;
3095     idle_timeout = rule->up.idle_timeout;
3096
3097     /* Has 'rule' expired? */
3098     if (hard_timeout) {
3099         long long int modified;
3100
3101         ovs_mutex_lock(&rule->up.mutex);
3102         modified = rule->up.modified;
3103         ovs_mutex_unlock(&rule->up.mutex);
3104
3105         if (now > modified + hard_timeout * 1000) {
3106             reason = OFPRR_HARD_TIMEOUT;
3107         }
3108     }
3109
3110     if (reason < 0 && idle_timeout) {
3111         long long int used;
3112
3113         ovs_mutex_lock(&rule->stats_mutex);
3114         used = rule->stats.used;
3115         ovs_mutex_unlock(&rule->stats_mutex);
3116
3117         if (now > used + idle_timeout * 1000) {
3118             reason = OFPRR_IDLE_TIMEOUT;
3119         }
3120     }
3121
3122     if (reason >= 0) {
3123         COVERAGE_INC(ofproto_dpif_expired);
3124         ofproto_rule_expire(&rule->up, reason);
3125     }
3126 }
3127
3128 /* Executes, within 'ofproto', the actions in 'rule' or 'ofpacts' on 'packet'.
3129  * 'flow' must reflect the data in 'packet'. */
3130 int
3131 ofproto_dpif_execute_actions(struct ofproto_dpif *ofproto,
3132                              const struct flow *flow,
3133                              struct rule_dpif *rule,
3134                              const struct ofpact *ofpacts, size_t ofpacts_len,
3135                              struct ofpbuf *packet)
3136 {
3137     struct dpif_flow_stats stats;
3138     struct xlate_out xout;
3139     struct xlate_in xin;
3140     ofp_port_t in_port;
3141     struct dpif_execute execute;
3142     int error;
3143
3144     ovs_assert((rule != NULL) != (ofpacts != NULL));
3145
3146     dpif_flow_stats_extract(flow, packet, time_msec(), &stats);
3147
3148     if (rule) {
3149         rule_dpif_credit_stats(rule, &stats);
3150     }
3151
3152     xlate_in_init(&xin, ofproto, flow, rule, stats.tcp_flags, packet);
3153     xin.ofpacts = ofpacts;
3154     xin.ofpacts_len = ofpacts_len;
3155     xin.resubmit_stats = &stats;
3156     xlate_actions(&xin, &xout);
3157
3158     execute.actions = ofpbuf_data(&xout.odp_actions);
3159     execute.actions_len = ofpbuf_size(&xout.odp_actions);
3160     execute.packet = packet;
3161     execute.md = pkt_metadata_from_flow(flow);
3162     execute.needs_help = (xout.slow & SLOW_ACTION) != 0;
3163
3164     /* Fix up in_port. */
3165     in_port = flow->in_port.ofp_port;
3166     if (in_port == OFPP_NONE) {
3167         in_port = OFPP_LOCAL;
3168     }
3169     execute.md.in_port.odp_port = ofp_port_to_odp_port(ofproto, in_port);
3170
3171     error = dpif_execute(ofproto->backer->dpif, &execute);
3172
3173     xlate_out_uninit(&xout);
3174
3175     return error;
3176 }
3177
3178 void
3179 rule_dpif_credit_stats(struct rule_dpif *rule,
3180                        const struct dpif_flow_stats *stats)
3181 {
3182     ovs_mutex_lock(&rule->stats_mutex);
3183     rule->stats.n_packets += stats->n_packets;
3184     rule->stats.n_bytes += stats->n_bytes;
3185     rule->stats.used = MAX(rule->stats.used, stats->used);
3186     ovs_mutex_unlock(&rule->stats_mutex);
3187 }
3188
3189 ovs_be64
3190 rule_dpif_get_flow_cookie(const struct rule_dpif *rule)
3191     OVS_REQUIRES(rule->up.mutex)
3192 {
3193     return rule->up.flow_cookie;
3194 }
3195
3196 void
3197 rule_dpif_reduce_timeouts(struct rule_dpif *rule, uint16_t idle_timeout,
3198                      uint16_t hard_timeout)
3199 {
3200     ofproto_rule_reduce_timeouts(&rule->up, idle_timeout, hard_timeout);
3201 }
3202
3203 /* Returns 'rule''s actions.  The caller owns a reference on the returned
3204  * actions and must eventually release it (with rule_actions_unref()) to avoid
3205  * a memory leak. */
3206 const struct rule_actions *
3207 rule_dpif_get_actions(const struct rule_dpif *rule)
3208 {
3209     return rule_get_actions(&rule->up);
3210 }
3211
3212 /* Lookup 'flow' in table 0 of 'ofproto''s classifier.
3213  * If 'wc' is non-null, sets the fields that were relevant as part of
3214  * the lookup. Returns the table_id where a match or miss occurred.
3215  *
3216  * The return value will be zero unless there was a miss and
3217  * OFPTC11_TABLE_MISS_CONTINUE is in effect for the sequence of tables
3218  * where misses occur.
3219  *
3220  * The rule is returned in '*rule', which is valid at least until the next
3221  * RCU quiescent period.  If the '*rule' needs to stay around longer,
3222  * a non-zero 'take_ref' must be passed in to cause a reference to be taken
3223  * on it before this returns. */
3224 uint8_t
3225 rule_dpif_lookup(struct ofproto_dpif *ofproto, struct flow *flow,
3226                  struct flow_wildcards *wc, struct rule_dpif **rule,
3227                  bool take_ref)
3228 {
3229     enum rule_dpif_lookup_verdict verdict;
3230     enum ofputil_port_config config = 0;
3231     uint8_t table_id;
3232
3233     if (ofproto_dpif_get_enable_recirc(ofproto)) {
3234         /* Always exactly match recirc_id since datapath supports
3235          * recirculation.  */
3236         if (wc) {
3237             wc->masks.recirc_id = UINT32_MAX;
3238         }
3239         table_id = rule_dpif_lookup_get_init_table_id(flow);
3240     } else {
3241         table_id = 0;
3242     }
3243
3244     verdict = rule_dpif_lookup_from_table(ofproto, flow, wc, true,
3245                                           &table_id, rule, take_ref);
3246
3247     switch (verdict) {
3248     case RULE_DPIF_LOOKUP_VERDICT_MATCH:
3249         return table_id;
3250     case RULE_DPIF_LOOKUP_VERDICT_CONTROLLER: {
3251         struct ofport_dpif *port;
3252
3253         port = get_ofp_port(ofproto, flow->in_port.ofp_port);
3254         if (!port) {
3255             VLOG_WARN_RL(&rl, "packet-in on unknown OpenFlow port %"PRIu16,
3256                          flow->in_port.ofp_port);
3257         }
3258         config = port ? port->up.pp.config : 0;
3259         break;
3260     }
3261     case RULE_DPIF_LOOKUP_VERDICT_DROP:
3262         config = OFPUTIL_PC_NO_PACKET_IN;
3263         break;
3264     case RULE_DPIF_LOOKUP_VERDICT_DEFAULT:
3265         if (!connmgr_wants_packet_in_on_miss(ofproto->up.connmgr)) {
3266             config = OFPUTIL_PC_NO_PACKET_IN;
3267         }
3268         break;
3269     default:
3270         OVS_NOT_REACHED();
3271     }
3272
3273     choose_miss_rule(config, ofproto->miss_rule,
3274                      ofproto->no_packet_in_rule, rule, take_ref);
3275     return table_id;
3276 }
3277
3278 /* The returned rule is valid at least until the next RCU quiescent period.
3279  * If the '*rule' needs to stay around longer, a non-zero 'take_ref' must be
3280  * passed in to cause a reference to be taken on it before this returns. */
3281 static struct rule_dpif *
3282 rule_dpif_lookup_in_table(struct ofproto_dpif *ofproto, uint8_t table_id,
3283                           const struct flow *flow, struct flow_wildcards *wc,
3284                           bool take_ref)
3285 {
3286     struct classifier *cls = &ofproto->up.tables[table_id].cls;
3287     const struct cls_rule *cls_rule;
3288     struct rule_dpif *rule;
3289
3290     fat_rwlock_rdlock(&cls->rwlock);
3291     if (ofproto->up.frag_handling != OFPC_FRAG_NX_MATCH) {
3292         if (wc) {
3293             memset(&wc->masks.dl_type, 0xff, sizeof wc->masks.dl_type);
3294             if (is_ip_any(flow)) {
3295                 wc->masks.nw_frag |= FLOW_NW_FRAG_MASK;
3296             }
3297         }
3298
3299         if (flow->nw_frag & FLOW_NW_FRAG_ANY) {
3300             if (ofproto->up.frag_handling == OFPC_FRAG_NORMAL) {
3301                 /* We must pretend that transport ports are unavailable. */
3302                 struct flow ofpc_normal_flow = *flow;
3303                 ofpc_normal_flow.tp_src = htons(0);
3304                 ofpc_normal_flow.tp_dst = htons(0);
3305                 cls_rule = classifier_lookup(cls, &ofpc_normal_flow, wc);
3306             } else {
3307                 /* Must be OFPC_FRAG_DROP (we don't have OFPC_FRAG_REASM). */
3308                 cls_rule = &ofproto->drop_frags_rule->up.cr;
3309             }
3310         } else {
3311             cls_rule = classifier_lookup(cls, flow, wc);
3312         }
3313     } else {
3314         cls_rule = classifier_lookup(cls, flow, wc);
3315     }
3316
3317     rule = rule_dpif_cast(rule_from_cls_rule(cls_rule));
3318     if (take_ref) {
3319         rule_dpif_ref(rule);
3320     }
3321     fat_rwlock_unlock(&cls->rwlock);
3322
3323     return rule;
3324 }
3325
3326 /* Look up 'flow' in 'ofproto''s classifier starting from table '*table_id'.
3327  * Stores the rule that was found in '*rule', or NULL if none was found.
3328  * Updates 'wc', if nonnull, to reflect the fields that were used during the
3329  * lookup.
3330  *
3331  * If 'honor_table_miss' is true, the first lookup occurs in '*table_id', but
3332  * if none is found then the table miss configuration for that table is
3333  * honored, which can result in additional lookups in other OpenFlow tables.
3334  * In this case the function updates '*table_id' to reflect the final OpenFlow
3335  * table that was searched.
3336  *
3337  * If 'honor_table_miss' is false, then only one table lookup occurs, in
3338  * '*table_id'.
3339  *
3340  * Returns:
3341  *
3342  *    - RULE_DPIF_LOOKUP_VERDICT_MATCH if a rule (in '*rule') was found.
3343  *
3344  *    - RULE_OFPTC_TABLE_MISS_CONTROLLER if no rule was found and either:
3345  *      + 'honor_table_miss' is false
3346  *      + a table miss configuration specified that the packet should be
3347  *        sent to the controller in this case.
3348  *
3349  *    - RULE_DPIF_LOOKUP_VERDICT_DROP if no rule was found, 'honor_table_miss'
3350  *      is true and a table miss configuration specified that the packet
3351  *      should be dropped in this case.
3352  *
3353  *    - RULE_DPIF_LOOKUP_VERDICT_DEFAULT if no rule was found,
3354  *      'honor_table_miss' is true and a table miss configuration has
3355  *      not been specified in this case.
3356  *
3357  * The rule is returned in '*rule', which is valid at least until the next
3358  * RCU quiescent period.  If the '*rule' needs to stay around longer,
3359  * a non-zero 'take_ref' must be passed in to cause a reference to be taken
3360  * on it before this returns. */
3361 enum rule_dpif_lookup_verdict
3362 rule_dpif_lookup_from_table(struct ofproto_dpif *ofproto,
3363                             const struct flow *flow,
3364                             struct flow_wildcards *wc,
3365                             bool honor_table_miss,
3366                             uint8_t *table_id, struct rule_dpif **rule,
3367                             bool take_ref)
3368 {
3369     uint8_t next_id;
3370
3371     for (next_id = *table_id;
3372          next_id < ofproto->up.n_tables;
3373          next_id++, next_id += (next_id == TBL_INTERNAL))
3374     {
3375         *table_id = next_id;
3376         *rule = rule_dpif_lookup_in_table(ofproto, *table_id, flow, wc,
3377                                           take_ref);
3378         if (*rule) {
3379             return RULE_DPIF_LOOKUP_VERDICT_MATCH;
3380         } else if (!honor_table_miss) {
3381             return RULE_DPIF_LOOKUP_VERDICT_CONTROLLER;
3382         } else {
3383             switch (ofproto_table_get_config(&ofproto->up, *table_id)) {
3384             case OFPROTO_TABLE_MISS_CONTINUE:
3385                 break;
3386
3387             case OFPROTO_TABLE_MISS_CONTROLLER:
3388                 return RULE_DPIF_LOOKUP_VERDICT_CONTROLLER;
3389
3390             case OFPROTO_TABLE_MISS_DROP:
3391                 return RULE_DPIF_LOOKUP_VERDICT_DROP;
3392
3393             case OFPROTO_TABLE_MISS_DEFAULT:
3394                 return RULE_DPIF_LOOKUP_VERDICT_DEFAULT;
3395             }
3396         }
3397     }
3398
3399     return RULE_DPIF_LOOKUP_VERDICT_CONTROLLER;
3400 }
3401
3402 /* Given a port configuration (specified as zero if there's no port), chooses
3403  * which of 'miss_rule' and 'no_packet_in_rule' should be used in case of a
3404  * flow table miss.
3405  *
3406  * The rule is returned in '*rule', which is valid at least until the next
3407  * RCU quiescent period.  If the '*rule' needs to stay around longer,
3408  * a reference must be taken on it (rule_dpif_ref()).
3409  */
3410 void
3411 choose_miss_rule(enum ofputil_port_config config, struct rule_dpif *miss_rule,
3412                  struct rule_dpif *no_packet_in_rule, struct rule_dpif **rule,
3413                  bool take_ref)
3414 {
3415     *rule = config & OFPUTIL_PC_NO_PACKET_IN ? no_packet_in_rule : miss_rule;
3416     if (take_ref) {
3417         rule_dpif_ref(*rule);
3418     }
3419 }
3420
3421 static void
3422 complete_operation(struct rule_dpif *rule)
3423     OVS_REQUIRES(ofproto_mutex)
3424 {
3425     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
3426
3427     ofproto->backer->need_revalidate = REV_FLOW_TABLE;
3428     ofoperation_complete(rule->up.pending, 0);
3429 }
3430
3431 static struct rule_dpif *rule_dpif_cast(const struct rule *rule)
3432 {
3433     return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL;
3434 }
3435
3436 static struct rule *
3437 rule_alloc(void)
3438 {
3439     struct rule_dpif *rule = xmalloc(sizeof *rule);
3440     return &rule->up;
3441 }
3442
3443 static void
3444 rule_dealloc(struct rule *rule_)
3445 {
3446     struct rule_dpif *rule = rule_dpif_cast(rule_);
3447     free(rule);
3448 }
3449
3450 static enum ofperr
3451 rule_construct(struct rule *rule_)
3452     OVS_NO_THREAD_SAFETY_ANALYSIS
3453 {
3454     struct rule_dpif *rule = rule_dpif_cast(rule_);
3455     ovs_mutex_init_adaptive(&rule->stats_mutex);
3456     rule->stats.n_packets = 0;
3457     rule->stats.n_bytes = 0;
3458     rule->stats.used = rule->up.modified;
3459     return 0;
3460 }
3461
3462 static void
3463 rule_insert(struct rule *rule_)
3464     OVS_REQUIRES(ofproto_mutex)
3465 {
3466     struct rule_dpif *rule = rule_dpif_cast(rule_);
3467     complete_operation(rule);
3468 }
3469
3470 static void
3471 rule_delete(struct rule *rule_)
3472     OVS_REQUIRES(ofproto_mutex)
3473 {
3474     struct rule_dpif *rule = rule_dpif_cast(rule_);
3475     complete_operation(rule);
3476 }
3477
3478 static void
3479 rule_destruct(struct rule *rule_)
3480 {
3481     struct rule_dpif *rule = rule_dpif_cast(rule_);
3482     ovs_mutex_destroy(&rule->stats_mutex);
3483 }
3484
3485 static void
3486 rule_get_stats(struct rule *rule_, uint64_t *packets, uint64_t *bytes,
3487                long long int *used)
3488 {
3489     struct rule_dpif *rule = rule_dpif_cast(rule_);
3490
3491     ovs_mutex_lock(&rule->stats_mutex);
3492     *packets = rule->stats.n_packets;
3493     *bytes = rule->stats.n_bytes;
3494     *used = rule->stats.used;
3495     ovs_mutex_unlock(&rule->stats_mutex);
3496 }
3497
3498 static void
3499 rule_dpif_execute(struct rule_dpif *rule, const struct flow *flow,
3500                   struct ofpbuf *packet)
3501 {
3502     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
3503
3504     ofproto_dpif_execute_actions(ofproto, flow, rule, NULL, 0, packet);
3505 }
3506
3507 static enum ofperr
3508 rule_execute(struct rule *rule, const struct flow *flow,
3509              struct ofpbuf *packet)
3510 {
3511     rule_dpif_execute(rule_dpif_cast(rule), flow, packet);
3512     ofpbuf_delete(packet);
3513     return 0;
3514 }
3515
3516 static void
3517 rule_modify_actions(struct rule *rule_, bool reset_counters)
3518     OVS_REQUIRES(ofproto_mutex)
3519 {
3520     struct rule_dpif *rule = rule_dpif_cast(rule_);
3521
3522     if (reset_counters) {
3523         ovs_mutex_lock(&rule->stats_mutex);
3524         rule->stats.n_packets = 0;
3525         rule->stats.n_bytes = 0;
3526         ovs_mutex_unlock(&rule->stats_mutex);
3527     }
3528
3529     complete_operation(rule);
3530 }
3531
3532 static struct group_dpif *group_dpif_cast(const struct ofgroup *group)
3533 {
3534     return group ? CONTAINER_OF(group, struct group_dpif, up) : NULL;
3535 }
3536
3537 static struct ofgroup *
3538 group_alloc(void)
3539 {
3540     struct group_dpif *group = xzalloc(sizeof *group);
3541     return &group->up;
3542 }
3543
3544 static void
3545 group_dealloc(struct ofgroup *group_)
3546 {
3547     struct group_dpif *group = group_dpif_cast(group_);
3548     free(group);
3549 }
3550
3551 static void
3552 group_construct_stats(struct group_dpif *group)
3553     OVS_REQUIRES(group->stats_mutex)
3554 {
3555     group->packet_count = 0;
3556     group->byte_count = 0;
3557     if (!group->bucket_stats) {
3558         group->bucket_stats = xcalloc(group->up.n_buckets,
3559                                       sizeof *group->bucket_stats);
3560     } else {
3561         memset(group->bucket_stats, 0, group->up.n_buckets *
3562                sizeof *group->bucket_stats);
3563     }
3564 }
3565
3566 static enum ofperr
3567 group_construct(struct ofgroup *group_)
3568 {
3569     struct group_dpif *group = group_dpif_cast(group_);
3570     const struct ofputil_bucket *bucket;
3571
3572     /* Prevent group chaining because our locking structure makes it hard to
3573      * implement deadlock-free.  (See xlate_group_resource_check().) */
3574     LIST_FOR_EACH (bucket, list_node, &group->up.buckets) {
3575         const struct ofpact *a;
3576
3577         OFPACT_FOR_EACH (a, bucket->ofpacts, bucket->ofpacts_len) {
3578             if (a->type == OFPACT_GROUP) {
3579                 return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
3580             }
3581         }
3582     }
3583
3584     ovs_mutex_init_adaptive(&group->stats_mutex);
3585     ovs_mutex_lock(&group->stats_mutex);
3586     group_construct_stats(group);
3587     ovs_mutex_unlock(&group->stats_mutex);
3588     return 0;
3589 }
3590
3591 static void
3592 group_destruct__(struct group_dpif *group)
3593     OVS_REQUIRES(group->stats_mutex)
3594 {
3595     free(group->bucket_stats);
3596     group->bucket_stats = NULL;
3597 }
3598
3599 static void
3600 group_destruct(struct ofgroup *group_)
3601 {
3602     struct group_dpif *group = group_dpif_cast(group_);
3603     ovs_mutex_lock(&group->stats_mutex);
3604     group_destruct__(group);
3605     ovs_mutex_unlock(&group->stats_mutex);
3606     ovs_mutex_destroy(&group->stats_mutex);
3607 }
3608
3609 static enum ofperr
3610 group_modify(struct ofgroup *group_, struct ofgroup *victim_)
3611 {
3612     struct ofproto_dpif *ofproto = ofproto_dpif_cast(group_->ofproto);
3613     struct group_dpif *group = group_dpif_cast(group_);
3614     struct group_dpif *victim = group_dpif_cast(victim_);
3615
3616     ovs_mutex_lock(&group->stats_mutex);
3617     if (victim->up.n_buckets < group->up.n_buckets) {
3618         group_destruct__(group);
3619     }
3620     group_construct_stats(group);
3621     ovs_mutex_unlock(&group->stats_mutex);
3622
3623     ofproto->backer->need_revalidate = REV_FLOW_TABLE;
3624
3625     return 0;
3626 }
3627
3628 static enum ofperr
3629 group_get_stats(const struct ofgroup *group_, struct ofputil_group_stats *ogs)
3630 {
3631     struct group_dpif *group = group_dpif_cast(group_);
3632
3633     ovs_mutex_lock(&group->stats_mutex);
3634     ogs->packet_count = group->packet_count;
3635     ogs->byte_count = group->byte_count;
3636     memcpy(ogs->bucket_stats, group->bucket_stats,
3637            group->up.n_buckets * sizeof *group->bucket_stats);
3638     ovs_mutex_unlock(&group->stats_mutex);
3639
3640     return 0;
3641 }
3642
3643 bool
3644 group_dpif_lookup(struct ofproto_dpif *ofproto, uint32_t group_id,
3645                   struct group_dpif **group)
3646     OVS_TRY_RDLOCK(true, (*group)->up.rwlock)
3647 {
3648     struct ofgroup *ofgroup;
3649     bool found;
3650
3651     *group = NULL;
3652     found = ofproto_group_lookup(&ofproto->up, group_id, &ofgroup);
3653     *group = found ?  group_dpif_cast(ofgroup) : NULL;
3654
3655     return found;
3656 }
3657
3658 void
3659 group_dpif_release(struct group_dpif *group)
3660     OVS_RELEASES(group->up.rwlock)
3661 {
3662     ofproto_group_release(&group->up);
3663 }
3664
3665 void
3666 group_dpif_get_buckets(const struct group_dpif *group,
3667                        const struct list **buckets)
3668 {
3669     *buckets = &group->up.buckets;
3670 }
3671
3672 enum ofp11_group_type
3673 group_dpif_get_type(const struct group_dpif *group)
3674 {
3675     return group->up.type;
3676 }
3677 \f
3678 /* Sends 'packet' out 'ofport'.
3679  * May modify 'packet'.
3680  * Returns 0 if successful, otherwise a positive errno value. */
3681 int
3682 ofproto_dpif_send_packet(const struct ofport_dpif *ofport, struct ofpbuf *packet)
3683 {
3684     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
3685     int error;
3686
3687     error = xlate_send_packet(ofport, packet);
3688
3689     ovs_mutex_lock(&ofproto->stats_mutex);
3690     ofproto->stats.tx_packets++;
3691     ofproto->stats.tx_bytes += ofpbuf_size(packet);
3692     ovs_mutex_unlock(&ofproto->stats_mutex);
3693     return error;
3694 }
3695 \f
3696 static bool
3697 set_frag_handling(struct ofproto *ofproto_,
3698                   enum ofp_config_flags frag_handling)
3699 {
3700     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3701     if (frag_handling != OFPC_FRAG_REASM) {
3702         ofproto->backer->need_revalidate = REV_RECONFIGURE;
3703         return true;
3704     } else {
3705         return false;
3706     }
3707 }
3708
3709 static enum ofperr
3710 packet_out(struct ofproto *ofproto_, struct ofpbuf *packet,
3711            const struct flow *flow,
3712            const struct ofpact *ofpacts, size_t ofpacts_len)
3713 {
3714     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3715
3716     ofproto_dpif_execute_actions(ofproto, flow, NULL, ofpacts,
3717                                  ofpacts_len, packet);
3718     return 0;
3719 }
3720 \f
3721 /* NetFlow. */
3722
3723 static int
3724 set_netflow(struct ofproto *ofproto_,
3725             const struct netflow_options *netflow_options)
3726 {
3727     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3728
3729     if (netflow_options) {
3730         if (!ofproto->netflow) {
3731             ofproto->netflow = netflow_create();
3732             ofproto->backer->need_revalidate = REV_RECONFIGURE;
3733         }
3734         return netflow_set_options(ofproto->netflow, netflow_options);
3735     } else if (ofproto->netflow) {
3736         ofproto->backer->need_revalidate = REV_RECONFIGURE;
3737         netflow_unref(ofproto->netflow);
3738         ofproto->netflow = NULL;
3739     }
3740
3741     return 0;
3742 }
3743
3744 static void
3745 get_netflow_ids(const struct ofproto *ofproto_,
3746                 uint8_t *engine_type, uint8_t *engine_id)
3747 {
3748     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3749
3750     dpif_get_netflow_ids(ofproto->backer->dpif, engine_type, engine_id);
3751 }
3752 \f
3753 static struct ofproto_dpif *
3754 ofproto_dpif_lookup(const char *name)
3755 {
3756     struct ofproto_dpif *ofproto;
3757
3758     HMAP_FOR_EACH_WITH_HASH (ofproto, all_ofproto_dpifs_node,
3759                              hash_string(name, 0), &all_ofproto_dpifs) {
3760         if (!strcmp(ofproto->up.name, name)) {
3761             return ofproto;
3762         }
3763     }
3764     return NULL;
3765 }
3766
3767 static void
3768 ofproto_unixctl_fdb_flush(struct unixctl_conn *conn, int argc,
3769                           const char *argv[], void *aux OVS_UNUSED)
3770 {
3771     struct ofproto_dpif *ofproto;
3772
3773     if (argc > 1) {
3774         ofproto = ofproto_dpif_lookup(argv[1]);
3775         if (!ofproto) {
3776             unixctl_command_reply_error(conn, "no such bridge");
3777             return;
3778         }
3779         ovs_rwlock_wrlock(&ofproto->ml->rwlock);
3780         mac_learning_flush(ofproto->ml);
3781         ovs_rwlock_unlock(&ofproto->ml->rwlock);
3782     } else {
3783         HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
3784             ovs_rwlock_wrlock(&ofproto->ml->rwlock);
3785             mac_learning_flush(ofproto->ml);
3786             ovs_rwlock_unlock(&ofproto->ml->rwlock);
3787         }
3788     }
3789
3790     unixctl_command_reply(conn, "table successfully flushed");
3791 }
3792
3793 static struct ofport_dpif *
3794 ofbundle_get_a_port(const struct ofbundle *bundle)
3795 {
3796     return CONTAINER_OF(list_front(&bundle->ports), struct ofport_dpif,
3797                         bundle_node);
3798 }
3799
3800 static void
3801 ofproto_unixctl_fdb_show(struct unixctl_conn *conn, int argc OVS_UNUSED,
3802                          const char *argv[], void *aux OVS_UNUSED)
3803 {
3804     struct ds ds = DS_EMPTY_INITIALIZER;
3805     const struct ofproto_dpif *ofproto;
3806     const struct mac_entry *e;
3807
3808     ofproto = ofproto_dpif_lookup(argv[1]);
3809     if (!ofproto) {
3810         unixctl_command_reply_error(conn, "no such bridge");
3811         return;
3812     }
3813
3814     ds_put_cstr(&ds, " port  VLAN  MAC                Age\n");
3815     ovs_rwlock_rdlock(&ofproto->ml->rwlock);
3816     LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) {
3817         struct ofbundle *bundle = e->port.p;
3818         char name[OFP_MAX_PORT_NAME_LEN];
3819
3820         ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port,
3821                                name, sizeof name);
3822         ds_put_format(&ds, "%5s  %4d  "ETH_ADDR_FMT"  %3d\n",
3823                       name, e->vlan, ETH_ADDR_ARGS(e->mac),
3824                       mac_entry_age(ofproto->ml, e));
3825     }
3826     ovs_rwlock_unlock(&ofproto->ml->rwlock);
3827     unixctl_command_reply(conn, ds_cstr(&ds));
3828     ds_destroy(&ds);
3829 }
3830
3831 struct trace_ctx {
3832     struct xlate_out xout;
3833     struct xlate_in xin;
3834     const struct flow *key;
3835     struct flow flow;
3836     struct flow_wildcards wc;
3837     struct ds *result;
3838 };
3839
3840 static void
3841 trace_format_rule(struct ds *result, int level, const struct rule_dpif *rule)
3842 {
3843     const struct rule_actions *actions;
3844     ovs_be64 cookie;
3845
3846     ds_put_char_multiple(result, '\t', level);
3847     if (!rule) {
3848         ds_put_cstr(result, "No match\n");
3849         return;
3850     }
3851
3852     ovs_mutex_lock(&rule->up.mutex);
3853     cookie = rule->up.flow_cookie;
3854     ovs_mutex_unlock(&rule->up.mutex);
3855
3856     ds_put_format(result, "Rule: table=%"PRIu8" cookie=%#"PRIx64" ",
3857                   rule ? rule->up.table_id : 0, ntohll(cookie));
3858     cls_rule_format(&rule->up.cr, result);
3859     ds_put_char(result, '\n');
3860
3861     actions = rule_dpif_get_actions(rule);
3862
3863     ds_put_char_multiple(result, '\t', level);
3864     ds_put_cstr(result, "OpenFlow actions=");
3865     ofpacts_format(actions->ofpacts, actions->ofpacts_len, result);
3866     ds_put_char(result, '\n');
3867 }
3868
3869 static void
3870 trace_format_flow(struct ds *result, int level, const char *title,
3871                   struct trace_ctx *trace)
3872 {
3873     ds_put_char_multiple(result, '\t', level);
3874     ds_put_format(result, "%s: ", title);
3875     /* Do not report unchanged flows for resubmits. */
3876     if ((level > 0 && flow_equal(&trace->xin.flow, &trace->flow))
3877         || (level == 0 && flow_equal(&trace->xin.flow, trace->key))) {
3878         ds_put_cstr(result, "unchanged");
3879     } else {
3880         flow_format(result, &trace->xin.flow);
3881         trace->flow = trace->xin.flow;
3882     }
3883     ds_put_char(result, '\n');
3884 }
3885
3886 static void
3887 trace_format_regs(struct ds *result, int level, const char *title,
3888                   struct trace_ctx *trace)
3889 {
3890     size_t i;
3891
3892     ds_put_char_multiple(result, '\t', level);
3893     ds_put_format(result, "%s:", title);
3894     for (i = 0; i < FLOW_N_REGS; i++) {
3895         ds_put_format(result, " reg%"PRIuSIZE"=0x%"PRIx32, i, trace->flow.regs[i]);
3896     }
3897     ds_put_char(result, '\n');
3898 }
3899
3900 static void
3901 trace_format_odp(struct ds *result, int level, const char *title,
3902                  struct trace_ctx *trace)
3903 {
3904     struct ofpbuf *odp_actions = &trace->xout.odp_actions;
3905
3906     ds_put_char_multiple(result, '\t', level);
3907     ds_put_format(result, "%s: ", title);
3908     format_odp_actions(result, ofpbuf_data(odp_actions),
3909                                ofpbuf_size(odp_actions));
3910     ds_put_char(result, '\n');
3911 }
3912
3913 static void
3914 trace_format_megaflow(struct ds *result, int level, const char *title,
3915                       struct trace_ctx *trace)
3916 {
3917     struct match match;
3918
3919     ds_put_char_multiple(result, '\t', level);
3920     ds_put_format(result, "%s: ", title);
3921     flow_wildcards_or(&trace->wc, &trace->xout.wc, &trace->wc);
3922     match_init(&match, trace->key, &trace->wc);
3923     match_format(&match, result, OFP_DEFAULT_PRIORITY);
3924     ds_put_char(result, '\n');
3925 }
3926
3927 static void
3928 trace_resubmit(struct xlate_in *xin, struct rule_dpif *rule, int recurse)
3929 {
3930     struct trace_ctx *trace = CONTAINER_OF(xin, struct trace_ctx, xin);
3931     struct ds *result = trace->result;
3932
3933     ds_put_char(result, '\n');
3934     trace_format_flow(result, recurse + 1, "Resubmitted flow", trace);
3935     trace_format_regs(result, recurse + 1, "Resubmitted regs", trace);
3936     trace_format_odp(result,  recurse + 1, "Resubmitted  odp", trace);
3937     trace_format_megaflow(result, recurse + 1, "Resubmitted megaflow", trace);
3938     trace_format_rule(result, recurse + 1, rule);
3939 }
3940
3941 static void
3942 trace_report(struct xlate_in *xin, const char *s, int recurse)
3943 {
3944     struct trace_ctx *trace = CONTAINER_OF(xin, struct trace_ctx, xin);
3945     struct ds *result = trace->result;
3946
3947     ds_put_char_multiple(result, '\t', recurse);
3948     ds_put_cstr(result, s);
3949     ds_put_char(result, '\n');
3950 }
3951
3952 /* Parses the 'argc' elements of 'argv', ignoring argv[0].  The following
3953  * forms are supported:
3954  *
3955  *     - [dpname] odp_flow [-generate | packet]
3956  *     - bridge br_flow [-generate | packet]
3957  *
3958  * On success, initializes '*ofprotop' and 'flow' and returns NULL.  On failure
3959  * returns a nonnull malloced error message. */
3960 static char * WARN_UNUSED_RESULT
3961 parse_flow_and_packet(int argc, const char *argv[],
3962                       struct ofproto_dpif **ofprotop, struct flow *flow,
3963                       struct ofpbuf **packetp)
3964 {
3965     const struct dpif_backer *backer = NULL;
3966     const char *error = NULL;
3967     char *m_err = NULL;
3968     struct simap port_names = SIMAP_INITIALIZER(&port_names);
3969     struct ofpbuf *packet;
3970     struct ofpbuf odp_key;
3971     struct ofpbuf odp_mask;
3972
3973     ofpbuf_init(&odp_key, 0);
3974     ofpbuf_init(&odp_mask, 0);
3975
3976     /* Handle "-generate" or a hex string as the last argument. */
3977     if (!strcmp(argv[argc - 1], "-generate")) {
3978         packet = ofpbuf_new(0);
3979         argc--;
3980     } else {
3981         error = eth_from_hex(argv[argc - 1], &packet);
3982         if (!error) {
3983             argc--;
3984         } else if (argc == 4) {
3985             /* The 3-argument form must end in "-generate' or a hex string. */
3986             goto exit;
3987         }
3988         error = NULL;
3989     }
3990
3991     /* odp_flow can have its in_port specified as a name instead of port no.
3992      * We do not yet know whether a given flow is a odp_flow or a br_flow.
3993      * But, to know whether a flow is odp_flow through odp_flow_from_string(),
3994      * we need to create a simap of name to port no. */
3995     if (argc == 3) {
3996         const char *dp_type;
3997         if (!strncmp(argv[1], "ovs-", 4)) {
3998             dp_type = argv[1] + 4;
3999         } else {
4000             dp_type = argv[1];
4001         }
4002         backer = shash_find_data(&all_dpif_backers, dp_type);
4003     } else if (argc == 2) {
4004         struct shash_node *node;
4005         if (shash_count(&all_dpif_backers) == 1) {
4006             node = shash_first(&all_dpif_backers);
4007             backer = node->data;
4008         }
4009     } else {
4010         error = "Syntax error";
4011         goto exit;
4012     }
4013     if (backer && backer->dpif) {
4014         struct dpif_port dpif_port;
4015         struct dpif_port_dump port_dump;
4016         DPIF_PORT_FOR_EACH (&dpif_port, &port_dump, backer->dpif) {
4017             simap_put(&port_names, dpif_port.name,
4018                       odp_to_u32(dpif_port.port_no));
4019         }
4020     }
4021
4022     /* Parse the flow and determine whether a datapath or
4023      * bridge is specified. If function odp_flow_key_from_string()
4024      * returns 0, the flow is a odp_flow. If function
4025      * parse_ofp_exact_flow() returns NULL, the flow is a br_flow. */
4026     if (!odp_flow_from_string(argv[argc - 1], &port_names,
4027                               &odp_key, &odp_mask)) {
4028         if (!backer) {
4029             error = "Cannot find the datapath";
4030             goto exit;
4031         }
4032
4033         if (xlate_receive(backer, NULL, ofpbuf_data(&odp_key),
4034                           ofpbuf_size(&odp_key), flow,
4035                           ofprotop, NULL, NULL, NULL, NULL)) {
4036             error = "Invalid datapath flow";
4037             goto exit;
4038         }
4039     } else {
4040         char *err = parse_ofp_exact_flow(flow, NULL, argv[argc - 1], NULL);
4041
4042         if (err) {
4043             m_err = xasprintf("Bad flow syntax: %s", err);
4044             free(err);
4045             goto exit;
4046         } else {
4047             if (argc != 3) {
4048                 error = "Must specify bridge name";
4049                 goto exit;
4050             }
4051
4052             *ofprotop = ofproto_dpif_lookup(argv[1]);
4053             if (!*ofprotop) {
4054                 error = "Unknown bridge name";
4055                 goto exit;
4056             }
4057         }
4058     }
4059
4060     /* Generate a packet, if requested. */
4061     if (packet) {
4062         if (!ofpbuf_size(packet)) {
4063             flow_compose(packet, flow);
4064         } else {
4065             struct pkt_metadata md = pkt_metadata_from_flow(flow);
4066
4067             /* Use the metadata from the flow and the packet argument
4068              * to reconstruct the flow. */
4069             flow_extract(packet, &md, flow);
4070         }
4071     }
4072
4073 exit:
4074     if (error && !m_err) {
4075         m_err = xstrdup(error);
4076     }
4077     if (m_err) {
4078         ofpbuf_delete(packet);
4079         packet = NULL;
4080     }
4081     *packetp = packet;
4082     ofpbuf_uninit(&odp_key);
4083     ofpbuf_uninit(&odp_mask);
4084     simap_destroy(&port_names);
4085     return m_err;
4086 }
4087
4088 static void
4089 ofproto_unixctl_trace(struct unixctl_conn *conn, int argc, const char *argv[],
4090                       void *aux OVS_UNUSED)
4091 {
4092     struct ofproto_dpif *ofproto;
4093     struct ofpbuf *packet;
4094     char *error;
4095     struct flow flow;
4096
4097     error = parse_flow_and_packet(argc, argv, &ofproto, &flow, &packet);
4098     if (!error) {
4099         struct ds result;
4100
4101         ds_init(&result);
4102         ofproto_trace(ofproto, &flow, packet, NULL, 0, &result);
4103         unixctl_command_reply(conn, ds_cstr(&result));
4104         ds_destroy(&result);
4105         ofpbuf_delete(packet);
4106     } else {
4107         unixctl_command_reply_error(conn, error);
4108         free(error);
4109     }
4110 }
4111
4112 static void
4113 ofproto_unixctl_trace_actions(struct unixctl_conn *conn, int argc,
4114                               const char *argv[], void *aux OVS_UNUSED)
4115 {
4116     enum ofputil_protocol usable_protocols;
4117     struct ofproto_dpif *ofproto;
4118     bool enforce_consistency;
4119     struct ofpbuf ofpacts;
4120     struct ofpbuf *packet;
4121     struct ds result;
4122     struct flow flow;
4123     uint16_t in_port;
4124
4125     /* Three kinds of error return values! */
4126     enum ofperr retval;
4127     char *error;
4128
4129     packet = NULL;
4130     ds_init(&result);
4131     ofpbuf_init(&ofpacts, 0);
4132
4133     /* Parse actions. */
4134     error = parse_ofpacts(argv[--argc], &ofpacts, &usable_protocols);
4135     if (error) {
4136         unixctl_command_reply_error(conn, error);
4137         free(error);
4138         goto exit;
4139     }
4140
4141     /* OpenFlow 1.1 and later suggest that the switch enforces certain forms of
4142      * consistency between the flow and the actions.  With -consistent, we
4143      * enforce consistency even for a flow supported in OpenFlow 1.0. */
4144     if (!strcmp(argv[1], "-consistent")) {
4145         enforce_consistency = true;
4146         argv++;
4147         argc--;
4148     } else {
4149         enforce_consistency = false;
4150     }
4151
4152     error = parse_flow_and_packet(argc, argv, &ofproto, &flow, &packet);
4153     if (error) {
4154         unixctl_command_reply_error(conn, error);
4155         free(error);
4156         goto exit;
4157     }
4158
4159     /* Do the same checks as handle_packet_out() in ofproto.c.
4160      *
4161      * We pass a 'table_id' of 0 to ofproto_check_ofpacts(), which isn't
4162      * strictly correct because these actions aren't in any table, but it's OK
4163      * because it 'table_id' is used only to check goto_table instructions, but
4164      * packet-outs take a list of actions and therefore it can't include
4165      * instructions.
4166      *
4167      * We skip the "meter" check here because meter is an instruction, not an
4168      * action, and thus cannot appear in ofpacts. */
4169     in_port = ofp_to_u16(flow.in_port.ofp_port);
4170     if (in_port >= ofproto->up.max_ports && in_port < ofp_to_u16(OFPP_MAX)) {
4171         unixctl_command_reply_error(conn, "invalid in_port");
4172         goto exit;
4173     }
4174     if (enforce_consistency) {
4175         retval = ofpacts_check_consistency(ofpbuf_data(&ofpacts), ofpbuf_size(&ofpacts),
4176                                            &flow, u16_to_ofp(ofproto->up.max_ports),
4177                                            0, 0, usable_protocols);
4178     } else {
4179         retval = ofpacts_check(ofpbuf_data(&ofpacts), ofpbuf_size(&ofpacts), &flow,
4180                                u16_to_ofp(ofproto->up.max_ports), 0, 0,
4181                                &usable_protocols);
4182     }
4183
4184     if (retval) {
4185         ds_clear(&result);
4186         ds_put_format(&result, "Bad actions: %s", ofperr_to_string(retval));
4187         unixctl_command_reply_error(conn, ds_cstr(&result));
4188         goto exit;
4189     }
4190
4191     ofproto_trace(ofproto, &flow, packet,
4192                   ofpbuf_data(&ofpacts), ofpbuf_size(&ofpacts), &result);
4193     unixctl_command_reply(conn, ds_cstr(&result));
4194
4195 exit:
4196     ds_destroy(&result);
4197     ofpbuf_delete(packet);
4198     ofpbuf_uninit(&ofpacts);
4199 }
4200
4201 /* Implements a "trace" through 'ofproto''s flow table, appending a textual
4202  * description of the results to 'ds'.
4203  *
4204  * The trace follows a packet with the specified 'flow' through the flow
4205  * table.  'packet' may be nonnull to trace an actual packet, with consequent
4206  * side effects (if it is nonnull then its flow must be 'flow').
4207  *
4208  * If 'ofpacts' is nonnull then its 'ofpacts_len' bytes specify the actions to
4209  * trace, otherwise the actions are determined by a flow table lookup. */
4210 static void
4211 ofproto_trace(struct ofproto_dpif *ofproto, struct flow *flow,
4212               const struct ofpbuf *packet,
4213               const struct ofpact ofpacts[], size_t ofpacts_len,
4214               struct ds *ds)
4215 {
4216     struct rule_dpif *rule;
4217     struct trace_ctx trace;
4218
4219     ds_put_format(ds, "Bridge: %s\n", ofproto->up.name);
4220     ds_put_cstr(ds, "Flow: ");
4221     flow_format(ds, flow);
4222     ds_put_char(ds, '\n');
4223
4224     flow_wildcards_init_catchall(&trace.wc);
4225     if (ofpacts) {
4226         rule = NULL;
4227     } else {
4228         rule_dpif_lookup(ofproto, flow, &trace.wc, &rule, false);
4229
4230         trace_format_rule(ds, 0, rule);
4231         if (rule == ofproto->miss_rule) {
4232             ds_put_cstr(ds, "\nNo match, flow generates \"packet in\"s.\n");
4233         } else if (rule == ofproto->no_packet_in_rule) {
4234             ds_put_cstr(ds, "\nNo match, packets dropped because "
4235                         "OFPPC_NO_PACKET_IN is set on in_port.\n");
4236         } else if (rule == ofproto->drop_frags_rule) {
4237             ds_put_cstr(ds, "\nPackets dropped because they are IP fragments "
4238                         "and the fragment handling mode is \"drop\".\n");
4239         }
4240     }
4241
4242     if (rule || ofpacts) {
4243         trace.result = ds;
4244         trace.key = flow; /* Original flow key, used for megaflow. */
4245         trace.flow = *flow; /* May be modified by actions. */
4246         xlate_in_init(&trace.xin, ofproto, flow, rule, ntohs(flow->tcp_flags),
4247                       packet);
4248         if (ofpacts) {
4249             trace.xin.ofpacts = ofpacts;
4250             trace.xin.ofpacts_len = ofpacts_len;
4251         }
4252         trace.xin.resubmit_hook = trace_resubmit;
4253         trace.xin.report_hook = trace_report;
4254
4255         xlate_actions(&trace.xin, &trace.xout);
4256
4257         ds_put_char(ds, '\n');
4258         trace_format_flow(ds, 0, "Final flow", &trace);
4259         trace_format_megaflow(ds, 0, "Megaflow", &trace);
4260
4261         ds_put_cstr(ds, "Datapath actions: ");
4262         format_odp_actions(ds, ofpbuf_data(&trace.xout.odp_actions),
4263                            ofpbuf_size(&trace.xout.odp_actions));
4264
4265         if (trace.xout.slow) {
4266             enum slow_path_reason slow;
4267
4268             ds_put_cstr(ds, "\nThis flow is handled by the userspace "
4269                         "slow path because it:");
4270
4271             slow = trace.xout.slow;
4272             while (slow) {
4273                 enum slow_path_reason bit = rightmost_1bit(slow);
4274
4275                 ds_put_format(ds, "\n\t- %s.",
4276                               slow_path_reason_to_explanation(bit));
4277
4278                 slow &= ~bit;
4279             }
4280         }
4281
4282         xlate_out_uninit(&trace.xout);
4283     }
4284 }
4285
4286 /* Store the current ofprotos in 'ofproto_shash'.  Returns a sorted list
4287  * of the 'ofproto_shash' nodes.  It is the responsibility of the caller
4288  * to destroy 'ofproto_shash' and free the returned value. */
4289 static const struct shash_node **
4290 get_ofprotos(struct shash *ofproto_shash)
4291 {
4292     const struct ofproto_dpif *ofproto;
4293
4294     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
4295         char *name = xasprintf("%s@%s", ofproto->up.type, ofproto->up.name);
4296         shash_add_nocopy(ofproto_shash, name, ofproto);
4297     }
4298
4299     return shash_sort(ofproto_shash);
4300 }
4301
4302 static void
4303 ofproto_unixctl_dpif_dump_dps(struct unixctl_conn *conn, int argc OVS_UNUSED,
4304                               const char *argv[] OVS_UNUSED,
4305                               void *aux OVS_UNUSED)
4306 {
4307     struct ds ds = DS_EMPTY_INITIALIZER;
4308     struct shash ofproto_shash;
4309     const struct shash_node **sorted_ofprotos;
4310     int i;
4311
4312     shash_init(&ofproto_shash);
4313     sorted_ofprotos = get_ofprotos(&ofproto_shash);
4314     for (i = 0; i < shash_count(&ofproto_shash); i++) {
4315         const struct shash_node *node = sorted_ofprotos[i];
4316         ds_put_format(&ds, "%s\n", node->name);
4317     }
4318
4319     shash_destroy(&ofproto_shash);
4320     free(sorted_ofprotos);
4321
4322     unixctl_command_reply(conn, ds_cstr(&ds));
4323     ds_destroy(&ds);
4324 }
4325
4326 static void
4327 dpif_show_backer(const struct dpif_backer *backer, struct ds *ds)
4328 {
4329     const struct shash_node **ofprotos;
4330     struct dpif_dp_stats dp_stats;
4331     struct shash ofproto_shash;
4332     size_t i;
4333
4334     dpif_get_dp_stats(backer->dpif, &dp_stats);
4335
4336     ds_put_format(ds, "%s: hit:%"PRIu64" missed:%"PRIu64"\n",
4337                   dpif_name(backer->dpif), dp_stats.n_hit, dp_stats.n_missed);
4338
4339     shash_init(&ofproto_shash);
4340     ofprotos = get_ofprotos(&ofproto_shash);
4341     for (i = 0; i < shash_count(&ofproto_shash); i++) {
4342         struct ofproto_dpif *ofproto = ofprotos[i]->data;
4343         const struct shash_node **ports;
4344         size_t j;
4345
4346         if (ofproto->backer != backer) {
4347             continue;
4348         }
4349
4350         ds_put_format(ds, "\t%s:\n", ofproto->up.name);
4351
4352         ports = shash_sort(&ofproto->up.port_by_name);
4353         for (j = 0; j < shash_count(&ofproto->up.port_by_name); j++) {
4354             const struct shash_node *node = ports[j];
4355             struct ofport *ofport = node->data;
4356             struct smap config;
4357             odp_port_t odp_port;
4358
4359             ds_put_format(ds, "\t\t%s %u/", netdev_get_name(ofport->netdev),
4360                           ofport->ofp_port);
4361
4362             odp_port = ofp_port_to_odp_port(ofproto, ofport->ofp_port);
4363             if (odp_port != ODPP_NONE) {
4364                 ds_put_format(ds, "%"PRIu32":", odp_port);
4365             } else {
4366                 ds_put_cstr(ds, "none:");
4367             }
4368
4369             ds_put_format(ds, " (%s", netdev_get_type(ofport->netdev));
4370
4371             smap_init(&config);
4372             if (!netdev_get_config(ofport->netdev, &config)) {
4373                 const struct smap_node **nodes;
4374                 size_t i;
4375
4376                 nodes = smap_sort(&config);
4377                 for (i = 0; i < smap_count(&config); i++) {
4378                     const struct smap_node *node = nodes[i];
4379                     ds_put_format(ds, "%c %s=%s", i ? ',' : ':',
4380                                   node->key, node->value);
4381                 }
4382                 free(nodes);
4383             }
4384             smap_destroy(&config);
4385
4386             ds_put_char(ds, ')');
4387             ds_put_char(ds, '\n');
4388         }
4389         free(ports);
4390     }
4391     shash_destroy(&ofproto_shash);
4392     free(ofprotos);
4393 }
4394
4395 static void
4396 ofproto_unixctl_dpif_show(struct unixctl_conn *conn, int argc OVS_UNUSED,
4397                           const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED)
4398 {
4399     struct ds ds = DS_EMPTY_INITIALIZER;
4400     const struct shash_node **backers;
4401     int i;
4402
4403     backers = shash_sort(&all_dpif_backers);
4404     for (i = 0; i < shash_count(&all_dpif_backers); i++) {
4405         dpif_show_backer(backers[i]->data, &ds);
4406     }
4407     free(backers);
4408
4409     unixctl_command_reply(conn, ds_cstr(&ds));
4410     ds_destroy(&ds);
4411 }
4412
4413 static bool
4414 ofproto_dpif_contains_flow(const struct ofproto_dpif *ofproto,
4415                            const struct nlattr *key, size_t key_len)
4416 {
4417     struct ofproto_dpif *ofp;
4418     struct flow flow;
4419
4420     xlate_receive(ofproto->backer, NULL, key, key_len, &flow, &ofp,
4421                   NULL, NULL, NULL, NULL);
4422     return ofp == ofproto;
4423 }
4424
4425 static void
4426 ofproto_unixctl_dpif_dump_flows(struct unixctl_conn *conn,
4427                                 int argc OVS_UNUSED, const char *argv[],
4428                                 void *aux OVS_UNUSED)
4429 {
4430     struct ds ds = DS_EMPTY_INITIALIZER;
4431     const struct dpif_flow_stats *stats;
4432     const struct ofproto_dpif *ofproto;
4433     struct dpif_flow_dump flow_dump;
4434     const struct nlattr *actions;
4435     const struct nlattr *mask;
4436     const struct nlattr *key;
4437     size_t actions_len;
4438     size_t mask_len;
4439     size_t key_len;
4440     bool verbosity = false;
4441     struct dpif_port dpif_port;
4442     struct dpif_port_dump port_dump;
4443     struct hmap portno_names;
4444     void *state = NULL;
4445     int error;
4446
4447     ofproto = ofproto_dpif_lookup(argv[argc - 1]);
4448     if (!ofproto) {
4449         unixctl_command_reply_error(conn, "no such bridge");
4450         return;
4451     }
4452
4453     if (argc > 2 && !strcmp(argv[1], "-m")) {
4454         verbosity = true;
4455     }
4456
4457     hmap_init(&portno_names);
4458     DPIF_PORT_FOR_EACH (&dpif_port, &port_dump, ofproto->backer->dpif) {
4459         odp_portno_names_set(&portno_names, dpif_port.port_no, dpif_port.name);
4460     }
4461
4462     ds_init(&ds);
4463     error = dpif_flow_dump_start(&flow_dump, ofproto->backer->dpif);
4464     if (error) {
4465         goto exit;
4466     }
4467     dpif_flow_dump_state_init(ofproto->backer->dpif, &state);
4468     while (dpif_flow_dump_next(&flow_dump, state, &key, &key_len,
4469                                &mask, &mask_len, &actions, &actions_len,
4470                                &stats)) {
4471         if (!ofproto_dpif_contains_flow(ofproto, key, key_len)) {
4472             continue;
4473         }
4474
4475         odp_flow_format(key, key_len, mask, mask_len, &portno_names, &ds,
4476                         verbosity);
4477         ds_put_cstr(&ds, ", ");
4478         dpif_flow_stats_format(stats, &ds);
4479         ds_put_cstr(&ds, ", actions:");
4480         format_odp_actions(&ds, actions, actions_len);
4481         ds_put_char(&ds, '\n');
4482     }
4483     dpif_flow_dump_state_uninit(ofproto->backer->dpif, state);
4484     error = dpif_flow_dump_done(&flow_dump);
4485
4486 exit:
4487     if (error) {
4488         ds_clear(&ds);
4489         ds_put_format(&ds, "dpif/dump_flows failed: %s", ovs_strerror(errno));
4490         unixctl_command_reply_error(conn, ds_cstr(&ds));
4491     } else {
4492         unixctl_command_reply(conn, ds_cstr(&ds));
4493     }
4494     odp_portno_names_destroy(&portno_names);
4495     hmap_destroy(&portno_names);
4496     ds_destroy(&ds);
4497 }
4498
4499 static void
4500 ofproto_dpif_unixctl_init(void)
4501 {
4502     static bool registered;
4503     if (registered) {
4504         return;
4505     }
4506     registered = true;
4507
4508     unixctl_command_register(
4509         "ofproto/trace",
4510         "{[dp_name] odp_flow | bridge br_flow} [-generate|packet]",
4511         1, 3, ofproto_unixctl_trace, NULL);
4512     unixctl_command_register(
4513         "ofproto/trace-packet-out",
4514         "[-consistent] {[dp_name] odp_flow | bridge br_flow} [-generate|packet] actions",
4515         2, 6, ofproto_unixctl_trace_actions, NULL);
4516     unixctl_command_register("fdb/flush", "[bridge]", 0, 1,
4517                              ofproto_unixctl_fdb_flush, NULL);
4518     unixctl_command_register("fdb/show", "bridge", 1, 1,
4519                              ofproto_unixctl_fdb_show, NULL);
4520     unixctl_command_register("dpif/dump-dps", "", 0, 0,
4521                              ofproto_unixctl_dpif_dump_dps, NULL);
4522     unixctl_command_register("dpif/show", "", 0, 0, ofproto_unixctl_dpif_show,
4523                              NULL);
4524     unixctl_command_register("dpif/dump-flows", "[-m] bridge", 1, 2,
4525                              ofproto_unixctl_dpif_dump_flows, NULL);
4526 }
4527
4528 /* Returns true if 'table' is the table used for internal rules,
4529  * false otherwise. */
4530 bool
4531 table_is_internal(uint8_t table_id)
4532 {
4533     return table_id == TBL_INTERNAL;
4534 }
4535 \f
4536 /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
4537  *
4538  * This is deprecated.  It is only for compatibility with broken device drivers
4539  * in old versions of Linux that do not properly support VLANs when VLAN
4540  * devices are not used.  When broken device drivers are no longer in
4541  * widespread use, we will delete these interfaces. */
4542
4543 static int
4544 set_realdev(struct ofport *ofport_, ofp_port_t realdev_ofp_port, int vid)
4545 {
4546     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport_->ofproto);
4547     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
4548
4549     if (realdev_ofp_port == ofport->realdev_ofp_port
4550         && vid == ofport->vlandev_vid) {
4551         return 0;
4552     }
4553
4554     ofproto->backer->need_revalidate = REV_RECONFIGURE;
4555
4556     if (ofport->realdev_ofp_port) {
4557         vsp_remove(ofport);
4558     }
4559     if (realdev_ofp_port && ofport->bundle) {
4560         /* vlandevs are enslaved to their realdevs, so they are not allowed to
4561          * themselves be part of a bundle. */
4562         bundle_set(ofport_->ofproto, ofport->bundle, NULL);
4563     }
4564
4565     ofport->realdev_ofp_port = realdev_ofp_port;
4566     ofport->vlandev_vid = vid;
4567
4568     if (realdev_ofp_port) {
4569         vsp_add(ofport, realdev_ofp_port, vid);
4570     }
4571
4572     return 0;
4573 }
4574
4575 static uint32_t
4576 hash_realdev_vid(ofp_port_t realdev_ofp_port, int vid)
4577 {
4578     return hash_2words(ofp_to_u16(realdev_ofp_port), vid);
4579 }
4580
4581 bool
4582 ofproto_has_vlan_splinters(const struct ofproto_dpif *ofproto)
4583     OVS_EXCLUDED(ofproto->vsp_mutex)
4584 {
4585     /* hmap_is_empty is thread safe. */
4586     return !hmap_is_empty(&ofproto->realdev_vid_map);
4587 }
4588
4589
4590 static ofp_port_t
4591 vsp_realdev_to_vlandev__(const struct ofproto_dpif *ofproto,
4592                          ofp_port_t realdev_ofp_port, ovs_be16 vlan_tci)
4593     OVS_REQUIRES(ofproto->vsp_mutex)
4594 {
4595     if (!hmap_is_empty(&ofproto->realdev_vid_map)) {
4596         int vid = vlan_tci_to_vid(vlan_tci);
4597         const struct vlan_splinter *vsp;
4598
4599         HMAP_FOR_EACH_WITH_HASH (vsp, realdev_vid_node,
4600                                  hash_realdev_vid(realdev_ofp_port, vid),
4601                                  &ofproto->realdev_vid_map) {
4602             if (vsp->realdev_ofp_port == realdev_ofp_port
4603                 && vsp->vid == vid) {
4604                 return vsp->vlandev_ofp_port;
4605             }
4606         }
4607     }
4608     return realdev_ofp_port;
4609 }
4610
4611 /* Returns the OFP port number of the Linux VLAN device that corresponds to
4612  * 'vlan_tci' on the network device with port number 'realdev_ofp_port' in
4613  * 'struct ofport_dpif'.  For example, given 'realdev_ofp_port' of eth0 and
4614  * 'vlan_tci' 9, it would return the port number of eth0.9.
4615  *
4616  * Unless VLAN splinters are enabled for port 'realdev_ofp_port', this
4617  * function just returns its 'realdev_ofp_port' argument. */
4618 ofp_port_t
4619 vsp_realdev_to_vlandev(const struct ofproto_dpif *ofproto,
4620                        ofp_port_t realdev_ofp_port, ovs_be16 vlan_tci)
4621     OVS_EXCLUDED(ofproto->vsp_mutex)
4622 {
4623     ofp_port_t ret;
4624
4625     /* hmap_is_empty is thread safe, see if we can return immediately. */
4626     if (hmap_is_empty(&ofproto->realdev_vid_map)) {
4627         return realdev_ofp_port;
4628     }
4629     ovs_mutex_lock(&ofproto->vsp_mutex);
4630     ret = vsp_realdev_to_vlandev__(ofproto, realdev_ofp_port, vlan_tci);
4631     ovs_mutex_unlock(&ofproto->vsp_mutex);
4632     return ret;
4633 }
4634
4635 static struct vlan_splinter *
4636 vlandev_find(const struct ofproto_dpif *ofproto, ofp_port_t vlandev_ofp_port)
4637 {
4638     struct vlan_splinter *vsp;
4639
4640     HMAP_FOR_EACH_WITH_HASH (vsp, vlandev_node,
4641                              hash_ofp_port(vlandev_ofp_port),
4642                              &ofproto->vlandev_map) {
4643         if (vsp->vlandev_ofp_port == vlandev_ofp_port) {
4644             return vsp;
4645         }
4646     }
4647
4648     return NULL;
4649 }
4650
4651 /* Returns the OpenFlow port number of the "real" device underlying the Linux
4652  * VLAN device with OpenFlow port number 'vlandev_ofp_port' and stores the
4653  * VLAN VID of the Linux VLAN device in '*vid'.  For example, given
4654  * 'vlandev_ofp_port' of eth0.9, it would return the OpenFlow port number of
4655  * eth0 and store 9 in '*vid'.
4656  *
4657  * Returns 0 and does not modify '*vid' if 'vlandev_ofp_port' is not a Linux
4658  * VLAN device.  Unless VLAN splinters are enabled, this is what this function
4659  * always does.*/
4660 static ofp_port_t
4661 vsp_vlandev_to_realdev(const struct ofproto_dpif *ofproto,
4662                        ofp_port_t vlandev_ofp_port, int *vid)
4663     OVS_REQUIRES(ofproto->vsp_mutex)
4664 {
4665     if (!hmap_is_empty(&ofproto->vlandev_map)) {
4666         const struct vlan_splinter *vsp;
4667
4668         vsp = vlandev_find(ofproto, vlandev_ofp_port);
4669         if (vsp) {
4670             if (vid) {
4671                 *vid = vsp->vid;
4672             }
4673             return vsp->realdev_ofp_port;
4674         }
4675     }
4676     return 0;
4677 }
4678
4679 /* Given 'flow', a flow representing a packet received on 'ofproto', checks
4680  * whether 'flow->in_port' represents a Linux VLAN device.  If so, changes
4681  * 'flow->in_port' to the "real" device backing the VLAN device, sets
4682  * 'flow->vlan_tci' to the VLAN VID, and returns true.  Otherwise (which is
4683  * always the case unless VLAN splinters are enabled), returns false without
4684  * making any changes. */
4685 bool
4686 vsp_adjust_flow(const struct ofproto_dpif *ofproto, struct flow *flow)
4687     OVS_EXCLUDED(ofproto->vsp_mutex)
4688 {
4689     ofp_port_t realdev;
4690     int vid;
4691
4692     /* hmap_is_empty is thread safe. */
4693     if (hmap_is_empty(&ofproto->vlandev_map)) {
4694         return false;
4695     }
4696
4697     ovs_mutex_lock(&ofproto->vsp_mutex);
4698     realdev = vsp_vlandev_to_realdev(ofproto, flow->in_port.ofp_port, &vid);
4699     ovs_mutex_unlock(&ofproto->vsp_mutex);
4700     if (!realdev) {
4701         return false;
4702     }
4703
4704     /* Cause the flow to be processed as if it came in on the real device with
4705      * the VLAN device's VLAN ID. */
4706     flow->in_port.ofp_port = realdev;
4707     flow->vlan_tci = htons((vid & VLAN_VID_MASK) | VLAN_CFI);
4708     return true;
4709 }
4710
4711 static void
4712 vsp_remove(struct ofport_dpif *port)
4713 {
4714     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
4715     struct vlan_splinter *vsp;
4716
4717     ovs_mutex_lock(&ofproto->vsp_mutex);
4718     vsp = vlandev_find(ofproto, port->up.ofp_port);
4719     if (vsp) {
4720         hmap_remove(&ofproto->vlandev_map, &vsp->vlandev_node);
4721         hmap_remove(&ofproto->realdev_vid_map, &vsp->realdev_vid_node);
4722         free(vsp);
4723
4724         port->realdev_ofp_port = 0;
4725     } else {
4726         VLOG_ERR("missing vlan device record");
4727     }
4728     ovs_mutex_unlock(&ofproto->vsp_mutex);
4729 }
4730
4731 static void
4732 vsp_add(struct ofport_dpif *port, ofp_port_t realdev_ofp_port, int vid)
4733 {
4734     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
4735
4736     ovs_mutex_lock(&ofproto->vsp_mutex);
4737     if (!vsp_vlandev_to_realdev(ofproto, port->up.ofp_port, NULL)
4738         && (vsp_realdev_to_vlandev__(ofproto, realdev_ofp_port, htons(vid))
4739             == realdev_ofp_port)) {
4740         struct vlan_splinter *vsp;
4741
4742         vsp = xmalloc(sizeof *vsp);
4743         vsp->realdev_ofp_port = realdev_ofp_port;
4744         vsp->vlandev_ofp_port = port->up.ofp_port;
4745         vsp->vid = vid;
4746
4747         port->realdev_ofp_port = realdev_ofp_port;
4748
4749         hmap_insert(&ofproto->vlandev_map, &vsp->vlandev_node,
4750                     hash_ofp_port(port->up.ofp_port));
4751         hmap_insert(&ofproto->realdev_vid_map, &vsp->realdev_vid_node,
4752                     hash_realdev_vid(realdev_ofp_port, vid));
4753     } else {
4754         VLOG_ERR("duplicate vlan device record");
4755     }
4756     ovs_mutex_unlock(&ofproto->vsp_mutex);
4757 }
4758
4759 static odp_port_t
4760 ofp_port_to_odp_port(const struct ofproto_dpif *ofproto, ofp_port_t ofp_port)
4761 {
4762     const struct ofport_dpif *ofport = get_ofp_port(ofproto, ofp_port);
4763     return ofport ? ofport->odp_port : ODPP_NONE;
4764 }
4765
4766 struct ofport_dpif *
4767 odp_port_to_ofport(const struct dpif_backer *backer, odp_port_t odp_port)
4768 {
4769     struct ofport_dpif *port;
4770
4771     ovs_rwlock_rdlock(&backer->odp_to_ofport_lock);
4772     HMAP_FOR_EACH_IN_BUCKET (port, odp_port_node, hash_odp_port(odp_port),
4773                              &backer->odp_to_ofport_map) {
4774         if (port->odp_port == odp_port) {
4775             ovs_rwlock_unlock(&backer->odp_to_ofport_lock);
4776             return port;
4777         }
4778     }
4779
4780     ovs_rwlock_unlock(&backer->odp_to_ofport_lock);
4781     return NULL;
4782 }
4783
4784 static ofp_port_t
4785 odp_port_to_ofp_port(const struct ofproto_dpif *ofproto, odp_port_t odp_port)
4786 {
4787     struct ofport_dpif *port;
4788
4789     port = odp_port_to_ofport(ofproto->backer, odp_port);
4790     if (port && &ofproto->up == port->up.ofproto) {
4791         return port->up.ofp_port;
4792     } else {
4793         return OFPP_NONE;
4794     }
4795 }
4796
4797 struct ofproto_dpif *
4798 ofproto_dpif_recirc_get_ofproto(const struct dpif_backer *backer,
4799                                 uint32_t recirc_id)
4800 {
4801     struct dpif_backer_recirc_node *node;
4802
4803     ovs_mutex_lock(&backer->recirc_mutex);
4804     node = CONTAINER_OF(hmap_first_with_hash(&backer->recirc_map, recirc_id),
4805                         struct dpif_backer_recirc_node, hmap_node);
4806     ovs_mutex_unlock(&backer->recirc_mutex);
4807
4808     return node ? node->ofproto : NULL;
4809 }
4810
4811 uint32_t
4812 ofproto_dpif_alloc_recirc_id(struct ofproto_dpif *ofproto)
4813 {
4814     struct dpif_backer *backer = ofproto->backer;
4815     uint32_t recirc_id = recirc_id_alloc(backer->rid_pool);
4816
4817     if (recirc_id) {
4818         struct dpif_backer_recirc_node *node = xmalloc(sizeof *node);
4819
4820         node->recirc_id = recirc_id;
4821         node->ofproto = ofproto;
4822
4823         ovs_mutex_lock(&backer->recirc_mutex);
4824         hmap_insert(&backer->recirc_map, &node->hmap_node, node->recirc_id);
4825         ovs_mutex_unlock(&backer->recirc_mutex);
4826     }
4827
4828     return recirc_id;
4829 }
4830
4831 void
4832 ofproto_dpif_free_recirc_id(struct ofproto_dpif *ofproto, uint32_t recirc_id)
4833 {
4834     struct dpif_backer *backer = ofproto->backer;
4835     struct dpif_backer_recirc_node *node;
4836
4837     ovs_mutex_lock(&backer->recirc_mutex);
4838     node = CONTAINER_OF(hmap_first_with_hash(&backer->recirc_map, recirc_id),
4839                         struct dpif_backer_recirc_node, hmap_node);
4840     if (node) {
4841         hmap_remove(&backer->recirc_map, &node->hmap_node);
4842         ovs_mutex_unlock(&backer->recirc_mutex);
4843         recirc_id_free(backer->rid_pool, node->recirc_id);
4844
4845         if (node->ofproto != ofproto) {
4846             VLOG_ERR("recirc_id %"PRIu32", freed by incorrect ofproto (%s),"
4847                      " expect ofproto (%s)", node->recirc_id, ofproto->up.name,
4848                      node->ofproto->up.name);
4849         }
4850
4851         /* RCU postpone the free, since other threads may be referring
4852          * to 'node' at same time. */
4853         ovsrcu_postpone(free, node);
4854     } else {
4855         ovs_mutex_unlock(&backer->recirc_mutex);
4856     }
4857 }
4858
4859 int
4860 ofproto_dpif_add_internal_flow(struct ofproto_dpif *ofproto,
4861                                const struct match *match, int priority,
4862                                const struct ofpbuf *ofpacts,
4863                                struct rule **rulep)
4864 {
4865     struct ofputil_flow_mod fm;
4866     struct rule_dpif *rule;
4867     int error;
4868
4869     fm.match = *match;
4870     fm.priority = priority;
4871     fm.new_cookie = htonll(0);
4872     fm.cookie = htonll(0);
4873     fm.cookie_mask = htonll(0);
4874     fm.modify_cookie = false;
4875     fm.table_id = TBL_INTERNAL;
4876     fm.command = OFPFC_ADD;
4877     fm.idle_timeout = 0;
4878     fm.hard_timeout = 0;
4879     fm.buffer_id = 0;
4880     fm.out_port = 0;
4881     fm.flags = OFPUTIL_FF_HIDDEN_FIELDS | OFPUTIL_FF_NO_READONLY;
4882     fm.ofpacts = ofpbuf_data(ofpacts);
4883     fm.ofpacts_len = ofpbuf_size(ofpacts);
4884
4885     error = ofproto_flow_mod(&ofproto->up, &fm);
4886     if (error) {
4887         VLOG_ERR_RL(&rl, "failed to add internal flow (%s)",
4888                     ofperr_to_string(error));
4889         *rulep = NULL;
4890         return error;
4891     }
4892
4893     rule = rule_dpif_lookup_in_table(ofproto, TBL_INTERNAL, &fm.match.flow,
4894                                      &fm.match.wc, false);
4895     if (rule) {
4896         *rulep = &rule->up;
4897     } else {
4898         OVS_NOT_REACHED();
4899     }
4900     return 0;
4901 }
4902
4903 int
4904 ofproto_dpif_delete_internal_flow(struct ofproto_dpif *ofproto,
4905                                   struct match *match, int priority)
4906 {
4907     struct ofputil_flow_mod fm;
4908     int error;
4909
4910     fm.match = *match;
4911     fm.priority = priority;
4912     fm.new_cookie = htonll(0);
4913     fm.cookie = htonll(0);
4914     fm.cookie_mask = htonll(0);
4915     fm.modify_cookie = false;
4916     fm.table_id = TBL_INTERNAL;
4917     fm.flags = OFPUTIL_FF_HIDDEN_FIELDS | OFPUTIL_FF_NO_READONLY;
4918     fm.command = OFPFC_DELETE_STRICT;
4919
4920     error = ofproto_flow_mod(&ofproto->up, &fm);
4921     if (error) {
4922         VLOG_ERR_RL(&rl, "failed to delete internal flow (%s)",
4923                     ofperr_to_string(error));
4924         return error;
4925     }
4926
4927     return 0;
4928 }
4929
4930 const struct ofproto_class ofproto_dpif_class = {
4931     init,
4932     enumerate_types,
4933     enumerate_names,
4934     del,
4935     port_open_type,
4936     type_run,
4937     type_wait,
4938     alloc,
4939     construct,
4940     destruct,
4941     dealloc,
4942     run,
4943     wait,
4944     NULL,                       /* get_memory_usage. */
4945     type_get_memory_usage,
4946     flush,
4947     get_features,
4948     get_tables,
4949     port_alloc,
4950     port_construct,
4951     port_destruct,
4952     port_dealloc,
4953     port_modified,
4954     port_reconfigured,
4955     port_query_by_name,
4956     port_add,
4957     port_del,
4958     port_get_stats,
4959     port_dump_start,
4960     port_dump_next,
4961     port_dump_done,
4962     port_poll,
4963     port_poll_wait,
4964     port_is_lacp_current,
4965     NULL,                       /* rule_choose_table */
4966     rule_alloc,
4967     rule_construct,
4968     rule_insert,
4969     rule_delete,
4970     rule_destruct,
4971     rule_dealloc,
4972     rule_get_stats,
4973     rule_execute,
4974     rule_modify_actions,
4975     set_frag_handling,
4976     packet_out,
4977     set_netflow,
4978     get_netflow_ids,
4979     set_sflow,
4980     set_ipfix,
4981     set_cfm,
4982     get_cfm_status,
4983     set_bfd,
4984     get_bfd_status,
4985     set_stp,
4986     get_stp_status,
4987     set_stp_port,
4988     get_stp_port_status,
4989     get_stp_port_stats,
4990     set_queues,
4991     bundle_set,
4992     bundle_remove,
4993     mirror_set__,
4994     mirror_get_stats__,
4995     set_flood_vlans,
4996     is_mirror_output_bundle,
4997     forward_bpdu_changed,
4998     set_mac_table_config,
4999     set_realdev,
5000     NULL,                       /* meter_get_features */
5001     NULL,                       /* meter_set */
5002     NULL,                       /* meter_get */
5003     NULL,                       /* meter_del */
5004     group_alloc,                /* group_alloc */
5005     group_construct,            /* group_construct */
5006     group_destruct,             /* group_destruct */
5007     group_dealloc,              /* group_dealloc */
5008     group_modify,               /* group_modify */
5009     group_get_stats,            /* group_get_stats */
5010 };