ofproto-dpif: Revalidate when sFlow probability changes.
[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         uint32_t old_probability = ds ? dpif_sflow_get_probability(ds) : 0;
1768         if (!ds) {
1769             struct ofport_dpif *ofport;
1770
1771             ds = ofproto->sflow = dpif_sflow_create();
1772             HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
1773                 dpif_sflow_add_port(ds, &ofport->up, ofport->odp_port);
1774             }
1775         }
1776         dpif_sflow_set_options(ds, sflow_options);
1777         if (dpif_sflow_get_probability(ds) != old_probability) {
1778             ofproto->backer->need_revalidate = REV_RECONFIGURE;
1779         }
1780     } else {
1781         if (ds) {
1782             dpif_sflow_unref(ds);
1783             ofproto->backer->need_revalidate = REV_RECONFIGURE;
1784             ofproto->sflow = NULL;
1785         }
1786     }
1787     return 0;
1788 }
1789
1790 static int
1791 set_ipfix(
1792     struct ofproto *ofproto_,
1793     const struct ofproto_ipfix_bridge_exporter_options *bridge_exporter_options,
1794     const struct ofproto_ipfix_flow_exporter_options *flow_exporters_options,
1795     size_t n_flow_exporters_options)
1796 {
1797     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1798     struct dpif_ipfix *di = ofproto->ipfix;
1799     bool has_options = bridge_exporter_options || flow_exporters_options;
1800
1801     if (has_options && !di) {
1802         di = ofproto->ipfix = dpif_ipfix_create();
1803     }
1804
1805     if (di) {
1806         /* Call set_options in any case to cleanly flush the flow
1807          * caches in the last exporters that are to be destroyed. */
1808         dpif_ipfix_set_options(
1809             di, bridge_exporter_options, flow_exporters_options,
1810             n_flow_exporters_options);
1811
1812         if (!has_options) {
1813             dpif_ipfix_unref(di);
1814             ofproto->ipfix = NULL;
1815         }
1816     }
1817
1818     return 0;
1819 }
1820
1821 static int
1822 set_cfm(struct ofport *ofport_, const struct cfm_settings *s)
1823 {
1824     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1825     int error = 0;
1826
1827     if (s) {
1828         if (!ofport->cfm) {
1829             struct ofproto_dpif *ofproto;
1830
1831             ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1832             ofproto->backer->need_revalidate = REV_RECONFIGURE;
1833             ofport->cfm = cfm_create(ofport->up.netdev);
1834         }
1835
1836         if (cfm_configure(ofport->cfm, s)) {
1837             error = 0;
1838             goto out;
1839         }
1840
1841         error = EINVAL;
1842     }
1843     cfm_unref(ofport->cfm);
1844     ofport->cfm = NULL;
1845 out:
1846     ofproto_dpif_monitor_port_update(ofport, ofport->bfd, ofport->cfm,
1847                                      ofport->up.pp.hw_addr);
1848     return error;
1849 }
1850
1851 static int
1852 get_cfm_status(const struct ofport *ofport_, bool force,
1853                struct ofproto_cfm_status *status)
1854 {
1855     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1856     int ret = 0;
1857
1858     if (ofport->cfm) {
1859         if (cfm_check_status_change(ofport->cfm) || force) {
1860             status->faults = cfm_get_fault(ofport->cfm);
1861             status->flap_count = cfm_get_flap_count(ofport->cfm);
1862             status->remote_opstate = cfm_get_opup(ofport->cfm);
1863             status->health = cfm_get_health(ofport->cfm);
1864             cfm_get_remote_mpids(ofport->cfm, &status->rmps, &status->n_rmps);
1865         } else {
1866             ret = NO_STATUS_CHANGE;
1867         }
1868     } else {
1869         ret = ENOENT;
1870     }
1871
1872     return ret;
1873 }
1874
1875 static int
1876 set_bfd(struct ofport *ofport_, const struct smap *cfg)
1877 {
1878     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport_->ofproto);
1879     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1880     struct bfd *old;
1881
1882     old = ofport->bfd;
1883     ofport->bfd = bfd_configure(old, netdev_get_name(ofport->up.netdev),
1884                                 cfg, ofport->up.netdev);
1885     if (ofport->bfd != old) {
1886         ofproto->backer->need_revalidate = REV_RECONFIGURE;
1887     }
1888     ofproto_dpif_monitor_port_update(ofport, ofport->bfd, ofport->cfm,
1889                                      ofport->up.pp.hw_addr);
1890     return 0;
1891 }
1892
1893 static int
1894 get_bfd_status(struct ofport *ofport_, bool force, struct smap *smap)
1895 {
1896     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
1897     int ret = 0;
1898
1899     if (ofport->bfd) {
1900         if (bfd_check_status_change(ofport->bfd) || force) {
1901             bfd_get_status(ofport->bfd, smap);
1902         } else {
1903             ret = NO_STATUS_CHANGE;
1904         }
1905     } else {
1906         ret = ENOENT;
1907     }
1908
1909     return ret;
1910 }
1911 \f
1912 /* Spanning Tree. */
1913
1914 static void
1915 send_bpdu_cb(struct ofpbuf *pkt, int port_num, void *ofproto_)
1916 {
1917     struct ofproto_dpif *ofproto = ofproto_;
1918     struct stp_port *sp = stp_get_port(ofproto->stp, port_num);
1919     struct ofport_dpif *ofport;
1920
1921     ofport = stp_port_get_aux(sp);
1922     if (!ofport) {
1923         VLOG_WARN_RL(&rl, "%s: cannot send BPDU on unknown port %d",
1924                      ofproto->up.name, port_num);
1925     } else {
1926         struct eth_header *eth = ofpbuf_l2(pkt);
1927
1928         netdev_get_etheraddr(ofport->up.netdev, eth->eth_src);
1929         if (eth_addr_is_zero(eth->eth_src)) {
1930             VLOG_WARN_RL(&rl, "%s: cannot send BPDU on port %d "
1931                          "with unknown MAC", ofproto->up.name, port_num);
1932         } else {
1933             ofproto_dpif_send_packet(ofport, pkt);
1934         }
1935     }
1936     ofpbuf_delete(pkt);
1937 }
1938
1939 /* Configures STP on 'ofproto_' using the settings defined in 's'. */
1940 static int
1941 set_stp(struct ofproto *ofproto_, const struct ofproto_stp_settings *s)
1942 {
1943     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1944
1945     /* Only revalidate flows if the configuration changed. */
1946     if (!s != !ofproto->stp) {
1947         ofproto->backer->need_revalidate = REV_RECONFIGURE;
1948     }
1949
1950     if (s) {
1951         if (!ofproto->stp) {
1952             ofproto->stp = stp_create(ofproto_->name, s->system_id,
1953                                       send_bpdu_cb, ofproto);
1954             ofproto->stp_last_tick = time_msec();
1955         }
1956
1957         stp_set_bridge_id(ofproto->stp, s->system_id);
1958         stp_set_bridge_priority(ofproto->stp, s->priority);
1959         stp_set_hello_time(ofproto->stp, s->hello_time);
1960         stp_set_max_age(ofproto->stp, s->max_age);
1961         stp_set_forward_delay(ofproto->stp, s->fwd_delay);
1962     }  else {
1963         struct ofport *ofport;
1964
1965         HMAP_FOR_EACH (ofport, hmap_node, &ofproto->up.ports) {
1966             set_stp_port(ofport, NULL);
1967         }
1968
1969         stp_unref(ofproto->stp);
1970         ofproto->stp = NULL;
1971     }
1972
1973     return 0;
1974 }
1975
1976 static int
1977 get_stp_status(struct ofproto *ofproto_, struct ofproto_stp_status *s)
1978 {
1979     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
1980
1981     if (ofproto->stp) {
1982         s->enabled = true;
1983         s->bridge_id = stp_get_bridge_id(ofproto->stp);
1984         s->designated_root = stp_get_designated_root(ofproto->stp);
1985         s->root_path_cost = stp_get_root_path_cost(ofproto->stp);
1986     } else {
1987         s->enabled = false;
1988     }
1989
1990     return 0;
1991 }
1992
1993 static void
1994 update_stp_port_state(struct ofport_dpif *ofport)
1995 {
1996     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
1997     enum stp_state state;
1998
1999     /* Figure out new state. */
2000     state = ofport->stp_port ? stp_port_get_state(ofport->stp_port)
2001                              : STP_DISABLED;
2002
2003     /* Update state. */
2004     if (ofport->stp_state != state) {
2005         enum ofputil_port_state of_state;
2006         bool fwd_change;
2007
2008         VLOG_DBG_RL(&rl, "port %s: STP state changed from %s to %s",
2009                     netdev_get_name(ofport->up.netdev),
2010                     stp_state_name(ofport->stp_state),
2011                     stp_state_name(state));
2012         if (stp_learn_in_state(ofport->stp_state)
2013                 != stp_learn_in_state(state)) {
2014             /* xxx Learning action flows should also be flushed. */
2015             ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2016             mac_learning_flush(ofproto->ml);
2017             ovs_rwlock_unlock(&ofproto->ml->rwlock);
2018         }
2019         fwd_change = stp_forward_in_state(ofport->stp_state)
2020                         != stp_forward_in_state(state);
2021
2022         ofproto->backer->need_revalidate = REV_STP;
2023         ofport->stp_state = state;
2024         ofport->stp_state_entered = time_msec();
2025
2026         if (fwd_change && ofport->bundle) {
2027             bundle_update(ofport->bundle);
2028         }
2029
2030         /* Update the STP state bits in the OpenFlow port description. */
2031         of_state = ofport->up.pp.state & ~OFPUTIL_PS_STP_MASK;
2032         of_state |= (state == STP_LISTENING ? OFPUTIL_PS_STP_LISTEN
2033                      : state == STP_LEARNING ? OFPUTIL_PS_STP_LEARN
2034                      : state == STP_FORWARDING ? OFPUTIL_PS_STP_FORWARD
2035                      : state == STP_BLOCKING ?  OFPUTIL_PS_STP_BLOCK
2036                      : 0);
2037         ofproto_port_set_state(&ofport->up, of_state);
2038     }
2039 }
2040
2041 /* Configures STP on 'ofport_' using the settings defined in 's'.  The
2042  * caller is responsible for assigning STP port numbers and ensuring
2043  * there are no duplicates. */
2044 static int
2045 set_stp_port(struct ofport *ofport_,
2046              const struct ofproto_port_stp_settings *s)
2047 {
2048     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2049     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2050     struct stp_port *sp = ofport->stp_port;
2051
2052     if (!s || !s->enable) {
2053         if (sp) {
2054             ofport->stp_port = NULL;
2055             stp_port_disable(sp);
2056             update_stp_port_state(ofport);
2057         }
2058         return 0;
2059     } else if (sp && stp_port_no(sp) != s->port_num
2060             && ofport == stp_port_get_aux(sp)) {
2061         /* The port-id changed, so disable the old one if it's not
2062          * already in use by another port. */
2063         stp_port_disable(sp);
2064     }
2065
2066     sp = ofport->stp_port = stp_get_port(ofproto->stp, s->port_num);
2067     stp_port_enable(sp);
2068
2069     stp_port_set_aux(sp, ofport);
2070     stp_port_set_priority(sp, s->priority);
2071     stp_port_set_path_cost(sp, s->path_cost);
2072
2073     update_stp_port_state(ofport);
2074
2075     return 0;
2076 }
2077
2078 static int
2079 get_stp_port_status(struct ofport *ofport_,
2080                     struct ofproto_port_stp_status *s)
2081 {
2082     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2083     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2084     struct stp_port *sp = ofport->stp_port;
2085
2086     if (!ofproto->stp || !sp) {
2087         s->enabled = false;
2088         return 0;
2089     }
2090
2091     s->enabled = true;
2092     s->port_id = stp_port_get_id(sp);
2093     s->state = stp_port_get_state(sp);
2094     s->sec_in_state = (time_msec() - ofport->stp_state_entered) / 1000;
2095     s->role = stp_port_get_role(sp);
2096
2097     return 0;
2098 }
2099
2100 static int
2101 get_stp_port_stats(struct ofport *ofport_,
2102                    struct ofproto_port_stp_stats *s)
2103 {
2104     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2105     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2106     struct stp_port *sp = ofport->stp_port;
2107
2108     if (!ofproto->stp || !sp) {
2109         s->enabled = false;
2110         return 0;
2111     }
2112
2113     s->enabled = true;
2114     stp_port_get_counts(sp, &s->tx_count, &s->rx_count, &s->error_count);
2115
2116     return 0;
2117 }
2118
2119 static void
2120 stp_run(struct ofproto_dpif *ofproto)
2121 {
2122     if (ofproto->stp) {
2123         long long int now = time_msec();
2124         long long int elapsed = now - ofproto->stp_last_tick;
2125         struct stp_port *sp;
2126
2127         if (elapsed > 0) {
2128             stp_tick(ofproto->stp, MIN(INT_MAX, elapsed));
2129             ofproto->stp_last_tick = now;
2130         }
2131         while (stp_get_changed_port(ofproto->stp, &sp)) {
2132             struct ofport_dpif *ofport = stp_port_get_aux(sp);
2133
2134             if (ofport) {
2135                 update_stp_port_state(ofport);
2136             }
2137         }
2138
2139         if (stp_check_and_reset_fdb_flush(ofproto->stp)) {
2140             ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2141             mac_learning_flush(ofproto->ml);
2142             ovs_rwlock_unlock(&ofproto->ml->rwlock);
2143         }
2144     }
2145 }
2146
2147 static void
2148 stp_wait(struct ofproto_dpif *ofproto)
2149 {
2150     if (ofproto->stp) {
2151         poll_timer_wait(1000);
2152     }
2153 }
2154 \f
2155 static int
2156 set_queues(struct ofport *ofport_, const struct ofproto_port_queue *qdscp,
2157            size_t n_qdscp)
2158 {
2159     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2160     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2161
2162     if (ofport->n_qdscp != n_qdscp
2163         || (n_qdscp && memcmp(ofport->qdscp, qdscp,
2164                               n_qdscp * sizeof *qdscp))) {
2165         ofproto->backer->need_revalidate = REV_RECONFIGURE;
2166         free(ofport->qdscp);
2167         ofport->qdscp = n_qdscp
2168             ? xmemdup(qdscp, n_qdscp * sizeof *qdscp)
2169             : NULL;
2170         ofport->n_qdscp = n_qdscp;
2171     }
2172
2173     return 0;
2174 }
2175 \f
2176 /* Bundles. */
2177
2178 /* Expires all MAC learning entries associated with 'bundle' and forces its
2179  * ofproto to revalidate every flow.
2180  *
2181  * Normally MAC learning entries are removed only from the ofproto associated
2182  * with 'bundle', but if 'all_ofprotos' is true, then the MAC learning entries
2183  * are removed from every ofproto.  When patch ports and SLB bonds are in use
2184  * and a VM migration happens and the gratuitous ARPs are somehow lost, this
2185  * avoids a MAC_ENTRY_IDLE_TIME delay before the migrated VM can communicate
2186  * with the host from which it migrated. */
2187 static void
2188 bundle_flush_macs(struct ofbundle *bundle, bool all_ofprotos)
2189 {
2190     struct ofproto_dpif *ofproto = bundle->ofproto;
2191     struct mac_learning *ml = ofproto->ml;
2192     struct mac_entry *mac, *next_mac;
2193
2194     ofproto->backer->need_revalidate = REV_RECONFIGURE;
2195     ovs_rwlock_wrlock(&ml->rwlock);
2196     LIST_FOR_EACH_SAFE (mac, next_mac, lru_node, &ml->lrus) {
2197         if (mac->port.p == bundle) {
2198             if (all_ofprotos) {
2199                 struct ofproto_dpif *o;
2200
2201                 HMAP_FOR_EACH (o, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
2202                     if (o != ofproto) {
2203                         struct mac_entry *e;
2204
2205                         ovs_rwlock_wrlock(&o->ml->rwlock);
2206                         e = mac_learning_lookup(o->ml, mac->mac, mac->vlan);
2207                         if (e) {
2208                             mac_learning_expire(o->ml, e);
2209                         }
2210                         ovs_rwlock_unlock(&o->ml->rwlock);
2211                     }
2212                 }
2213             }
2214
2215             mac_learning_expire(ml, mac);
2216         }
2217     }
2218     ovs_rwlock_unlock(&ml->rwlock);
2219 }
2220
2221 static struct ofbundle *
2222 bundle_lookup(const struct ofproto_dpif *ofproto, void *aux)
2223 {
2224     struct ofbundle *bundle;
2225
2226     HMAP_FOR_EACH_IN_BUCKET (bundle, hmap_node, hash_pointer(aux, 0),
2227                              &ofproto->bundles) {
2228         if (bundle->aux == aux) {
2229             return bundle;
2230         }
2231     }
2232     return NULL;
2233 }
2234
2235 static void
2236 bundle_update(struct ofbundle *bundle)
2237 {
2238     struct ofport_dpif *port;
2239
2240     bundle->floodable = true;
2241     LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2242         if (port->up.pp.config & OFPUTIL_PC_NO_FLOOD
2243             || port->is_layer3
2244             || !stp_forward_in_state(port->stp_state)) {
2245             bundle->floodable = false;
2246             break;
2247         }
2248     }
2249 }
2250
2251 static void
2252 bundle_del_port(struct ofport_dpif *port)
2253 {
2254     struct ofbundle *bundle = port->bundle;
2255
2256     bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE;
2257
2258     list_remove(&port->bundle_node);
2259     port->bundle = NULL;
2260
2261     if (bundle->lacp) {
2262         lacp_slave_unregister(bundle->lacp, port);
2263     }
2264     if (bundle->bond) {
2265         bond_slave_unregister(bundle->bond, port);
2266     }
2267
2268     bundle_update(bundle);
2269 }
2270
2271 static bool
2272 bundle_add_port(struct ofbundle *bundle, ofp_port_t ofp_port,
2273                 struct lacp_slave_settings *lacp)
2274 {
2275     struct ofport_dpif *port;
2276
2277     port = get_ofp_port(bundle->ofproto, ofp_port);
2278     if (!port) {
2279         return false;
2280     }
2281
2282     if (port->bundle != bundle) {
2283         bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE;
2284         if (port->bundle) {
2285             bundle_remove(&port->up);
2286         }
2287
2288         port->bundle = bundle;
2289         list_push_back(&bundle->ports, &port->bundle_node);
2290         if (port->up.pp.config & OFPUTIL_PC_NO_FLOOD
2291             || port->is_layer3
2292             || !stp_forward_in_state(port->stp_state)) {
2293             bundle->floodable = false;
2294         }
2295     }
2296     if (lacp) {
2297         bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE;
2298         lacp_slave_register(bundle->lacp, port, lacp);
2299     }
2300
2301     return true;
2302 }
2303
2304 static void
2305 bundle_destroy(struct ofbundle *bundle)
2306 {
2307     struct ofproto_dpif *ofproto;
2308     struct ofport_dpif *port, *next_port;
2309
2310     if (!bundle) {
2311         return;
2312     }
2313
2314     ofproto = bundle->ofproto;
2315     mbridge_unregister_bundle(ofproto->mbridge, bundle);
2316
2317     ovs_rwlock_wrlock(&xlate_rwlock);
2318     xlate_bundle_remove(bundle);
2319     ovs_rwlock_unlock(&xlate_rwlock);
2320
2321     LIST_FOR_EACH_SAFE (port, next_port, bundle_node, &bundle->ports) {
2322         bundle_del_port(port);
2323     }
2324
2325     bundle_flush_macs(bundle, true);
2326     hmap_remove(&ofproto->bundles, &bundle->hmap_node);
2327     free(bundle->name);
2328     free(bundle->trunks);
2329     lacp_unref(bundle->lacp);
2330     bond_unref(bundle->bond);
2331     free(bundle);
2332 }
2333
2334 static int
2335 bundle_set(struct ofproto *ofproto_, void *aux,
2336            const struct ofproto_bundle_settings *s)
2337 {
2338     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2339     bool need_flush = false;
2340     struct ofport_dpif *port;
2341     struct ofbundle *bundle;
2342     unsigned long *trunks;
2343     int vlan;
2344     size_t i;
2345     bool ok;
2346
2347     if (!s) {
2348         bundle_destroy(bundle_lookup(ofproto, aux));
2349         return 0;
2350     }
2351
2352     ovs_assert(s->n_slaves == 1 || s->bond != NULL);
2353     ovs_assert((s->lacp != NULL) == (s->lacp_slaves != NULL));
2354
2355     bundle = bundle_lookup(ofproto, aux);
2356     if (!bundle) {
2357         bundle = xmalloc(sizeof *bundle);
2358
2359         bundle->ofproto = ofproto;
2360         hmap_insert(&ofproto->bundles, &bundle->hmap_node,
2361                     hash_pointer(aux, 0));
2362         bundle->aux = aux;
2363         bundle->name = NULL;
2364
2365         list_init(&bundle->ports);
2366         bundle->vlan_mode = PORT_VLAN_TRUNK;
2367         bundle->vlan = -1;
2368         bundle->trunks = NULL;
2369         bundle->use_priority_tags = s->use_priority_tags;
2370         bundle->lacp = NULL;
2371         bundle->bond = NULL;
2372
2373         bundle->floodable = true;
2374         mbridge_register_bundle(ofproto->mbridge, bundle);
2375     }
2376
2377     if (!bundle->name || strcmp(s->name, bundle->name)) {
2378         free(bundle->name);
2379         bundle->name = xstrdup(s->name);
2380     }
2381
2382     /* LACP. */
2383     if (s->lacp) {
2384         ofproto->lacp_enabled = true;
2385         if (!bundle->lacp) {
2386             ofproto->backer->need_revalidate = REV_RECONFIGURE;
2387             bundle->lacp = lacp_create();
2388         }
2389         lacp_configure(bundle->lacp, s->lacp);
2390     } else {
2391         lacp_unref(bundle->lacp);
2392         bundle->lacp = NULL;
2393     }
2394
2395     /* Update set of ports. */
2396     ok = true;
2397     for (i = 0; i < s->n_slaves; i++) {
2398         if (!bundle_add_port(bundle, s->slaves[i],
2399                              s->lacp ? &s->lacp_slaves[i] : NULL)) {
2400             ok = false;
2401         }
2402     }
2403     if (!ok || list_size(&bundle->ports) != s->n_slaves) {
2404         struct ofport_dpif *next_port;
2405
2406         LIST_FOR_EACH_SAFE (port, next_port, bundle_node, &bundle->ports) {
2407             for (i = 0; i < s->n_slaves; i++) {
2408                 if (s->slaves[i] == port->up.ofp_port) {
2409                     goto found;
2410                 }
2411             }
2412
2413             bundle_del_port(port);
2414         found: ;
2415         }
2416     }
2417     ovs_assert(list_size(&bundle->ports) <= s->n_slaves);
2418
2419     if (list_is_empty(&bundle->ports)) {
2420         bundle_destroy(bundle);
2421         return EINVAL;
2422     }
2423
2424     /* Set VLAN tagging mode */
2425     if (s->vlan_mode != bundle->vlan_mode
2426         || s->use_priority_tags != bundle->use_priority_tags) {
2427         bundle->vlan_mode = s->vlan_mode;
2428         bundle->use_priority_tags = s->use_priority_tags;
2429         need_flush = true;
2430     }
2431
2432     /* Set VLAN tag. */
2433     vlan = (s->vlan_mode == PORT_VLAN_TRUNK ? -1
2434             : s->vlan >= 0 && s->vlan <= 4095 ? s->vlan
2435             : 0);
2436     if (vlan != bundle->vlan) {
2437         bundle->vlan = vlan;
2438         need_flush = true;
2439     }
2440
2441     /* Get trunked VLANs. */
2442     switch (s->vlan_mode) {
2443     case PORT_VLAN_ACCESS:
2444         trunks = NULL;
2445         break;
2446
2447     case PORT_VLAN_TRUNK:
2448         trunks = CONST_CAST(unsigned long *, s->trunks);
2449         break;
2450
2451     case PORT_VLAN_NATIVE_UNTAGGED:
2452     case PORT_VLAN_NATIVE_TAGGED:
2453         if (vlan != 0 && (!s->trunks
2454                           || !bitmap_is_set(s->trunks, vlan)
2455                           || bitmap_is_set(s->trunks, 0))) {
2456             /* Force trunking the native VLAN and prohibit trunking VLAN 0. */
2457             if (s->trunks) {
2458                 trunks = bitmap_clone(s->trunks, 4096);
2459             } else {
2460                 trunks = bitmap_allocate1(4096);
2461             }
2462             bitmap_set1(trunks, vlan);
2463             bitmap_set0(trunks, 0);
2464         } else {
2465             trunks = CONST_CAST(unsigned long *, s->trunks);
2466         }
2467         break;
2468
2469     default:
2470         OVS_NOT_REACHED();
2471     }
2472     if (!vlan_bitmap_equal(trunks, bundle->trunks)) {
2473         free(bundle->trunks);
2474         if (trunks == s->trunks) {
2475             bundle->trunks = vlan_bitmap_clone(trunks);
2476         } else {
2477             bundle->trunks = trunks;
2478             trunks = NULL;
2479         }
2480         need_flush = true;
2481     }
2482     if (trunks != s->trunks) {
2483         free(trunks);
2484     }
2485
2486     /* Bonding. */
2487     if (!list_is_short(&bundle->ports)) {
2488         bundle->ofproto->has_bonded_bundles = true;
2489         if (bundle->bond) {
2490             if (bond_reconfigure(bundle->bond, s->bond)) {
2491                 ofproto->backer->need_revalidate = REV_RECONFIGURE;
2492             }
2493         } else {
2494             bundle->bond = bond_create(s->bond, ofproto);
2495             ofproto->backer->need_revalidate = REV_RECONFIGURE;
2496         }
2497
2498         LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2499             bond_slave_register(bundle->bond, port,
2500                                 port->up.ofp_port, port->up.netdev);
2501         }
2502     } else {
2503         bond_unref(bundle->bond);
2504         bundle->bond = NULL;
2505     }
2506
2507     /* If we changed something that would affect MAC learning, un-learn
2508      * everything on this port and force flow revalidation. */
2509     if (need_flush) {
2510         bundle_flush_macs(bundle, false);
2511     }
2512
2513     return 0;
2514 }
2515
2516 static void
2517 bundle_remove(struct ofport *port_)
2518 {
2519     struct ofport_dpif *port = ofport_dpif_cast(port_);
2520     struct ofbundle *bundle = port->bundle;
2521
2522     if (bundle) {
2523         bundle_del_port(port);
2524         if (list_is_empty(&bundle->ports)) {
2525             bundle_destroy(bundle);
2526         } else if (list_is_short(&bundle->ports)) {
2527             bond_unref(bundle->bond);
2528             bundle->bond = NULL;
2529         }
2530     }
2531 }
2532
2533 static void
2534 send_pdu_cb(void *port_, const void *pdu, size_t pdu_size)
2535 {
2536     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 10);
2537     struct ofport_dpif *port = port_;
2538     uint8_t ea[ETH_ADDR_LEN];
2539     int error;
2540
2541     error = netdev_get_etheraddr(port->up.netdev, ea);
2542     if (!error) {
2543         struct ofpbuf packet;
2544         void *packet_pdu;
2545
2546         ofpbuf_init(&packet, 0);
2547         packet_pdu = eth_compose(&packet, eth_addr_lacp, ea, ETH_TYPE_LACP,
2548                                  pdu_size);
2549         memcpy(packet_pdu, pdu, pdu_size);
2550
2551         ofproto_dpif_send_packet(port, &packet);
2552         ofpbuf_uninit(&packet);
2553     } else {
2554         VLOG_ERR_RL(&rl, "port %s: cannot obtain Ethernet address of iface "
2555                     "%s (%s)", port->bundle->name,
2556                     netdev_get_name(port->up.netdev), ovs_strerror(error));
2557     }
2558 }
2559
2560 static void
2561 bundle_send_learning_packets(struct ofbundle *bundle)
2562 {
2563     struct ofproto_dpif *ofproto = bundle->ofproto;
2564     struct ofpbuf *learning_packet;
2565     int error, n_packets, n_errors;
2566     struct mac_entry *e;
2567     struct list packets;
2568
2569     list_init(&packets);
2570     ovs_rwlock_rdlock(&ofproto->ml->rwlock);
2571     LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) {
2572         if (e->port.p != bundle) {
2573             void *port_void;
2574
2575             learning_packet = bond_compose_learning_packet(bundle->bond,
2576                                                            e->mac, e->vlan,
2577                                                            &port_void);
2578             /* Temporarily use 'frame' as a private pointer (see below). */
2579             ovs_assert(learning_packet->frame == ofpbuf_data(learning_packet));
2580             learning_packet->frame = port_void;
2581             list_push_back(&packets, &learning_packet->list_node);
2582         }
2583     }
2584     ovs_rwlock_unlock(&ofproto->ml->rwlock);
2585
2586     error = n_packets = n_errors = 0;
2587     LIST_FOR_EACH (learning_packet, list_node, &packets) {
2588         int ret;
2589         void *port_void = learning_packet->frame;
2590
2591         /* Restore 'frame'. */
2592         learning_packet->frame = ofpbuf_data(learning_packet);
2593         ret = ofproto_dpif_send_packet(port_void, learning_packet);
2594         if (ret) {
2595             error = ret;
2596             n_errors++;
2597         }
2598         n_packets++;
2599     }
2600     ofpbuf_list_delete(&packets);
2601
2602     if (n_errors) {
2603         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
2604         VLOG_WARN_RL(&rl, "bond %s: %d errors sending %d gratuitous learning "
2605                      "packets, last error was: %s",
2606                      bundle->name, n_errors, n_packets, ovs_strerror(error));
2607     } else {
2608         VLOG_DBG("bond %s: sent %d gratuitous learning packets",
2609                  bundle->name, n_packets);
2610     }
2611 }
2612
2613 static void
2614 bundle_run(struct ofbundle *bundle)
2615 {
2616     if (bundle->lacp) {
2617         lacp_run(bundle->lacp, send_pdu_cb);
2618     }
2619     if (bundle->bond) {
2620         struct ofport_dpif *port;
2621
2622         LIST_FOR_EACH (port, bundle_node, &bundle->ports) {
2623             bond_slave_set_may_enable(bundle->bond, port, port->may_enable);
2624         }
2625
2626         if (bond_run(bundle->bond, lacp_status(bundle->lacp))) {
2627             bundle->ofproto->backer->need_revalidate = REV_BOND;
2628         }
2629
2630         if (bond_should_send_learning_packets(bundle->bond)) {
2631             bundle_send_learning_packets(bundle);
2632         }
2633     }
2634 }
2635
2636 static void
2637 bundle_wait(struct ofbundle *bundle)
2638 {
2639     if (bundle->lacp) {
2640         lacp_wait(bundle->lacp);
2641     }
2642     if (bundle->bond) {
2643         bond_wait(bundle->bond);
2644     }
2645 }
2646 \f
2647 /* Mirrors. */
2648
2649 static int
2650 mirror_set__(struct ofproto *ofproto_, void *aux,
2651              const struct ofproto_mirror_settings *s)
2652 {
2653     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2654     struct ofbundle **srcs, **dsts;
2655     int error;
2656     size_t i;
2657
2658     if (!s) {
2659         mirror_destroy(ofproto->mbridge, aux);
2660         return 0;
2661     }
2662
2663     srcs = xmalloc(s->n_srcs * sizeof *srcs);
2664     dsts = xmalloc(s->n_dsts * sizeof *dsts);
2665
2666     for (i = 0; i < s->n_srcs; i++) {
2667         srcs[i] = bundle_lookup(ofproto, s->srcs[i]);
2668     }
2669
2670     for (i = 0; i < s->n_dsts; i++) {
2671         dsts[i] = bundle_lookup(ofproto, s->dsts[i]);
2672     }
2673
2674     error = mirror_set(ofproto->mbridge, aux, s->name, srcs, s->n_srcs, dsts,
2675                        s->n_dsts, s->src_vlans,
2676                        bundle_lookup(ofproto, s->out_bundle), s->out_vlan);
2677     free(srcs);
2678     free(dsts);
2679     return error;
2680 }
2681
2682 static int
2683 mirror_get_stats__(struct ofproto *ofproto, void *aux,
2684                    uint64_t *packets, uint64_t *bytes)
2685 {
2686     return mirror_get_stats(ofproto_dpif_cast(ofproto)->mbridge, aux, packets,
2687                             bytes);
2688 }
2689
2690 static int
2691 set_flood_vlans(struct ofproto *ofproto_, unsigned long *flood_vlans)
2692 {
2693     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2694     ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2695     if (mac_learning_set_flood_vlans(ofproto->ml, flood_vlans)) {
2696         mac_learning_flush(ofproto->ml);
2697     }
2698     ovs_rwlock_unlock(&ofproto->ml->rwlock);
2699     return 0;
2700 }
2701
2702 static bool
2703 is_mirror_output_bundle(const struct ofproto *ofproto_, void *aux)
2704 {
2705     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2706     struct ofbundle *bundle = bundle_lookup(ofproto, aux);
2707     return bundle && mirror_bundle_out(ofproto->mbridge, bundle) != 0;
2708 }
2709
2710 static void
2711 forward_bpdu_changed(struct ofproto *ofproto_)
2712 {
2713     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2714     ofproto->backer->need_revalidate = REV_RECONFIGURE;
2715 }
2716
2717 static void
2718 set_mac_table_config(struct ofproto *ofproto_, unsigned int idle_time,
2719                      size_t max_entries)
2720 {
2721     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2722     ovs_rwlock_wrlock(&ofproto->ml->rwlock);
2723     mac_learning_set_idle_time(ofproto->ml, idle_time);
2724     mac_learning_set_max_entries(ofproto->ml, max_entries);
2725     ovs_rwlock_unlock(&ofproto->ml->rwlock);
2726 }
2727 \f
2728 /* Ports. */
2729
2730 static struct ofport_dpif *
2731 get_ofp_port(const struct ofproto_dpif *ofproto, ofp_port_t ofp_port)
2732 {
2733     struct ofport *ofport = ofproto_get_port(&ofproto->up, ofp_port);
2734     return ofport ? ofport_dpif_cast(ofport) : NULL;
2735 }
2736
2737 static void
2738 ofproto_port_from_dpif_port(struct ofproto_dpif *ofproto,
2739                             struct ofproto_port *ofproto_port,
2740                             struct dpif_port *dpif_port)
2741 {
2742     ofproto_port->name = dpif_port->name;
2743     ofproto_port->type = dpif_port->type;
2744     ofproto_port->ofp_port = odp_port_to_ofp_port(ofproto, dpif_port->port_no);
2745 }
2746
2747 static void
2748 ofport_update_peer(struct ofport_dpif *ofport)
2749 {
2750     const struct ofproto_dpif *ofproto;
2751     struct dpif_backer *backer;
2752     char *peer_name;
2753
2754     if (!netdev_vport_is_patch(ofport->up.netdev)) {
2755         return;
2756     }
2757
2758     backer = ofproto_dpif_cast(ofport->up.ofproto)->backer;
2759     backer->need_revalidate = REV_RECONFIGURE;
2760
2761     if (ofport->peer) {
2762         ofport->peer->peer = NULL;
2763         ofport->peer = NULL;
2764     }
2765
2766     peer_name = netdev_vport_patch_peer(ofport->up.netdev);
2767     if (!peer_name) {
2768         return;
2769     }
2770
2771     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
2772         struct ofport *peer_ofport;
2773         struct ofport_dpif *peer;
2774         char *peer_peer;
2775
2776         if (ofproto->backer != backer) {
2777             continue;
2778         }
2779
2780         peer_ofport = shash_find_data(&ofproto->up.port_by_name, peer_name);
2781         if (!peer_ofport) {
2782             continue;
2783         }
2784
2785         peer = ofport_dpif_cast(peer_ofport);
2786         peer_peer = netdev_vport_patch_peer(peer->up.netdev);
2787         if (peer_peer && !strcmp(netdev_get_name(ofport->up.netdev),
2788                                  peer_peer)) {
2789             ofport->peer = peer;
2790             ofport->peer->peer = ofport;
2791         }
2792         free(peer_peer);
2793
2794         break;
2795     }
2796     free(peer_name);
2797 }
2798
2799 static void
2800 port_run(struct ofport_dpif *ofport)
2801 {
2802     long long int carrier_seq = netdev_get_carrier_resets(ofport->up.netdev);
2803     bool carrier_changed = carrier_seq != ofport->carrier_seq;
2804     bool enable = netdev_get_carrier(ofport->up.netdev);
2805     bool cfm_enable = false;
2806     bool bfd_enable = false;
2807
2808     ofport->carrier_seq = carrier_seq;
2809
2810     if (ofport->cfm) {
2811         int cfm_opup = cfm_get_opup(ofport->cfm);
2812
2813         cfm_enable = !cfm_get_fault(ofport->cfm);
2814
2815         if (cfm_opup >= 0) {
2816             cfm_enable = cfm_enable && cfm_opup;
2817         }
2818     }
2819
2820     if (ofport->bfd) {
2821         bfd_enable = bfd_forwarding(ofport->bfd);
2822     }
2823
2824     if (ofport->bfd || ofport->cfm) {
2825         enable = enable && (cfm_enable || bfd_enable);
2826     }
2827
2828     if (ofport->bundle) {
2829         enable = enable && lacp_slave_may_enable(ofport->bundle->lacp, ofport);
2830         if (carrier_changed) {
2831             lacp_slave_carrier_changed(ofport->bundle->lacp, ofport);
2832         }
2833     }
2834
2835     if (ofport->may_enable != enable) {
2836         struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2837         ofproto->backer->need_revalidate = REV_PORT_TOGGLED;
2838     }
2839
2840     ofport->may_enable = enable;
2841 }
2842
2843 static int
2844 port_query_by_name(const struct ofproto *ofproto_, const char *devname,
2845                    struct ofproto_port *ofproto_port)
2846 {
2847     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2848     struct dpif_port dpif_port;
2849     int error;
2850
2851     if (sset_contains(&ofproto->ghost_ports, devname)) {
2852         const char *type = netdev_get_type_from_name(devname);
2853
2854         /* We may be called before ofproto->up.port_by_name is populated with
2855          * the appropriate ofport.  For this reason, we must get the name and
2856          * type from the netdev layer directly. */
2857         if (type) {
2858             const struct ofport *ofport;
2859
2860             ofport = shash_find_data(&ofproto->up.port_by_name, devname);
2861             ofproto_port->ofp_port = ofport ? ofport->ofp_port : OFPP_NONE;
2862             ofproto_port->name = xstrdup(devname);
2863             ofproto_port->type = xstrdup(type);
2864             return 0;
2865         }
2866         return ENODEV;
2867     }
2868
2869     if (!sset_contains(&ofproto->ports, devname)) {
2870         return ENODEV;
2871     }
2872     error = dpif_port_query_by_name(ofproto->backer->dpif,
2873                                     devname, &dpif_port);
2874     if (!error) {
2875         ofproto_port_from_dpif_port(ofproto, ofproto_port, &dpif_port);
2876     }
2877     return error;
2878 }
2879
2880 static int
2881 port_add(struct ofproto *ofproto_, struct netdev *netdev)
2882 {
2883     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2884     const char *devname = netdev_get_name(netdev);
2885     char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
2886     const char *dp_port_name;
2887
2888     if (netdev_vport_is_patch(netdev)) {
2889         sset_add(&ofproto->ghost_ports, netdev_get_name(netdev));
2890         return 0;
2891     }
2892
2893     dp_port_name = netdev_vport_get_dpif_port(netdev, namebuf, sizeof namebuf);
2894     if (!dpif_port_exists(ofproto->backer->dpif, dp_port_name)) {
2895         odp_port_t port_no = ODPP_NONE;
2896         int error;
2897
2898         error = dpif_port_add(ofproto->backer->dpif, netdev, &port_no);
2899         if (error) {
2900             return error;
2901         }
2902         if (netdev_get_tunnel_config(netdev)) {
2903             simap_put(&ofproto->backer->tnl_backers,
2904                       dp_port_name, odp_to_u32(port_no));
2905         }
2906     }
2907
2908     if (netdev_get_tunnel_config(netdev)) {
2909         sset_add(&ofproto->ghost_ports, devname);
2910     } else {
2911         sset_add(&ofproto->ports, devname);
2912     }
2913     return 0;
2914 }
2915
2916 static int
2917 port_del(struct ofproto *ofproto_, ofp_port_t ofp_port)
2918 {
2919     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
2920     struct ofport_dpif *ofport = get_ofp_port(ofproto, ofp_port);
2921     int error = 0;
2922
2923     if (!ofport) {
2924         return 0;
2925     }
2926
2927     sset_find_and_delete(&ofproto->ghost_ports,
2928                          netdev_get_name(ofport->up.netdev));
2929     ofproto->backer->need_revalidate = REV_RECONFIGURE;
2930     if (!ofport->is_tunnel && !netdev_vport_is_patch(ofport->up.netdev)) {
2931         error = dpif_port_del(ofproto->backer->dpif, ofport->odp_port);
2932         if (!error) {
2933             /* The caller is going to close ofport->up.netdev.  If this is a
2934              * bonded port, then the bond is using that netdev, so remove it
2935              * from the bond.  The client will need to reconfigure everything
2936              * after deleting ports, so then the slave will get re-added. */
2937             bundle_remove(&ofport->up);
2938         }
2939     }
2940     return error;
2941 }
2942
2943 static int
2944 port_get_stats(const struct ofport *ofport_, struct netdev_stats *stats)
2945 {
2946     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
2947     int error;
2948
2949     error = netdev_get_stats(ofport->up.netdev, stats);
2950
2951     if (!error && ofport_->ofp_port == OFPP_LOCAL) {
2952         struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
2953
2954         ovs_mutex_lock(&ofproto->stats_mutex);
2955         /* ofproto->stats.tx_packets represents packets that we created
2956          * internally and sent to some port (e.g. packets sent with
2957          * ofproto_dpif_send_packet()).  Account for them as if they had
2958          * come from OFPP_LOCAL and got forwarded. */
2959
2960         if (stats->rx_packets != UINT64_MAX) {
2961             stats->rx_packets += ofproto->stats.tx_packets;
2962         }
2963
2964         if (stats->rx_bytes != UINT64_MAX) {
2965             stats->rx_bytes += ofproto->stats.tx_bytes;
2966         }
2967
2968         /* ofproto->stats.rx_packets represents packets that were received on
2969          * some port and we processed internally and dropped (e.g. STP).
2970          * Account for them as if they had been forwarded to OFPP_LOCAL. */
2971
2972         if (stats->tx_packets != UINT64_MAX) {
2973             stats->tx_packets += ofproto->stats.rx_packets;
2974         }
2975
2976         if (stats->tx_bytes != UINT64_MAX) {
2977             stats->tx_bytes += ofproto->stats.rx_bytes;
2978         }
2979         ovs_mutex_unlock(&ofproto->stats_mutex);
2980     }
2981
2982     return error;
2983 }
2984
2985 struct port_dump_state {
2986     uint32_t bucket;
2987     uint32_t offset;
2988     bool ghost;
2989
2990     struct ofproto_port port;
2991     bool has_port;
2992 };
2993
2994 static int
2995 port_dump_start(const struct ofproto *ofproto_ OVS_UNUSED, void **statep)
2996 {
2997     *statep = xzalloc(sizeof(struct port_dump_state));
2998     return 0;
2999 }
3000
3001 static int
3002 port_dump_next(const struct ofproto *ofproto_, void *state_,
3003                struct ofproto_port *port)
3004 {
3005     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3006     struct port_dump_state *state = state_;
3007     const struct sset *sset;
3008     struct sset_node *node;
3009
3010     if (state->has_port) {
3011         ofproto_port_destroy(&state->port);
3012         state->has_port = false;
3013     }
3014     sset = state->ghost ? &ofproto->ghost_ports : &ofproto->ports;
3015     while ((node = sset_at_position(sset, &state->bucket, &state->offset))) {
3016         int error;
3017
3018         error = port_query_by_name(ofproto_, node->name, &state->port);
3019         if (!error) {
3020             *port = state->port;
3021             state->has_port = true;
3022             return 0;
3023         } else if (error != ENODEV) {
3024             return error;
3025         }
3026     }
3027
3028     if (!state->ghost) {
3029         state->ghost = true;
3030         state->bucket = 0;
3031         state->offset = 0;
3032         return port_dump_next(ofproto_, state_, port);
3033     }
3034
3035     return EOF;
3036 }
3037
3038 static int
3039 port_dump_done(const struct ofproto *ofproto_ OVS_UNUSED, void *state_)
3040 {
3041     struct port_dump_state *state = state_;
3042
3043     if (state->has_port) {
3044         ofproto_port_destroy(&state->port);
3045     }
3046     free(state);
3047     return 0;
3048 }
3049
3050 static int
3051 port_poll(const struct ofproto *ofproto_, char **devnamep)
3052 {
3053     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3054
3055     if (ofproto->port_poll_errno) {
3056         int error = ofproto->port_poll_errno;
3057         ofproto->port_poll_errno = 0;
3058         return error;
3059     }
3060
3061     if (sset_is_empty(&ofproto->port_poll_set)) {
3062         return EAGAIN;
3063     }
3064
3065     *devnamep = sset_pop(&ofproto->port_poll_set);
3066     return 0;
3067 }
3068
3069 static void
3070 port_poll_wait(const struct ofproto *ofproto_)
3071 {
3072     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3073     dpif_port_poll_wait(ofproto->backer->dpif);
3074 }
3075
3076 static int
3077 port_is_lacp_current(const struct ofport *ofport_)
3078 {
3079     const struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
3080     return (ofport->bundle && ofport->bundle->lacp
3081             ? lacp_slave_is_current(ofport->bundle->lacp, ofport)
3082             : -1);
3083 }
3084 \f
3085 /* If 'rule' is an OpenFlow rule, that has expired according to OpenFlow rules,
3086  * then delete it entirely. */
3087 static void
3088 rule_expire(struct rule_dpif *rule)
3089     OVS_REQUIRES(ofproto_mutex)
3090 {
3091     uint16_t hard_timeout, idle_timeout;
3092     long long int now = time_msec();
3093     int reason = -1;
3094
3095     ovs_assert(!rule->up.pending);
3096
3097     hard_timeout = rule->up.hard_timeout;
3098     idle_timeout = rule->up.idle_timeout;
3099
3100     /* Has 'rule' expired? */
3101     if (hard_timeout) {
3102         long long int modified;
3103
3104         ovs_mutex_lock(&rule->up.mutex);
3105         modified = rule->up.modified;
3106         ovs_mutex_unlock(&rule->up.mutex);
3107
3108         if (now > modified + hard_timeout * 1000) {
3109             reason = OFPRR_HARD_TIMEOUT;
3110         }
3111     }
3112
3113     if (reason < 0 && idle_timeout) {
3114         long long int used;
3115
3116         ovs_mutex_lock(&rule->stats_mutex);
3117         used = rule->stats.used;
3118         ovs_mutex_unlock(&rule->stats_mutex);
3119
3120         if (now > used + idle_timeout * 1000) {
3121             reason = OFPRR_IDLE_TIMEOUT;
3122         }
3123     }
3124
3125     if (reason >= 0) {
3126         COVERAGE_INC(ofproto_dpif_expired);
3127         ofproto_rule_expire(&rule->up, reason);
3128     }
3129 }
3130
3131 /* Executes, within 'ofproto', the actions in 'rule' or 'ofpacts' on 'packet'.
3132  * 'flow' must reflect the data in 'packet'. */
3133 int
3134 ofproto_dpif_execute_actions(struct ofproto_dpif *ofproto,
3135                              const struct flow *flow,
3136                              struct rule_dpif *rule,
3137                              const struct ofpact *ofpacts, size_t ofpacts_len,
3138                              struct ofpbuf *packet)
3139 {
3140     struct dpif_flow_stats stats;
3141     struct xlate_out xout;
3142     struct xlate_in xin;
3143     ofp_port_t in_port;
3144     struct dpif_execute execute;
3145     int error;
3146
3147     ovs_assert((rule != NULL) != (ofpacts != NULL));
3148
3149     dpif_flow_stats_extract(flow, packet, time_msec(), &stats);
3150
3151     if (rule) {
3152         rule_dpif_credit_stats(rule, &stats);
3153     }
3154
3155     xlate_in_init(&xin, ofproto, flow, rule, stats.tcp_flags, packet);
3156     xin.ofpacts = ofpacts;
3157     xin.ofpacts_len = ofpacts_len;
3158     xin.resubmit_stats = &stats;
3159     xlate_actions(&xin, &xout);
3160
3161     execute.actions = ofpbuf_data(&xout.odp_actions);
3162     execute.actions_len = ofpbuf_size(&xout.odp_actions);
3163     execute.packet = packet;
3164     execute.md = pkt_metadata_from_flow(flow);
3165     execute.needs_help = (xout.slow & SLOW_ACTION) != 0;
3166
3167     /* Fix up in_port. */
3168     in_port = flow->in_port.ofp_port;
3169     if (in_port == OFPP_NONE) {
3170         in_port = OFPP_LOCAL;
3171     }
3172     execute.md.in_port.odp_port = ofp_port_to_odp_port(ofproto, in_port);
3173
3174     error = dpif_execute(ofproto->backer->dpif, &execute);
3175
3176     xlate_out_uninit(&xout);
3177
3178     return error;
3179 }
3180
3181 void
3182 rule_dpif_credit_stats(struct rule_dpif *rule,
3183                        const struct dpif_flow_stats *stats)
3184 {
3185     ovs_mutex_lock(&rule->stats_mutex);
3186     rule->stats.n_packets += stats->n_packets;
3187     rule->stats.n_bytes += stats->n_bytes;
3188     rule->stats.used = MAX(rule->stats.used, stats->used);
3189     ovs_mutex_unlock(&rule->stats_mutex);
3190 }
3191
3192 ovs_be64
3193 rule_dpif_get_flow_cookie(const struct rule_dpif *rule)
3194     OVS_REQUIRES(rule->up.mutex)
3195 {
3196     return rule->up.flow_cookie;
3197 }
3198
3199 void
3200 rule_dpif_reduce_timeouts(struct rule_dpif *rule, uint16_t idle_timeout,
3201                      uint16_t hard_timeout)
3202 {
3203     ofproto_rule_reduce_timeouts(&rule->up, idle_timeout, hard_timeout);
3204 }
3205
3206 /* Returns 'rule''s actions.  The caller owns a reference on the returned
3207  * actions and must eventually release it (with rule_actions_unref()) to avoid
3208  * a memory leak. */
3209 const struct rule_actions *
3210 rule_dpif_get_actions(const struct rule_dpif *rule)
3211 {
3212     return rule_get_actions(&rule->up);
3213 }
3214
3215 /* Lookup 'flow' in table 0 of 'ofproto''s classifier.
3216  * If 'wc' is non-null, sets the fields that were relevant as part of
3217  * the lookup. Returns the table_id where a match or miss occurred.
3218  *
3219  * The return value will be zero unless there was a miss and
3220  * OFPTC11_TABLE_MISS_CONTINUE is in effect for the sequence of tables
3221  * where misses occur.
3222  *
3223  * The rule is returned in '*rule', which is valid at least until the next
3224  * RCU quiescent period.  If the '*rule' needs to stay around longer,
3225  * a non-zero 'take_ref' must be passed in to cause a reference to be taken
3226  * on it before this returns. */
3227 uint8_t
3228 rule_dpif_lookup(struct ofproto_dpif *ofproto, struct flow *flow,
3229                  struct flow_wildcards *wc, struct rule_dpif **rule,
3230                  bool take_ref)
3231 {
3232     enum rule_dpif_lookup_verdict verdict;
3233     enum ofputil_port_config config = 0;
3234     uint8_t table_id;
3235
3236     if (ofproto_dpif_get_enable_recirc(ofproto)) {
3237         /* Always exactly match recirc_id since datapath supports
3238          * recirculation.  */
3239         if (wc) {
3240             wc->masks.recirc_id = UINT32_MAX;
3241         }
3242         table_id = rule_dpif_lookup_get_init_table_id(flow);
3243     } else {
3244         table_id = 0;
3245     }
3246
3247     verdict = rule_dpif_lookup_from_table(ofproto, flow, wc, true,
3248                                           &table_id, rule, take_ref);
3249
3250     switch (verdict) {
3251     case RULE_DPIF_LOOKUP_VERDICT_MATCH:
3252         return table_id;
3253     case RULE_DPIF_LOOKUP_VERDICT_CONTROLLER: {
3254         struct ofport_dpif *port;
3255
3256         port = get_ofp_port(ofproto, flow->in_port.ofp_port);
3257         if (!port) {
3258             VLOG_WARN_RL(&rl, "packet-in on unknown OpenFlow port %"PRIu16,
3259                          flow->in_port.ofp_port);
3260         }
3261         config = port ? port->up.pp.config : 0;
3262         break;
3263     }
3264     case RULE_DPIF_LOOKUP_VERDICT_DROP:
3265         config = OFPUTIL_PC_NO_PACKET_IN;
3266         break;
3267     case RULE_DPIF_LOOKUP_VERDICT_DEFAULT:
3268         if (!connmgr_wants_packet_in_on_miss(ofproto->up.connmgr)) {
3269             config = OFPUTIL_PC_NO_PACKET_IN;
3270         }
3271         break;
3272     default:
3273         OVS_NOT_REACHED();
3274     }
3275
3276     choose_miss_rule(config, ofproto->miss_rule,
3277                      ofproto->no_packet_in_rule, rule, take_ref);
3278     return table_id;
3279 }
3280
3281 /* The returned rule is valid at least until the next RCU quiescent period.
3282  * If the '*rule' needs to stay around longer, a non-zero 'take_ref' must be
3283  * passed in to cause a reference to be taken on it before this returns. */
3284 static struct rule_dpif *
3285 rule_dpif_lookup_in_table(struct ofproto_dpif *ofproto, uint8_t table_id,
3286                           const struct flow *flow, struct flow_wildcards *wc,
3287                           bool take_ref)
3288 {
3289     struct classifier *cls = &ofproto->up.tables[table_id].cls;
3290     const struct cls_rule *cls_rule;
3291     struct rule_dpif *rule;
3292
3293     fat_rwlock_rdlock(&cls->rwlock);
3294     if (ofproto->up.frag_handling != OFPC_FRAG_NX_MATCH) {
3295         if (wc) {
3296             memset(&wc->masks.dl_type, 0xff, sizeof wc->masks.dl_type);
3297             if (is_ip_any(flow)) {
3298                 wc->masks.nw_frag |= FLOW_NW_FRAG_MASK;
3299             }
3300         }
3301
3302         if (flow->nw_frag & FLOW_NW_FRAG_ANY) {
3303             if (ofproto->up.frag_handling == OFPC_FRAG_NORMAL) {
3304                 /* We must pretend that transport ports are unavailable. */
3305                 struct flow ofpc_normal_flow = *flow;
3306                 ofpc_normal_flow.tp_src = htons(0);
3307                 ofpc_normal_flow.tp_dst = htons(0);
3308                 cls_rule = classifier_lookup(cls, &ofpc_normal_flow, wc);
3309             } else {
3310                 /* Must be OFPC_FRAG_DROP (we don't have OFPC_FRAG_REASM). */
3311                 cls_rule = &ofproto->drop_frags_rule->up.cr;
3312             }
3313         } else {
3314             cls_rule = classifier_lookup(cls, flow, wc);
3315         }
3316     } else {
3317         cls_rule = classifier_lookup(cls, flow, wc);
3318     }
3319
3320     rule = rule_dpif_cast(rule_from_cls_rule(cls_rule));
3321     if (take_ref) {
3322         rule_dpif_ref(rule);
3323     }
3324     fat_rwlock_unlock(&cls->rwlock);
3325
3326     return rule;
3327 }
3328
3329 /* Look up 'flow' in 'ofproto''s classifier starting from table '*table_id'.
3330  * Stores the rule that was found in '*rule', or NULL if none was found.
3331  * Updates 'wc', if nonnull, to reflect the fields that were used during the
3332  * lookup.
3333  *
3334  * If 'honor_table_miss' is true, the first lookup occurs in '*table_id', but
3335  * if none is found then the table miss configuration for that table is
3336  * honored, which can result in additional lookups in other OpenFlow tables.
3337  * In this case the function updates '*table_id' to reflect the final OpenFlow
3338  * table that was searched.
3339  *
3340  * If 'honor_table_miss' is false, then only one table lookup occurs, in
3341  * '*table_id'.
3342  *
3343  * Returns:
3344  *
3345  *    - RULE_DPIF_LOOKUP_VERDICT_MATCH if a rule (in '*rule') was found.
3346  *
3347  *    - RULE_OFPTC_TABLE_MISS_CONTROLLER if no rule was found and either:
3348  *      + 'honor_table_miss' is false
3349  *      + a table miss configuration specified that the packet should be
3350  *        sent to the controller in this case.
3351  *
3352  *    - RULE_DPIF_LOOKUP_VERDICT_DROP if no rule was found, 'honor_table_miss'
3353  *      is true and a table miss configuration specified that the packet
3354  *      should be dropped in this case.
3355  *
3356  *    - RULE_DPIF_LOOKUP_VERDICT_DEFAULT if no rule was found,
3357  *      'honor_table_miss' is true and a table miss configuration has
3358  *      not been specified in this case.
3359  *
3360  * The rule is returned in '*rule', which is valid at least until the next
3361  * RCU quiescent period.  If the '*rule' needs to stay around longer,
3362  * a non-zero 'take_ref' must be passed in to cause a reference to be taken
3363  * on it before this returns. */
3364 enum rule_dpif_lookup_verdict
3365 rule_dpif_lookup_from_table(struct ofproto_dpif *ofproto,
3366                             const struct flow *flow,
3367                             struct flow_wildcards *wc,
3368                             bool honor_table_miss,
3369                             uint8_t *table_id, struct rule_dpif **rule,
3370                             bool take_ref)
3371 {
3372     uint8_t next_id;
3373
3374     for (next_id = *table_id;
3375          next_id < ofproto->up.n_tables;
3376          next_id++, next_id += (next_id == TBL_INTERNAL))
3377     {
3378         *table_id = next_id;
3379         *rule = rule_dpif_lookup_in_table(ofproto, *table_id, flow, wc,
3380                                           take_ref);
3381         if (*rule) {
3382             return RULE_DPIF_LOOKUP_VERDICT_MATCH;
3383         } else if (!honor_table_miss) {
3384             return RULE_DPIF_LOOKUP_VERDICT_CONTROLLER;
3385         } else {
3386             switch (ofproto_table_get_config(&ofproto->up, *table_id)) {
3387             case OFPROTO_TABLE_MISS_CONTINUE:
3388                 break;
3389
3390             case OFPROTO_TABLE_MISS_CONTROLLER:
3391                 return RULE_DPIF_LOOKUP_VERDICT_CONTROLLER;
3392
3393             case OFPROTO_TABLE_MISS_DROP:
3394                 return RULE_DPIF_LOOKUP_VERDICT_DROP;
3395
3396             case OFPROTO_TABLE_MISS_DEFAULT:
3397                 return RULE_DPIF_LOOKUP_VERDICT_DEFAULT;
3398             }
3399         }
3400     }
3401
3402     return RULE_DPIF_LOOKUP_VERDICT_CONTROLLER;
3403 }
3404
3405 /* Given a port configuration (specified as zero if there's no port), chooses
3406  * which of 'miss_rule' and 'no_packet_in_rule' should be used in case of a
3407  * flow table miss.
3408  *
3409  * The rule is returned in '*rule', which is valid at least until the next
3410  * RCU quiescent period.  If the '*rule' needs to stay around longer,
3411  * a reference must be taken on it (rule_dpif_ref()).
3412  */
3413 void
3414 choose_miss_rule(enum ofputil_port_config config, struct rule_dpif *miss_rule,
3415                  struct rule_dpif *no_packet_in_rule, struct rule_dpif **rule,
3416                  bool take_ref)
3417 {
3418     *rule = config & OFPUTIL_PC_NO_PACKET_IN ? no_packet_in_rule : miss_rule;
3419     if (take_ref) {
3420         rule_dpif_ref(*rule);
3421     }
3422 }
3423
3424 static void
3425 complete_operation(struct rule_dpif *rule)
3426     OVS_REQUIRES(ofproto_mutex)
3427 {
3428     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
3429
3430     ofproto->backer->need_revalidate = REV_FLOW_TABLE;
3431     ofoperation_complete(rule->up.pending, 0);
3432 }
3433
3434 static struct rule_dpif *rule_dpif_cast(const struct rule *rule)
3435 {
3436     return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL;
3437 }
3438
3439 static struct rule *
3440 rule_alloc(void)
3441 {
3442     struct rule_dpif *rule = xmalloc(sizeof *rule);
3443     return &rule->up;
3444 }
3445
3446 static void
3447 rule_dealloc(struct rule *rule_)
3448 {
3449     struct rule_dpif *rule = rule_dpif_cast(rule_);
3450     free(rule);
3451 }
3452
3453 static enum ofperr
3454 rule_construct(struct rule *rule_)
3455     OVS_NO_THREAD_SAFETY_ANALYSIS
3456 {
3457     struct rule_dpif *rule = rule_dpif_cast(rule_);
3458     ovs_mutex_init_adaptive(&rule->stats_mutex);
3459     rule->stats.n_packets = 0;
3460     rule->stats.n_bytes = 0;
3461     rule->stats.used = rule->up.modified;
3462     return 0;
3463 }
3464
3465 static void
3466 rule_insert(struct rule *rule_)
3467     OVS_REQUIRES(ofproto_mutex)
3468 {
3469     struct rule_dpif *rule = rule_dpif_cast(rule_);
3470     complete_operation(rule);
3471 }
3472
3473 static void
3474 rule_delete(struct rule *rule_)
3475     OVS_REQUIRES(ofproto_mutex)
3476 {
3477     struct rule_dpif *rule = rule_dpif_cast(rule_);
3478     complete_operation(rule);
3479 }
3480
3481 static void
3482 rule_destruct(struct rule *rule_)
3483 {
3484     struct rule_dpif *rule = rule_dpif_cast(rule_);
3485     ovs_mutex_destroy(&rule->stats_mutex);
3486 }
3487
3488 static void
3489 rule_get_stats(struct rule *rule_, uint64_t *packets, uint64_t *bytes,
3490                long long int *used)
3491 {
3492     struct rule_dpif *rule = rule_dpif_cast(rule_);
3493
3494     ovs_mutex_lock(&rule->stats_mutex);
3495     *packets = rule->stats.n_packets;
3496     *bytes = rule->stats.n_bytes;
3497     *used = rule->stats.used;
3498     ovs_mutex_unlock(&rule->stats_mutex);
3499 }
3500
3501 static void
3502 rule_dpif_execute(struct rule_dpif *rule, const struct flow *flow,
3503                   struct ofpbuf *packet)
3504 {
3505     struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
3506
3507     ofproto_dpif_execute_actions(ofproto, flow, rule, NULL, 0, packet);
3508 }
3509
3510 static enum ofperr
3511 rule_execute(struct rule *rule, const struct flow *flow,
3512              struct ofpbuf *packet)
3513 {
3514     rule_dpif_execute(rule_dpif_cast(rule), flow, packet);
3515     ofpbuf_delete(packet);
3516     return 0;
3517 }
3518
3519 static void
3520 rule_modify_actions(struct rule *rule_, bool reset_counters)
3521     OVS_REQUIRES(ofproto_mutex)
3522 {
3523     struct rule_dpif *rule = rule_dpif_cast(rule_);
3524
3525     if (reset_counters) {
3526         ovs_mutex_lock(&rule->stats_mutex);
3527         rule->stats.n_packets = 0;
3528         rule->stats.n_bytes = 0;
3529         ovs_mutex_unlock(&rule->stats_mutex);
3530     }
3531
3532     complete_operation(rule);
3533 }
3534
3535 static struct group_dpif *group_dpif_cast(const struct ofgroup *group)
3536 {
3537     return group ? CONTAINER_OF(group, struct group_dpif, up) : NULL;
3538 }
3539
3540 static struct ofgroup *
3541 group_alloc(void)
3542 {
3543     struct group_dpif *group = xzalloc(sizeof *group);
3544     return &group->up;
3545 }
3546
3547 static void
3548 group_dealloc(struct ofgroup *group_)
3549 {
3550     struct group_dpif *group = group_dpif_cast(group_);
3551     free(group);
3552 }
3553
3554 static void
3555 group_construct_stats(struct group_dpif *group)
3556     OVS_REQUIRES(group->stats_mutex)
3557 {
3558     group->packet_count = 0;
3559     group->byte_count = 0;
3560     if (!group->bucket_stats) {
3561         group->bucket_stats = xcalloc(group->up.n_buckets,
3562                                       sizeof *group->bucket_stats);
3563     } else {
3564         memset(group->bucket_stats, 0, group->up.n_buckets *
3565                sizeof *group->bucket_stats);
3566     }
3567 }
3568
3569 static enum ofperr
3570 group_construct(struct ofgroup *group_)
3571 {
3572     struct group_dpif *group = group_dpif_cast(group_);
3573     const struct ofputil_bucket *bucket;
3574
3575     /* Prevent group chaining because our locking structure makes it hard to
3576      * implement deadlock-free.  (See xlate_group_resource_check().) */
3577     LIST_FOR_EACH (bucket, list_node, &group->up.buckets) {
3578         const struct ofpact *a;
3579
3580         OFPACT_FOR_EACH (a, bucket->ofpacts, bucket->ofpacts_len) {
3581             if (a->type == OFPACT_GROUP) {
3582                 return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
3583             }
3584         }
3585     }
3586
3587     ovs_mutex_init_adaptive(&group->stats_mutex);
3588     ovs_mutex_lock(&group->stats_mutex);
3589     group_construct_stats(group);
3590     ovs_mutex_unlock(&group->stats_mutex);
3591     return 0;
3592 }
3593
3594 static void
3595 group_destruct__(struct group_dpif *group)
3596     OVS_REQUIRES(group->stats_mutex)
3597 {
3598     free(group->bucket_stats);
3599     group->bucket_stats = NULL;
3600 }
3601
3602 static void
3603 group_destruct(struct ofgroup *group_)
3604 {
3605     struct group_dpif *group = group_dpif_cast(group_);
3606     ovs_mutex_lock(&group->stats_mutex);
3607     group_destruct__(group);
3608     ovs_mutex_unlock(&group->stats_mutex);
3609     ovs_mutex_destroy(&group->stats_mutex);
3610 }
3611
3612 static enum ofperr
3613 group_modify(struct ofgroup *group_, struct ofgroup *victim_)
3614 {
3615     struct ofproto_dpif *ofproto = ofproto_dpif_cast(group_->ofproto);
3616     struct group_dpif *group = group_dpif_cast(group_);
3617     struct group_dpif *victim = group_dpif_cast(victim_);
3618
3619     ovs_mutex_lock(&group->stats_mutex);
3620     if (victim->up.n_buckets < group->up.n_buckets) {
3621         group_destruct__(group);
3622     }
3623     group_construct_stats(group);
3624     ovs_mutex_unlock(&group->stats_mutex);
3625
3626     ofproto->backer->need_revalidate = REV_FLOW_TABLE;
3627
3628     return 0;
3629 }
3630
3631 static enum ofperr
3632 group_get_stats(const struct ofgroup *group_, struct ofputil_group_stats *ogs)
3633 {
3634     struct group_dpif *group = group_dpif_cast(group_);
3635
3636     ovs_mutex_lock(&group->stats_mutex);
3637     ogs->packet_count = group->packet_count;
3638     ogs->byte_count = group->byte_count;
3639     memcpy(ogs->bucket_stats, group->bucket_stats,
3640            group->up.n_buckets * sizeof *group->bucket_stats);
3641     ovs_mutex_unlock(&group->stats_mutex);
3642
3643     return 0;
3644 }
3645
3646 bool
3647 group_dpif_lookup(struct ofproto_dpif *ofproto, uint32_t group_id,
3648                   struct group_dpif **group)
3649     OVS_TRY_RDLOCK(true, (*group)->up.rwlock)
3650 {
3651     struct ofgroup *ofgroup;
3652     bool found;
3653
3654     *group = NULL;
3655     found = ofproto_group_lookup(&ofproto->up, group_id, &ofgroup);
3656     *group = found ?  group_dpif_cast(ofgroup) : NULL;
3657
3658     return found;
3659 }
3660
3661 void
3662 group_dpif_release(struct group_dpif *group)
3663     OVS_RELEASES(group->up.rwlock)
3664 {
3665     ofproto_group_release(&group->up);
3666 }
3667
3668 void
3669 group_dpif_get_buckets(const struct group_dpif *group,
3670                        const struct list **buckets)
3671 {
3672     *buckets = &group->up.buckets;
3673 }
3674
3675 enum ofp11_group_type
3676 group_dpif_get_type(const struct group_dpif *group)
3677 {
3678     return group->up.type;
3679 }
3680 \f
3681 /* Sends 'packet' out 'ofport'.
3682  * May modify 'packet'.
3683  * Returns 0 if successful, otherwise a positive errno value. */
3684 int
3685 ofproto_dpif_send_packet(const struct ofport_dpif *ofport, struct ofpbuf *packet)
3686 {
3687     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto);
3688     int error;
3689
3690     error = xlate_send_packet(ofport, packet);
3691
3692     ovs_mutex_lock(&ofproto->stats_mutex);
3693     ofproto->stats.tx_packets++;
3694     ofproto->stats.tx_bytes += ofpbuf_size(packet);
3695     ovs_mutex_unlock(&ofproto->stats_mutex);
3696     return error;
3697 }
3698 \f
3699 static bool
3700 set_frag_handling(struct ofproto *ofproto_,
3701                   enum ofp_config_flags frag_handling)
3702 {
3703     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3704     if (frag_handling != OFPC_FRAG_REASM) {
3705         ofproto->backer->need_revalidate = REV_RECONFIGURE;
3706         return true;
3707     } else {
3708         return false;
3709     }
3710 }
3711
3712 static enum ofperr
3713 packet_out(struct ofproto *ofproto_, struct ofpbuf *packet,
3714            const struct flow *flow,
3715            const struct ofpact *ofpacts, size_t ofpacts_len)
3716 {
3717     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3718
3719     ofproto_dpif_execute_actions(ofproto, flow, NULL, ofpacts,
3720                                  ofpacts_len, packet);
3721     return 0;
3722 }
3723 \f
3724 /* NetFlow. */
3725
3726 static int
3727 set_netflow(struct ofproto *ofproto_,
3728             const struct netflow_options *netflow_options)
3729 {
3730     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3731
3732     if (netflow_options) {
3733         if (!ofproto->netflow) {
3734             ofproto->netflow = netflow_create();
3735             ofproto->backer->need_revalidate = REV_RECONFIGURE;
3736         }
3737         return netflow_set_options(ofproto->netflow, netflow_options);
3738     } else if (ofproto->netflow) {
3739         ofproto->backer->need_revalidate = REV_RECONFIGURE;
3740         netflow_unref(ofproto->netflow);
3741         ofproto->netflow = NULL;
3742     }
3743
3744     return 0;
3745 }
3746
3747 static void
3748 get_netflow_ids(const struct ofproto *ofproto_,
3749                 uint8_t *engine_type, uint8_t *engine_id)
3750 {
3751     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
3752
3753     dpif_get_netflow_ids(ofproto->backer->dpif, engine_type, engine_id);
3754 }
3755 \f
3756 static struct ofproto_dpif *
3757 ofproto_dpif_lookup(const char *name)
3758 {
3759     struct ofproto_dpif *ofproto;
3760
3761     HMAP_FOR_EACH_WITH_HASH (ofproto, all_ofproto_dpifs_node,
3762                              hash_string(name, 0), &all_ofproto_dpifs) {
3763         if (!strcmp(ofproto->up.name, name)) {
3764             return ofproto;
3765         }
3766     }
3767     return NULL;
3768 }
3769
3770 static void
3771 ofproto_unixctl_fdb_flush(struct unixctl_conn *conn, int argc,
3772                           const char *argv[], void *aux OVS_UNUSED)
3773 {
3774     struct ofproto_dpif *ofproto;
3775
3776     if (argc > 1) {
3777         ofproto = ofproto_dpif_lookup(argv[1]);
3778         if (!ofproto) {
3779             unixctl_command_reply_error(conn, "no such bridge");
3780             return;
3781         }
3782         ovs_rwlock_wrlock(&ofproto->ml->rwlock);
3783         mac_learning_flush(ofproto->ml);
3784         ovs_rwlock_unlock(&ofproto->ml->rwlock);
3785     } else {
3786         HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
3787             ovs_rwlock_wrlock(&ofproto->ml->rwlock);
3788             mac_learning_flush(ofproto->ml);
3789             ovs_rwlock_unlock(&ofproto->ml->rwlock);
3790         }
3791     }
3792
3793     unixctl_command_reply(conn, "table successfully flushed");
3794 }
3795
3796 static struct ofport_dpif *
3797 ofbundle_get_a_port(const struct ofbundle *bundle)
3798 {
3799     return CONTAINER_OF(list_front(&bundle->ports), struct ofport_dpif,
3800                         bundle_node);
3801 }
3802
3803 static void
3804 ofproto_unixctl_fdb_show(struct unixctl_conn *conn, int argc OVS_UNUSED,
3805                          const char *argv[], void *aux OVS_UNUSED)
3806 {
3807     struct ds ds = DS_EMPTY_INITIALIZER;
3808     const struct ofproto_dpif *ofproto;
3809     const struct mac_entry *e;
3810
3811     ofproto = ofproto_dpif_lookup(argv[1]);
3812     if (!ofproto) {
3813         unixctl_command_reply_error(conn, "no such bridge");
3814         return;
3815     }
3816
3817     ds_put_cstr(&ds, " port  VLAN  MAC                Age\n");
3818     ovs_rwlock_rdlock(&ofproto->ml->rwlock);
3819     LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) {
3820         struct ofbundle *bundle = e->port.p;
3821         char name[OFP_MAX_PORT_NAME_LEN];
3822
3823         ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port,
3824                                name, sizeof name);
3825         ds_put_format(&ds, "%5s  %4d  "ETH_ADDR_FMT"  %3d\n",
3826                       name, e->vlan, ETH_ADDR_ARGS(e->mac),
3827                       mac_entry_age(ofproto->ml, e));
3828     }
3829     ovs_rwlock_unlock(&ofproto->ml->rwlock);
3830     unixctl_command_reply(conn, ds_cstr(&ds));
3831     ds_destroy(&ds);
3832 }
3833
3834 struct trace_ctx {
3835     struct xlate_out xout;
3836     struct xlate_in xin;
3837     const struct flow *key;
3838     struct flow flow;
3839     struct flow_wildcards wc;
3840     struct ds *result;
3841 };
3842
3843 static void
3844 trace_format_rule(struct ds *result, int level, const struct rule_dpif *rule)
3845 {
3846     const struct rule_actions *actions;
3847     ovs_be64 cookie;
3848
3849     ds_put_char_multiple(result, '\t', level);
3850     if (!rule) {
3851         ds_put_cstr(result, "No match\n");
3852         return;
3853     }
3854
3855     ovs_mutex_lock(&rule->up.mutex);
3856     cookie = rule->up.flow_cookie;
3857     ovs_mutex_unlock(&rule->up.mutex);
3858
3859     ds_put_format(result, "Rule: table=%"PRIu8" cookie=%#"PRIx64" ",
3860                   rule ? rule->up.table_id : 0, ntohll(cookie));
3861     cls_rule_format(&rule->up.cr, result);
3862     ds_put_char(result, '\n');
3863
3864     actions = rule_dpif_get_actions(rule);
3865
3866     ds_put_char_multiple(result, '\t', level);
3867     ds_put_cstr(result, "OpenFlow actions=");
3868     ofpacts_format(actions->ofpacts, actions->ofpacts_len, result);
3869     ds_put_char(result, '\n');
3870 }
3871
3872 static void
3873 trace_format_flow(struct ds *result, int level, const char *title,
3874                   struct trace_ctx *trace)
3875 {
3876     ds_put_char_multiple(result, '\t', level);
3877     ds_put_format(result, "%s: ", title);
3878     /* Do not report unchanged flows for resubmits. */
3879     if ((level > 0 && flow_equal(&trace->xin.flow, &trace->flow))
3880         || (level == 0 && flow_equal(&trace->xin.flow, trace->key))) {
3881         ds_put_cstr(result, "unchanged");
3882     } else {
3883         flow_format(result, &trace->xin.flow);
3884         trace->flow = trace->xin.flow;
3885     }
3886     ds_put_char(result, '\n');
3887 }
3888
3889 static void
3890 trace_format_regs(struct ds *result, int level, const char *title,
3891                   struct trace_ctx *trace)
3892 {
3893     size_t i;
3894
3895     ds_put_char_multiple(result, '\t', level);
3896     ds_put_format(result, "%s:", title);
3897     for (i = 0; i < FLOW_N_REGS; i++) {
3898         ds_put_format(result, " reg%"PRIuSIZE"=0x%"PRIx32, i, trace->flow.regs[i]);
3899     }
3900     ds_put_char(result, '\n');
3901 }
3902
3903 static void
3904 trace_format_odp(struct ds *result, int level, const char *title,
3905                  struct trace_ctx *trace)
3906 {
3907     struct ofpbuf *odp_actions = &trace->xout.odp_actions;
3908
3909     ds_put_char_multiple(result, '\t', level);
3910     ds_put_format(result, "%s: ", title);
3911     format_odp_actions(result, ofpbuf_data(odp_actions),
3912                                ofpbuf_size(odp_actions));
3913     ds_put_char(result, '\n');
3914 }
3915
3916 static void
3917 trace_format_megaflow(struct ds *result, int level, const char *title,
3918                       struct trace_ctx *trace)
3919 {
3920     struct match match;
3921
3922     ds_put_char_multiple(result, '\t', level);
3923     ds_put_format(result, "%s: ", title);
3924     flow_wildcards_or(&trace->wc, &trace->xout.wc, &trace->wc);
3925     match_init(&match, trace->key, &trace->wc);
3926     match_format(&match, result, OFP_DEFAULT_PRIORITY);
3927     ds_put_char(result, '\n');
3928 }
3929
3930 static void
3931 trace_resubmit(struct xlate_in *xin, struct rule_dpif *rule, int recurse)
3932 {
3933     struct trace_ctx *trace = CONTAINER_OF(xin, struct trace_ctx, xin);
3934     struct ds *result = trace->result;
3935
3936     ds_put_char(result, '\n');
3937     trace_format_flow(result, recurse + 1, "Resubmitted flow", trace);
3938     trace_format_regs(result, recurse + 1, "Resubmitted regs", trace);
3939     trace_format_odp(result,  recurse + 1, "Resubmitted  odp", trace);
3940     trace_format_megaflow(result, recurse + 1, "Resubmitted megaflow", trace);
3941     trace_format_rule(result, recurse + 1, rule);
3942 }
3943
3944 static void
3945 trace_report(struct xlate_in *xin, const char *s, int recurse)
3946 {
3947     struct trace_ctx *trace = CONTAINER_OF(xin, struct trace_ctx, xin);
3948     struct ds *result = trace->result;
3949
3950     ds_put_char_multiple(result, '\t', recurse);
3951     ds_put_cstr(result, s);
3952     ds_put_char(result, '\n');
3953 }
3954
3955 /* Parses the 'argc' elements of 'argv', ignoring argv[0].  The following
3956  * forms are supported:
3957  *
3958  *     - [dpname] odp_flow [-generate | packet]
3959  *     - bridge br_flow [-generate | packet]
3960  *
3961  * On success, initializes '*ofprotop' and 'flow' and returns NULL.  On failure
3962  * returns a nonnull malloced error message. */
3963 static char * WARN_UNUSED_RESULT
3964 parse_flow_and_packet(int argc, const char *argv[],
3965                       struct ofproto_dpif **ofprotop, struct flow *flow,
3966                       struct ofpbuf **packetp)
3967 {
3968     const struct dpif_backer *backer = NULL;
3969     const char *error = NULL;
3970     char *m_err = NULL;
3971     struct simap port_names = SIMAP_INITIALIZER(&port_names);
3972     struct ofpbuf *packet;
3973     struct ofpbuf odp_key;
3974     struct ofpbuf odp_mask;
3975
3976     ofpbuf_init(&odp_key, 0);
3977     ofpbuf_init(&odp_mask, 0);
3978
3979     /* Handle "-generate" or a hex string as the last argument. */
3980     if (!strcmp(argv[argc - 1], "-generate")) {
3981         packet = ofpbuf_new(0);
3982         argc--;
3983     } else {
3984         error = eth_from_hex(argv[argc - 1], &packet);
3985         if (!error) {
3986             argc--;
3987         } else if (argc == 4) {
3988             /* The 3-argument form must end in "-generate' or a hex string. */
3989             goto exit;
3990         }
3991         error = NULL;
3992     }
3993
3994     /* odp_flow can have its in_port specified as a name instead of port no.
3995      * We do not yet know whether a given flow is a odp_flow or a br_flow.
3996      * But, to know whether a flow is odp_flow through odp_flow_from_string(),
3997      * we need to create a simap of name to port no. */
3998     if (argc == 3) {
3999         const char *dp_type;
4000         if (!strncmp(argv[1], "ovs-", 4)) {
4001             dp_type = argv[1] + 4;
4002         } else {
4003             dp_type = argv[1];
4004         }
4005         backer = shash_find_data(&all_dpif_backers, dp_type);
4006     } else if (argc == 2) {
4007         struct shash_node *node;
4008         if (shash_count(&all_dpif_backers) == 1) {
4009             node = shash_first(&all_dpif_backers);
4010             backer = node->data;
4011         }
4012     } else {
4013         error = "Syntax error";
4014         goto exit;
4015     }
4016     if (backer && backer->dpif) {
4017         struct dpif_port dpif_port;
4018         struct dpif_port_dump port_dump;
4019         DPIF_PORT_FOR_EACH (&dpif_port, &port_dump, backer->dpif) {
4020             simap_put(&port_names, dpif_port.name,
4021                       odp_to_u32(dpif_port.port_no));
4022         }
4023     }
4024
4025     /* Parse the flow and determine whether a datapath or
4026      * bridge is specified. If function odp_flow_key_from_string()
4027      * returns 0, the flow is a odp_flow. If function
4028      * parse_ofp_exact_flow() returns NULL, the flow is a br_flow. */
4029     if (!odp_flow_from_string(argv[argc - 1], &port_names,
4030                               &odp_key, &odp_mask)) {
4031         if (!backer) {
4032             error = "Cannot find the datapath";
4033             goto exit;
4034         }
4035
4036         if (xlate_receive(backer, NULL, ofpbuf_data(&odp_key),
4037                           ofpbuf_size(&odp_key), flow,
4038                           ofprotop, NULL, NULL, NULL, NULL)) {
4039             error = "Invalid datapath flow";
4040             goto exit;
4041         }
4042     } else {
4043         char *err = parse_ofp_exact_flow(flow, NULL, argv[argc - 1], NULL);
4044
4045         if (err) {
4046             m_err = xasprintf("Bad flow syntax: %s", err);
4047             free(err);
4048             goto exit;
4049         } else {
4050             if (argc != 3) {
4051                 error = "Must specify bridge name";
4052                 goto exit;
4053             }
4054
4055             *ofprotop = ofproto_dpif_lookup(argv[1]);
4056             if (!*ofprotop) {
4057                 error = "Unknown bridge name";
4058                 goto exit;
4059             }
4060         }
4061     }
4062
4063     /* Generate a packet, if requested. */
4064     if (packet) {
4065         if (!ofpbuf_size(packet)) {
4066             flow_compose(packet, flow);
4067         } else {
4068             struct pkt_metadata md = pkt_metadata_from_flow(flow);
4069
4070             /* Use the metadata from the flow and the packet argument
4071              * to reconstruct the flow. */
4072             flow_extract(packet, &md, flow);
4073         }
4074     }
4075
4076 exit:
4077     if (error && !m_err) {
4078         m_err = xstrdup(error);
4079     }
4080     if (m_err) {
4081         ofpbuf_delete(packet);
4082         packet = NULL;
4083     }
4084     *packetp = packet;
4085     ofpbuf_uninit(&odp_key);
4086     ofpbuf_uninit(&odp_mask);
4087     simap_destroy(&port_names);
4088     return m_err;
4089 }
4090
4091 static void
4092 ofproto_unixctl_trace(struct unixctl_conn *conn, int argc, const char *argv[],
4093                       void *aux OVS_UNUSED)
4094 {
4095     struct ofproto_dpif *ofproto;
4096     struct ofpbuf *packet;
4097     char *error;
4098     struct flow flow;
4099
4100     error = parse_flow_and_packet(argc, argv, &ofproto, &flow, &packet);
4101     if (!error) {
4102         struct ds result;
4103
4104         ds_init(&result);
4105         ofproto_trace(ofproto, &flow, packet, NULL, 0, &result);
4106         unixctl_command_reply(conn, ds_cstr(&result));
4107         ds_destroy(&result);
4108         ofpbuf_delete(packet);
4109     } else {
4110         unixctl_command_reply_error(conn, error);
4111         free(error);
4112     }
4113 }
4114
4115 static void
4116 ofproto_unixctl_trace_actions(struct unixctl_conn *conn, int argc,
4117                               const char *argv[], void *aux OVS_UNUSED)
4118 {
4119     enum ofputil_protocol usable_protocols;
4120     struct ofproto_dpif *ofproto;
4121     bool enforce_consistency;
4122     struct ofpbuf ofpacts;
4123     struct ofpbuf *packet;
4124     struct ds result;
4125     struct flow flow;
4126     uint16_t in_port;
4127
4128     /* Three kinds of error return values! */
4129     enum ofperr retval;
4130     char *error;
4131
4132     packet = NULL;
4133     ds_init(&result);
4134     ofpbuf_init(&ofpacts, 0);
4135
4136     /* Parse actions. */
4137     error = parse_ofpacts(argv[--argc], &ofpacts, &usable_protocols);
4138     if (error) {
4139         unixctl_command_reply_error(conn, error);
4140         free(error);
4141         goto exit;
4142     }
4143
4144     /* OpenFlow 1.1 and later suggest that the switch enforces certain forms of
4145      * consistency between the flow and the actions.  With -consistent, we
4146      * enforce consistency even for a flow supported in OpenFlow 1.0. */
4147     if (!strcmp(argv[1], "-consistent")) {
4148         enforce_consistency = true;
4149         argv++;
4150         argc--;
4151     } else {
4152         enforce_consistency = false;
4153     }
4154
4155     error = parse_flow_and_packet(argc, argv, &ofproto, &flow, &packet);
4156     if (error) {
4157         unixctl_command_reply_error(conn, error);
4158         free(error);
4159         goto exit;
4160     }
4161
4162     /* Do the same checks as handle_packet_out() in ofproto.c.
4163      *
4164      * We pass a 'table_id' of 0 to ofproto_check_ofpacts(), which isn't
4165      * strictly correct because these actions aren't in any table, but it's OK
4166      * because it 'table_id' is used only to check goto_table instructions, but
4167      * packet-outs take a list of actions and therefore it can't include
4168      * instructions.
4169      *
4170      * We skip the "meter" check here because meter is an instruction, not an
4171      * action, and thus cannot appear in ofpacts. */
4172     in_port = ofp_to_u16(flow.in_port.ofp_port);
4173     if (in_port >= ofproto->up.max_ports && in_port < ofp_to_u16(OFPP_MAX)) {
4174         unixctl_command_reply_error(conn, "invalid in_port");
4175         goto exit;
4176     }
4177     if (enforce_consistency) {
4178         retval = ofpacts_check_consistency(ofpbuf_data(&ofpacts), ofpbuf_size(&ofpacts),
4179                                            &flow, u16_to_ofp(ofproto->up.max_ports),
4180                                            0, 0, usable_protocols);
4181     } else {
4182         retval = ofpacts_check(ofpbuf_data(&ofpacts), ofpbuf_size(&ofpacts), &flow,
4183                                u16_to_ofp(ofproto->up.max_ports), 0, 0,
4184                                &usable_protocols);
4185     }
4186
4187     if (retval) {
4188         ds_clear(&result);
4189         ds_put_format(&result, "Bad actions: %s", ofperr_to_string(retval));
4190         unixctl_command_reply_error(conn, ds_cstr(&result));
4191         goto exit;
4192     }
4193
4194     ofproto_trace(ofproto, &flow, packet,
4195                   ofpbuf_data(&ofpacts), ofpbuf_size(&ofpacts), &result);
4196     unixctl_command_reply(conn, ds_cstr(&result));
4197
4198 exit:
4199     ds_destroy(&result);
4200     ofpbuf_delete(packet);
4201     ofpbuf_uninit(&ofpacts);
4202 }
4203
4204 /* Implements a "trace" through 'ofproto''s flow table, appending a textual
4205  * description of the results to 'ds'.
4206  *
4207  * The trace follows a packet with the specified 'flow' through the flow
4208  * table.  'packet' may be nonnull to trace an actual packet, with consequent
4209  * side effects (if it is nonnull then its flow must be 'flow').
4210  *
4211  * If 'ofpacts' is nonnull then its 'ofpacts_len' bytes specify the actions to
4212  * trace, otherwise the actions are determined by a flow table lookup. */
4213 static void
4214 ofproto_trace(struct ofproto_dpif *ofproto, struct flow *flow,
4215               const struct ofpbuf *packet,
4216               const struct ofpact ofpacts[], size_t ofpacts_len,
4217               struct ds *ds)
4218 {
4219     struct rule_dpif *rule;
4220     struct trace_ctx trace;
4221
4222     ds_put_format(ds, "Bridge: %s\n", ofproto->up.name);
4223     ds_put_cstr(ds, "Flow: ");
4224     flow_format(ds, flow);
4225     ds_put_char(ds, '\n');
4226
4227     flow_wildcards_init_catchall(&trace.wc);
4228     if (ofpacts) {
4229         rule = NULL;
4230     } else {
4231         rule_dpif_lookup(ofproto, flow, &trace.wc, &rule, false);
4232
4233         trace_format_rule(ds, 0, rule);
4234         if (rule == ofproto->miss_rule) {
4235             ds_put_cstr(ds, "\nNo match, flow generates \"packet in\"s.\n");
4236         } else if (rule == ofproto->no_packet_in_rule) {
4237             ds_put_cstr(ds, "\nNo match, packets dropped because "
4238                         "OFPPC_NO_PACKET_IN is set on in_port.\n");
4239         } else if (rule == ofproto->drop_frags_rule) {
4240             ds_put_cstr(ds, "\nPackets dropped because they are IP fragments "
4241                         "and the fragment handling mode is \"drop\".\n");
4242         }
4243     }
4244
4245     if (rule || ofpacts) {
4246         trace.result = ds;
4247         trace.key = flow; /* Original flow key, used for megaflow. */
4248         trace.flow = *flow; /* May be modified by actions. */
4249         xlate_in_init(&trace.xin, ofproto, flow, rule, ntohs(flow->tcp_flags),
4250                       packet);
4251         if (ofpacts) {
4252             trace.xin.ofpacts = ofpacts;
4253             trace.xin.ofpacts_len = ofpacts_len;
4254         }
4255         trace.xin.resubmit_hook = trace_resubmit;
4256         trace.xin.report_hook = trace_report;
4257
4258         xlate_actions(&trace.xin, &trace.xout);
4259
4260         ds_put_char(ds, '\n');
4261         trace_format_flow(ds, 0, "Final flow", &trace);
4262         trace_format_megaflow(ds, 0, "Megaflow", &trace);
4263
4264         ds_put_cstr(ds, "Datapath actions: ");
4265         format_odp_actions(ds, ofpbuf_data(&trace.xout.odp_actions),
4266                            ofpbuf_size(&trace.xout.odp_actions));
4267
4268         if (trace.xout.slow) {
4269             enum slow_path_reason slow;
4270
4271             ds_put_cstr(ds, "\nThis flow is handled by the userspace "
4272                         "slow path because it:");
4273
4274             slow = trace.xout.slow;
4275             while (slow) {
4276                 enum slow_path_reason bit = rightmost_1bit(slow);
4277
4278                 ds_put_format(ds, "\n\t- %s.",
4279                               slow_path_reason_to_explanation(bit));
4280
4281                 slow &= ~bit;
4282             }
4283         }
4284
4285         xlate_out_uninit(&trace.xout);
4286     }
4287 }
4288
4289 /* Store the current ofprotos in 'ofproto_shash'.  Returns a sorted list
4290  * of the 'ofproto_shash' nodes.  It is the responsibility of the caller
4291  * to destroy 'ofproto_shash' and free the returned value. */
4292 static const struct shash_node **
4293 get_ofprotos(struct shash *ofproto_shash)
4294 {
4295     const struct ofproto_dpif *ofproto;
4296
4297     HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) {
4298         char *name = xasprintf("%s@%s", ofproto->up.type, ofproto->up.name);
4299         shash_add_nocopy(ofproto_shash, name, ofproto);
4300     }
4301
4302     return shash_sort(ofproto_shash);
4303 }
4304
4305 static void
4306 ofproto_unixctl_dpif_dump_dps(struct unixctl_conn *conn, int argc OVS_UNUSED,
4307                               const char *argv[] OVS_UNUSED,
4308                               void *aux OVS_UNUSED)
4309 {
4310     struct ds ds = DS_EMPTY_INITIALIZER;
4311     struct shash ofproto_shash;
4312     const struct shash_node **sorted_ofprotos;
4313     int i;
4314
4315     shash_init(&ofproto_shash);
4316     sorted_ofprotos = get_ofprotos(&ofproto_shash);
4317     for (i = 0; i < shash_count(&ofproto_shash); i++) {
4318         const struct shash_node *node = sorted_ofprotos[i];
4319         ds_put_format(&ds, "%s\n", node->name);
4320     }
4321
4322     shash_destroy(&ofproto_shash);
4323     free(sorted_ofprotos);
4324
4325     unixctl_command_reply(conn, ds_cstr(&ds));
4326     ds_destroy(&ds);
4327 }
4328
4329 static void
4330 dpif_show_backer(const struct dpif_backer *backer, struct ds *ds)
4331 {
4332     const struct shash_node **ofprotos;
4333     struct dpif_dp_stats dp_stats;
4334     struct shash ofproto_shash;
4335     size_t i;
4336
4337     dpif_get_dp_stats(backer->dpif, &dp_stats);
4338
4339     ds_put_format(ds, "%s: hit:%"PRIu64" missed:%"PRIu64"\n",
4340                   dpif_name(backer->dpif), dp_stats.n_hit, dp_stats.n_missed);
4341
4342     shash_init(&ofproto_shash);
4343     ofprotos = get_ofprotos(&ofproto_shash);
4344     for (i = 0; i < shash_count(&ofproto_shash); i++) {
4345         struct ofproto_dpif *ofproto = ofprotos[i]->data;
4346         const struct shash_node **ports;
4347         size_t j;
4348
4349         if (ofproto->backer != backer) {
4350             continue;
4351         }
4352
4353         ds_put_format(ds, "\t%s:\n", ofproto->up.name);
4354
4355         ports = shash_sort(&ofproto->up.port_by_name);
4356         for (j = 0; j < shash_count(&ofproto->up.port_by_name); j++) {
4357             const struct shash_node *node = ports[j];
4358             struct ofport *ofport = node->data;
4359             struct smap config;
4360             odp_port_t odp_port;
4361
4362             ds_put_format(ds, "\t\t%s %u/", netdev_get_name(ofport->netdev),
4363                           ofport->ofp_port);
4364
4365             odp_port = ofp_port_to_odp_port(ofproto, ofport->ofp_port);
4366             if (odp_port != ODPP_NONE) {
4367                 ds_put_format(ds, "%"PRIu32":", odp_port);
4368             } else {
4369                 ds_put_cstr(ds, "none:");
4370             }
4371
4372             ds_put_format(ds, " (%s", netdev_get_type(ofport->netdev));
4373
4374             smap_init(&config);
4375             if (!netdev_get_config(ofport->netdev, &config)) {
4376                 const struct smap_node **nodes;
4377                 size_t i;
4378
4379                 nodes = smap_sort(&config);
4380                 for (i = 0; i < smap_count(&config); i++) {
4381                     const struct smap_node *node = nodes[i];
4382                     ds_put_format(ds, "%c %s=%s", i ? ',' : ':',
4383                                   node->key, node->value);
4384                 }
4385                 free(nodes);
4386             }
4387             smap_destroy(&config);
4388
4389             ds_put_char(ds, ')');
4390             ds_put_char(ds, '\n');
4391         }
4392         free(ports);
4393     }
4394     shash_destroy(&ofproto_shash);
4395     free(ofprotos);
4396 }
4397
4398 static void
4399 ofproto_unixctl_dpif_show(struct unixctl_conn *conn, int argc OVS_UNUSED,
4400                           const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED)
4401 {
4402     struct ds ds = DS_EMPTY_INITIALIZER;
4403     const struct shash_node **backers;
4404     int i;
4405
4406     backers = shash_sort(&all_dpif_backers);
4407     for (i = 0; i < shash_count(&all_dpif_backers); i++) {
4408         dpif_show_backer(backers[i]->data, &ds);
4409     }
4410     free(backers);
4411
4412     unixctl_command_reply(conn, ds_cstr(&ds));
4413     ds_destroy(&ds);
4414 }
4415
4416 static bool
4417 ofproto_dpif_contains_flow(const struct ofproto_dpif *ofproto,
4418                            const struct nlattr *key, size_t key_len)
4419 {
4420     struct ofproto_dpif *ofp;
4421     struct flow flow;
4422
4423     xlate_receive(ofproto->backer, NULL, key, key_len, &flow, &ofp,
4424                   NULL, NULL, NULL, NULL);
4425     return ofp == ofproto;
4426 }
4427
4428 static void
4429 ofproto_unixctl_dpif_dump_flows(struct unixctl_conn *conn,
4430                                 int argc OVS_UNUSED, const char *argv[],
4431                                 void *aux OVS_UNUSED)
4432 {
4433     struct ds ds = DS_EMPTY_INITIALIZER;
4434     const struct dpif_flow_stats *stats;
4435     const struct ofproto_dpif *ofproto;
4436     struct dpif_flow_dump flow_dump;
4437     const struct nlattr *actions;
4438     const struct nlattr *mask;
4439     const struct nlattr *key;
4440     size_t actions_len;
4441     size_t mask_len;
4442     size_t key_len;
4443     bool verbosity = false;
4444     struct dpif_port dpif_port;
4445     struct dpif_port_dump port_dump;
4446     struct hmap portno_names;
4447     void *state = NULL;
4448     int error;
4449
4450     ofproto = ofproto_dpif_lookup(argv[argc - 1]);
4451     if (!ofproto) {
4452         unixctl_command_reply_error(conn, "no such bridge");
4453         return;
4454     }
4455
4456     if (argc > 2 && !strcmp(argv[1], "-m")) {
4457         verbosity = true;
4458     }
4459
4460     hmap_init(&portno_names);
4461     DPIF_PORT_FOR_EACH (&dpif_port, &port_dump, ofproto->backer->dpif) {
4462         odp_portno_names_set(&portno_names, dpif_port.port_no, dpif_port.name);
4463     }
4464
4465     ds_init(&ds);
4466     error = dpif_flow_dump_start(&flow_dump, ofproto->backer->dpif);
4467     if (error) {
4468         goto exit;
4469     }
4470     dpif_flow_dump_state_init(ofproto->backer->dpif, &state);
4471     while (dpif_flow_dump_next(&flow_dump, state, &key, &key_len,
4472                                &mask, &mask_len, &actions, &actions_len,
4473                                &stats)) {
4474         if (!ofproto_dpif_contains_flow(ofproto, key, key_len)) {
4475             continue;
4476         }
4477
4478         odp_flow_format(key, key_len, mask, mask_len, &portno_names, &ds,
4479                         verbosity);
4480         ds_put_cstr(&ds, ", ");
4481         dpif_flow_stats_format(stats, &ds);
4482         ds_put_cstr(&ds, ", actions:");
4483         format_odp_actions(&ds, actions, actions_len);
4484         ds_put_char(&ds, '\n');
4485     }
4486     dpif_flow_dump_state_uninit(ofproto->backer->dpif, state);
4487     error = dpif_flow_dump_done(&flow_dump);
4488
4489 exit:
4490     if (error) {
4491         ds_clear(&ds);
4492         ds_put_format(&ds, "dpif/dump_flows failed: %s", ovs_strerror(errno));
4493         unixctl_command_reply_error(conn, ds_cstr(&ds));
4494     } else {
4495         unixctl_command_reply(conn, ds_cstr(&ds));
4496     }
4497     odp_portno_names_destroy(&portno_names);
4498     hmap_destroy(&portno_names);
4499     ds_destroy(&ds);
4500 }
4501
4502 static void
4503 ofproto_dpif_unixctl_init(void)
4504 {
4505     static bool registered;
4506     if (registered) {
4507         return;
4508     }
4509     registered = true;
4510
4511     unixctl_command_register(
4512         "ofproto/trace",
4513         "{[dp_name] odp_flow | bridge br_flow} [-generate|packet]",
4514         1, 3, ofproto_unixctl_trace, NULL);
4515     unixctl_command_register(
4516         "ofproto/trace-packet-out",
4517         "[-consistent] {[dp_name] odp_flow | bridge br_flow} [-generate|packet] actions",
4518         2, 6, ofproto_unixctl_trace_actions, NULL);
4519     unixctl_command_register("fdb/flush", "[bridge]", 0, 1,
4520                              ofproto_unixctl_fdb_flush, NULL);
4521     unixctl_command_register("fdb/show", "bridge", 1, 1,
4522                              ofproto_unixctl_fdb_show, NULL);
4523     unixctl_command_register("dpif/dump-dps", "", 0, 0,
4524                              ofproto_unixctl_dpif_dump_dps, NULL);
4525     unixctl_command_register("dpif/show", "", 0, 0, ofproto_unixctl_dpif_show,
4526                              NULL);
4527     unixctl_command_register("dpif/dump-flows", "[-m] bridge", 1, 2,
4528                              ofproto_unixctl_dpif_dump_flows, NULL);
4529 }
4530
4531 /* Returns true if 'table' is the table used for internal rules,
4532  * false otherwise. */
4533 bool
4534 table_is_internal(uint8_t table_id)
4535 {
4536     return table_id == TBL_INTERNAL;
4537 }
4538 \f
4539 /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
4540  *
4541  * This is deprecated.  It is only for compatibility with broken device drivers
4542  * in old versions of Linux that do not properly support VLANs when VLAN
4543  * devices are not used.  When broken device drivers are no longer in
4544  * widespread use, we will delete these interfaces. */
4545
4546 static int
4547 set_realdev(struct ofport *ofport_, ofp_port_t realdev_ofp_port, int vid)
4548 {
4549     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport_->ofproto);
4550     struct ofport_dpif *ofport = ofport_dpif_cast(ofport_);
4551
4552     if (realdev_ofp_port == ofport->realdev_ofp_port
4553         && vid == ofport->vlandev_vid) {
4554         return 0;
4555     }
4556
4557     ofproto->backer->need_revalidate = REV_RECONFIGURE;
4558
4559     if (ofport->realdev_ofp_port) {
4560         vsp_remove(ofport);
4561     }
4562     if (realdev_ofp_port && ofport->bundle) {
4563         /* vlandevs are enslaved to their realdevs, so they are not allowed to
4564          * themselves be part of a bundle. */
4565         bundle_set(ofport_->ofproto, ofport->bundle, NULL);
4566     }
4567
4568     ofport->realdev_ofp_port = realdev_ofp_port;
4569     ofport->vlandev_vid = vid;
4570
4571     if (realdev_ofp_port) {
4572         vsp_add(ofport, realdev_ofp_port, vid);
4573     }
4574
4575     return 0;
4576 }
4577
4578 static uint32_t
4579 hash_realdev_vid(ofp_port_t realdev_ofp_port, int vid)
4580 {
4581     return hash_2words(ofp_to_u16(realdev_ofp_port), vid);
4582 }
4583
4584 bool
4585 ofproto_has_vlan_splinters(const struct ofproto_dpif *ofproto)
4586     OVS_EXCLUDED(ofproto->vsp_mutex)
4587 {
4588     /* hmap_is_empty is thread safe. */
4589     return !hmap_is_empty(&ofproto->realdev_vid_map);
4590 }
4591
4592
4593 static ofp_port_t
4594 vsp_realdev_to_vlandev__(const struct ofproto_dpif *ofproto,
4595                          ofp_port_t realdev_ofp_port, ovs_be16 vlan_tci)
4596     OVS_REQUIRES(ofproto->vsp_mutex)
4597 {
4598     if (!hmap_is_empty(&ofproto->realdev_vid_map)) {
4599         int vid = vlan_tci_to_vid(vlan_tci);
4600         const struct vlan_splinter *vsp;
4601
4602         HMAP_FOR_EACH_WITH_HASH (vsp, realdev_vid_node,
4603                                  hash_realdev_vid(realdev_ofp_port, vid),
4604                                  &ofproto->realdev_vid_map) {
4605             if (vsp->realdev_ofp_port == realdev_ofp_port
4606                 && vsp->vid == vid) {
4607                 return vsp->vlandev_ofp_port;
4608             }
4609         }
4610     }
4611     return realdev_ofp_port;
4612 }
4613
4614 /* Returns the OFP port number of the Linux VLAN device that corresponds to
4615  * 'vlan_tci' on the network device with port number 'realdev_ofp_port' in
4616  * 'struct ofport_dpif'.  For example, given 'realdev_ofp_port' of eth0 and
4617  * 'vlan_tci' 9, it would return the port number of eth0.9.
4618  *
4619  * Unless VLAN splinters are enabled for port 'realdev_ofp_port', this
4620  * function just returns its 'realdev_ofp_port' argument. */
4621 ofp_port_t
4622 vsp_realdev_to_vlandev(const struct ofproto_dpif *ofproto,
4623                        ofp_port_t realdev_ofp_port, ovs_be16 vlan_tci)
4624     OVS_EXCLUDED(ofproto->vsp_mutex)
4625 {
4626     ofp_port_t ret;
4627
4628     /* hmap_is_empty is thread safe, see if we can return immediately. */
4629     if (hmap_is_empty(&ofproto->realdev_vid_map)) {
4630         return realdev_ofp_port;
4631     }
4632     ovs_mutex_lock(&ofproto->vsp_mutex);
4633     ret = vsp_realdev_to_vlandev__(ofproto, realdev_ofp_port, vlan_tci);
4634     ovs_mutex_unlock(&ofproto->vsp_mutex);
4635     return ret;
4636 }
4637
4638 static struct vlan_splinter *
4639 vlandev_find(const struct ofproto_dpif *ofproto, ofp_port_t vlandev_ofp_port)
4640 {
4641     struct vlan_splinter *vsp;
4642
4643     HMAP_FOR_EACH_WITH_HASH (vsp, vlandev_node,
4644                              hash_ofp_port(vlandev_ofp_port),
4645                              &ofproto->vlandev_map) {
4646         if (vsp->vlandev_ofp_port == vlandev_ofp_port) {
4647             return vsp;
4648         }
4649     }
4650
4651     return NULL;
4652 }
4653
4654 /* Returns the OpenFlow port number of the "real" device underlying the Linux
4655  * VLAN device with OpenFlow port number 'vlandev_ofp_port' and stores the
4656  * VLAN VID of the Linux VLAN device in '*vid'.  For example, given
4657  * 'vlandev_ofp_port' of eth0.9, it would return the OpenFlow port number of
4658  * eth0 and store 9 in '*vid'.
4659  *
4660  * Returns 0 and does not modify '*vid' if 'vlandev_ofp_port' is not a Linux
4661  * VLAN device.  Unless VLAN splinters are enabled, this is what this function
4662  * always does.*/
4663 static ofp_port_t
4664 vsp_vlandev_to_realdev(const struct ofproto_dpif *ofproto,
4665                        ofp_port_t vlandev_ofp_port, int *vid)
4666     OVS_REQUIRES(ofproto->vsp_mutex)
4667 {
4668     if (!hmap_is_empty(&ofproto->vlandev_map)) {
4669         const struct vlan_splinter *vsp;
4670
4671         vsp = vlandev_find(ofproto, vlandev_ofp_port);
4672         if (vsp) {
4673             if (vid) {
4674                 *vid = vsp->vid;
4675             }
4676             return vsp->realdev_ofp_port;
4677         }
4678     }
4679     return 0;
4680 }
4681
4682 /* Given 'flow', a flow representing a packet received on 'ofproto', checks
4683  * whether 'flow->in_port' represents a Linux VLAN device.  If so, changes
4684  * 'flow->in_port' to the "real" device backing the VLAN device, sets
4685  * 'flow->vlan_tci' to the VLAN VID, and returns true.  Otherwise (which is
4686  * always the case unless VLAN splinters are enabled), returns false without
4687  * making any changes. */
4688 bool
4689 vsp_adjust_flow(const struct ofproto_dpif *ofproto, struct flow *flow)
4690     OVS_EXCLUDED(ofproto->vsp_mutex)
4691 {
4692     ofp_port_t realdev;
4693     int vid;
4694
4695     /* hmap_is_empty is thread safe. */
4696     if (hmap_is_empty(&ofproto->vlandev_map)) {
4697         return false;
4698     }
4699
4700     ovs_mutex_lock(&ofproto->vsp_mutex);
4701     realdev = vsp_vlandev_to_realdev(ofproto, flow->in_port.ofp_port, &vid);
4702     ovs_mutex_unlock(&ofproto->vsp_mutex);
4703     if (!realdev) {
4704         return false;
4705     }
4706
4707     /* Cause the flow to be processed as if it came in on the real device with
4708      * the VLAN device's VLAN ID. */
4709     flow->in_port.ofp_port = realdev;
4710     flow->vlan_tci = htons((vid & VLAN_VID_MASK) | VLAN_CFI);
4711     return true;
4712 }
4713
4714 static void
4715 vsp_remove(struct ofport_dpif *port)
4716 {
4717     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
4718     struct vlan_splinter *vsp;
4719
4720     ovs_mutex_lock(&ofproto->vsp_mutex);
4721     vsp = vlandev_find(ofproto, port->up.ofp_port);
4722     if (vsp) {
4723         hmap_remove(&ofproto->vlandev_map, &vsp->vlandev_node);
4724         hmap_remove(&ofproto->realdev_vid_map, &vsp->realdev_vid_node);
4725         free(vsp);
4726
4727         port->realdev_ofp_port = 0;
4728     } else {
4729         VLOG_ERR("missing vlan device record");
4730     }
4731     ovs_mutex_unlock(&ofproto->vsp_mutex);
4732 }
4733
4734 static void
4735 vsp_add(struct ofport_dpif *port, ofp_port_t realdev_ofp_port, int vid)
4736 {
4737     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
4738
4739     ovs_mutex_lock(&ofproto->vsp_mutex);
4740     if (!vsp_vlandev_to_realdev(ofproto, port->up.ofp_port, NULL)
4741         && (vsp_realdev_to_vlandev__(ofproto, realdev_ofp_port, htons(vid))
4742             == realdev_ofp_port)) {
4743         struct vlan_splinter *vsp;
4744
4745         vsp = xmalloc(sizeof *vsp);
4746         vsp->realdev_ofp_port = realdev_ofp_port;
4747         vsp->vlandev_ofp_port = port->up.ofp_port;
4748         vsp->vid = vid;
4749
4750         port->realdev_ofp_port = realdev_ofp_port;
4751
4752         hmap_insert(&ofproto->vlandev_map, &vsp->vlandev_node,
4753                     hash_ofp_port(port->up.ofp_port));
4754         hmap_insert(&ofproto->realdev_vid_map, &vsp->realdev_vid_node,
4755                     hash_realdev_vid(realdev_ofp_port, vid));
4756     } else {
4757         VLOG_ERR("duplicate vlan device record");
4758     }
4759     ovs_mutex_unlock(&ofproto->vsp_mutex);
4760 }
4761
4762 static odp_port_t
4763 ofp_port_to_odp_port(const struct ofproto_dpif *ofproto, ofp_port_t ofp_port)
4764 {
4765     const struct ofport_dpif *ofport = get_ofp_port(ofproto, ofp_port);
4766     return ofport ? ofport->odp_port : ODPP_NONE;
4767 }
4768
4769 struct ofport_dpif *
4770 odp_port_to_ofport(const struct dpif_backer *backer, odp_port_t odp_port)
4771 {
4772     struct ofport_dpif *port;
4773
4774     ovs_rwlock_rdlock(&backer->odp_to_ofport_lock);
4775     HMAP_FOR_EACH_IN_BUCKET (port, odp_port_node, hash_odp_port(odp_port),
4776                              &backer->odp_to_ofport_map) {
4777         if (port->odp_port == odp_port) {
4778             ovs_rwlock_unlock(&backer->odp_to_ofport_lock);
4779             return port;
4780         }
4781     }
4782
4783     ovs_rwlock_unlock(&backer->odp_to_ofport_lock);
4784     return NULL;
4785 }
4786
4787 static ofp_port_t
4788 odp_port_to_ofp_port(const struct ofproto_dpif *ofproto, odp_port_t odp_port)
4789 {
4790     struct ofport_dpif *port;
4791
4792     port = odp_port_to_ofport(ofproto->backer, odp_port);
4793     if (port && &ofproto->up == port->up.ofproto) {
4794         return port->up.ofp_port;
4795     } else {
4796         return OFPP_NONE;
4797     }
4798 }
4799
4800 struct ofproto_dpif *
4801 ofproto_dpif_recirc_get_ofproto(const struct dpif_backer *backer,
4802                                 uint32_t recirc_id)
4803 {
4804     struct dpif_backer_recirc_node *node;
4805
4806     ovs_mutex_lock(&backer->recirc_mutex);
4807     node = CONTAINER_OF(hmap_first_with_hash(&backer->recirc_map, recirc_id),
4808                         struct dpif_backer_recirc_node, hmap_node);
4809     ovs_mutex_unlock(&backer->recirc_mutex);
4810
4811     return node ? node->ofproto : NULL;
4812 }
4813
4814 uint32_t
4815 ofproto_dpif_alloc_recirc_id(struct ofproto_dpif *ofproto)
4816 {
4817     struct dpif_backer *backer = ofproto->backer;
4818     uint32_t recirc_id = recirc_id_alloc(backer->rid_pool);
4819
4820     if (recirc_id) {
4821         struct dpif_backer_recirc_node *node = xmalloc(sizeof *node);
4822
4823         node->recirc_id = recirc_id;
4824         node->ofproto = ofproto;
4825
4826         ovs_mutex_lock(&backer->recirc_mutex);
4827         hmap_insert(&backer->recirc_map, &node->hmap_node, node->recirc_id);
4828         ovs_mutex_unlock(&backer->recirc_mutex);
4829     }
4830
4831     return recirc_id;
4832 }
4833
4834 void
4835 ofproto_dpif_free_recirc_id(struct ofproto_dpif *ofproto, uint32_t recirc_id)
4836 {
4837     struct dpif_backer *backer = ofproto->backer;
4838     struct dpif_backer_recirc_node *node;
4839
4840     ovs_mutex_lock(&backer->recirc_mutex);
4841     node = CONTAINER_OF(hmap_first_with_hash(&backer->recirc_map, recirc_id),
4842                         struct dpif_backer_recirc_node, hmap_node);
4843     if (node) {
4844         hmap_remove(&backer->recirc_map, &node->hmap_node);
4845         ovs_mutex_unlock(&backer->recirc_mutex);
4846         recirc_id_free(backer->rid_pool, node->recirc_id);
4847
4848         if (node->ofproto != ofproto) {
4849             VLOG_ERR("recirc_id %"PRIu32", freed by incorrect ofproto (%s),"
4850                      " expect ofproto (%s)", node->recirc_id, ofproto->up.name,
4851                      node->ofproto->up.name);
4852         }
4853
4854         /* RCU postpone the free, since other threads may be referring
4855          * to 'node' at same time. */
4856         ovsrcu_postpone(free, node);
4857     } else {
4858         ovs_mutex_unlock(&backer->recirc_mutex);
4859     }
4860 }
4861
4862 int
4863 ofproto_dpif_add_internal_flow(struct ofproto_dpif *ofproto,
4864                                const struct match *match, int priority,
4865                                const struct ofpbuf *ofpacts,
4866                                struct rule **rulep)
4867 {
4868     struct ofputil_flow_mod fm;
4869     struct rule_dpif *rule;
4870     int error;
4871
4872     fm.match = *match;
4873     fm.priority = priority;
4874     fm.new_cookie = htonll(0);
4875     fm.cookie = htonll(0);
4876     fm.cookie_mask = htonll(0);
4877     fm.modify_cookie = false;
4878     fm.table_id = TBL_INTERNAL;
4879     fm.command = OFPFC_ADD;
4880     fm.idle_timeout = 0;
4881     fm.hard_timeout = 0;
4882     fm.buffer_id = 0;
4883     fm.out_port = 0;
4884     fm.flags = OFPUTIL_FF_HIDDEN_FIELDS | OFPUTIL_FF_NO_READONLY;
4885     fm.ofpacts = ofpbuf_data(ofpacts);
4886     fm.ofpacts_len = ofpbuf_size(ofpacts);
4887
4888     error = ofproto_flow_mod(&ofproto->up, &fm);
4889     if (error) {
4890         VLOG_ERR_RL(&rl, "failed to add internal flow (%s)",
4891                     ofperr_to_string(error));
4892         *rulep = NULL;
4893         return error;
4894     }
4895
4896     rule = rule_dpif_lookup_in_table(ofproto, TBL_INTERNAL, &fm.match.flow,
4897                                      &fm.match.wc, false);
4898     if (rule) {
4899         *rulep = &rule->up;
4900     } else {
4901         OVS_NOT_REACHED();
4902     }
4903     return 0;
4904 }
4905
4906 int
4907 ofproto_dpif_delete_internal_flow(struct ofproto_dpif *ofproto,
4908                                   struct match *match, int priority)
4909 {
4910     struct ofputil_flow_mod fm;
4911     int error;
4912
4913     fm.match = *match;
4914     fm.priority = priority;
4915     fm.new_cookie = htonll(0);
4916     fm.cookie = htonll(0);
4917     fm.cookie_mask = htonll(0);
4918     fm.modify_cookie = false;
4919     fm.table_id = TBL_INTERNAL;
4920     fm.flags = OFPUTIL_FF_HIDDEN_FIELDS | OFPUTIL_FF_NO_READONLY;
4921     fm.command = OFPFC_DELETE_STRICT;
4922
4923     error = ofproto_flow_mod(&ofproto->up, &fm);
4924     if (error) {
4925         VLOG_ERR_RL(&rl, "failed to delete internal flow (%s)",
4926                     ofperr_to_string(error));
4927         return error;
4928     }
4929
4930     return 0;
4931 }
4932
4933 const struct ofproto_class ofproto_dpif_class = {
4934     init,
4935     enumerate_types,
4936     enumerate_names,
4937     del,
4938     port_open_type,
4939     type_run,
4940     type_wait,
4941     alloc,
4942     construct,
4943     destruct,
4944     dealloc,
4945     run,
4946     wait,
4947     NULL,                       /* get_memory_usage. */
4948     type_get_memory_usage,
4949     flush,
4950     get_features,
4951     get_tables,
4952     port_alloc,
4953     port_construct,
4954     port_destruct,
4955     port_dealloc,
4956     port_modified,
4957     port_reconfigured,
4958     port_query_by_name,
4959     port_add,
4960     port_del,
4961     port_get_stats,
4962     port_dump_start,
4963     port_dump_next,
4964     port_dump_done,
4965     port_poll,
4966     port_poll_wait,
4967     port_is_lacp_current,
4968     NULL,                       /* rule_choose_table */
4969     rule_alloc,
4970     rule_construct,
4971     rule_insert,
4972     rule_delete,
4973     rule_destruct,
4974     rule_dealloc,
4975     rule_get_stats,
4976     rule_execute,
4977     rule_modify_actions,
4978     set_frag_handling,
4979     packet_out,
4980     set_netflow,
4981     get_netflow_ids,
4982     set_sflow,
4983     set_ipfix,
4984     set_cfm,
4985     get_cfm_status,
4986     set_bfd,
4987     get_bfd_status,
4988     set_stp,
4989     get_stp_status,
4990     set_stp_port,
4991     get_stp_port_status,
4992     get_stp_port_stats,
4993     set_queues,
4994     bundle_set,
4995     bundle_remove,
4996     mirror_set__,
4997     mirror_get_stats__,
4998     set_flood_vlans,
4999     is_mirror_output_bundle,
5000     forward_bpdu_changed,
5001     set_mac_table_config,
5002     set_realdev,
5003     NULL,                       /* meter_get_features */
5004     NULL,                       /* meter_set */
5005     NULL,                       /* meter_get */
5006     NULL,                       /* meter_del */
5007     group_alloc,                /* group_alloc */
5008     group_construct,            /* group_construct */
5009     group_destruct,             /* group_destruct */
5010     group_dealloc,              /* group_dealloc */
5011     group_modify,               /* group_modify */
5012     group_get_stats,            /* group_get_stats */
5013 };