vswitchd: Keep a netdev open for each interface.
[sliver-openvswitch.git] / vswitchd / bridge.c
1 /* Copyright (c) 2008, 2009 Nicira Networks
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 #include <config.h>
17 #include "bridge.h"
18 #include <assert.h>
19 #include <errno.h>
20 #include <arpa/inet.h>
21 #include <ctype.h>
22 #include <inttypes.h>
23 #include <net/if.h>
24 #include <openflow/openflow.h>
25 #include <signal.h>
26 #include <stdlib.h>
27 #include <strings.h>
28 #include <sys/stat.h>
29 #include <sys/socket.h>
30 #include <sys/types.h>
31 #include <unistd.h>
32 #include "bitmap.h"
33 #include "cfg.h"
34 #include "coverage.h"
35 #include "dirs.h"
36 #include "dpif.h"
37 #include "dynamic-string.h"
38 #include "flow.h"
39 #include "hash.h"
40 #include "list.h"
41 #include "mac-learning.h"
42 #include "netdev.h"
43 #include "odp-util.h"
44 #include "ofp-print.h"
45 #include "ofpbuf.h"
46 #include "ofproto/ofproto.h"
47 #include "packets.h"
48 #include "poll-loop.h"
49 #include "port-array.h"
50 #include "proc-net-compat.h"
51 #include "process.h"
52 #include "socket-util.h"
53 #include "stp.h"
54 #include "svec.h"
55 #include "timeval.h"
56 #include "util.h"
57 #include "unixctl.h"
58 #include "vconn.h"
59 #include "vconn-ssl.h"
60 #include "xenserver.h"
61 #include "xtoxll.h"
62
63 #define THIS_MODULE VLM_bridge
64 #include "vlog.h"
65
66 struct dst {
67     uint16_t vlan;
68     uint16_t dp_ifidx;
69 };
70
71 extern uint64_t mgmt_id;
72
73 struct iface {
74     /* These members are always valid. */
75     struct port *port;          /* Containing port. */
76     size_t port_ifidx;          /* Index within containing port. */
77     char *name;                 /* Host network device name. */
78     tag_type tag;               /* Tag associated with this interface. */
79     long long delay_expires;    /* Time after which 'enabled' may change. */
80
81     /* These members are valid only after bridge_reconfigure() causes them to
82      * be initialized.*/
83     int dp_ifidx;               /* Index within kernel datapath. */
84     struct netdev *netdev;      /* Network device. */
85     uint8_t mac[ETH_ADDR_LEN];  /* Ethernet address (all zeros if unknowns). */
86     bool enabled;               /* May be chosen for flows? */
87 };
88
89 #define BOND_MASK 0xff
90 struct bond_entry {
91     int iface_idx;              /* Index of assigned iface, or -1 if none. */
92     uint64_t tx_bytes;          /* Count of bytes recently transmitted. */
93     tag_type iface_tag;         /* Tag associated with iface_idx. */
94 };
95
96 #define MAX_MIRRORS 32
97 typedef uint32_t mirror_mask_t;
98 #define MIRROR_MASK_C(X) UINT32_C(X)
99 BUILD_ASSERT_DECL(sizeof(mirror_mask_t) * CHAR_BIT >= MAX_MIRRORS);
100 struct mirror {
101     struct bridge *bridge;
102     size_t idx;
103     char *name;
104
105     /* Selection criteria. */
106     struct svec src_ports;
107     struct svec dst_ports;
108     int *vlans;
109     size_t n_vlans;
110
111     /* Output. */
112     struct port *out_port;
113     int out_vlan;
114 };
115
116 #define FLOOD_PORT ((struct port *) 1) /* The 'flood' output port. */
117 struct port {
118     struct bridge *bridge;
119     size_t port_idx;
120     int vlan;                   /* -1=trunk port, else a 12-bit VLAN ID. */
121     unsigned long *trunks;      /* Bitmap of trunked VLANs, if 'vlan' == -1. */
122     char *name;
123
124     /* An ordinary bridge port has 1 interface.
125      * A bridge port for bonding has at least 2 interfaces. */
126     struct iface **ifaces;
127     size_t n_ifaces, allocated_ifaces;
128
129     /* Bonding info. */
130     struct bond_entry *bond_hash; /* An array of (BOND_MASK + 1) elements. */
131     int active_iface;           /* Ifidx on which bcasts accepted, or -1. */
132     tag_type active_iface_tag;  /* Tag for bcast flows. */
133     tag_type no_ifaces_tag;     /* Tag for flows when all ifaces disabled. */
134     int updelay, downdelay;     /* Delay before iface goes up/down, in ms. */
135
136     /* Port mirroring info. */
137     mirror_mask_t src_mirrors;  /* Mirrors triggered when packet received. */
138     mirror_mask_t dst_mirrors;  /* Mirrors triggered when packet sent. */
139     bool is_mirror_output_port; /* Does port mirroring send frames here? */
140
141     /* Spanning tree info. */
142     enum stp_state stp_state;   /* Always STP_FORWARDING if STP not in use. */
143     tag_type stp_state_tag;     /* Tag for STP state change. */
144 };
145
146 #define DP_MAX_PORTS 255
147 struct bridge {
148     struct list node;           /* Node in global list of bridges. */
149     char *name;                 /* User-specified arbitrary name. */
150     struct mac_learning *ml;    /* MAC learning table, or null not to learn. */
151     bool sent_config_request;   /* Successfully sent config request? */
152     uint8_t default_ea[ETH_ADDR_LEN]; /* Default MAC. */
153
154     /* Support for remote controllers. */
155     char *controller;           /* NULL if there is no remote controller;
156                                  * "discover" to do controller discovery;
157                                  * otherwise a vconn name. */
158
159     /* OpenFlow switch processing. */
160     struct ofproto *ofproto;    /* OpenFlow switch. */
161
162     /* Kernel datapath information. */
163     struct dpif *dpif;          /* Datapath. */
164     struct port_array ifaces;   /* Indexed by kernel datapath port number. */
165
166     /* Bridge ports. */
167     struct port **ports;
168     size_t n_ports, allocated_ports;
169
170     /* Bonding. */
171     bool has_bonded_ports;
172     long long int bond_next_rebalance;
173
174     /* Flow tracking. */
175     bool flush;
176
177     /* Flow statistics gathering. */
178     time_t next_stats_request;
179
180     /* Port mirroring. */
181     struct mirror *mirrors[MAX_MIRRORS];
182
183     /* Spanning tree. */
184     struct stp *stp;
185     long long int stp_last_tick;
186 };
187
188 /* List of all bridges. */
189 static struct list all_bridges = LIST_INITIALIZER(&all_bridges);
190
191 /* Maximum number of datapaths. */
192 enum { DP_MAX = 256 };
193
194 static struct bridge *bridge_create(const char *name);
195 static void bridge_destroy(struct bridge *);
196 static struct bridge *bridge_lookup(const char *name);
197 static int bridge_run_one(struct bridge *);
198 static void bridge_reconfigure_one(struct bridge *);
199 static void bridge_reconfigure_controller(struct bridge *);
200 static void bridge_get_all_ifaces(const struct bridge *, struct svec *ifaces);
201 static void bridge_fetch_dp_ifaces(struct bridge *);
202 static void bridge_flush(struct bridge *);
203 static void bridge_pick_local_hw_addr(struct bridge *,
204                                       uint8_t ea[ETH_ADDR_LEN],
205                                       const char **devname);
206 static uint64_t bridge_pick_datapath_id(struct bridge *,
207                                         const uint8_t bridge_ea[ETH_ADDR_LEN],
208                                         const char *devname);
209 static uint64_t dpid_from_hash(const void *, size_t nbytes);
210
211 static void bridge_unixctl_fdb_show(struct unixctl_conn *, const char *args);
212
213 static void bond_init(void);
214 static void bond_run(struct bridge *);
215 static void bond_wait(struct bridge *);
216 static void bond_rebalance_port(struct port *);
217 static void bond_send_learning_packets(struct port *);
218
219 static void port_create(struct bridge *, const char *name);
220 static void port_reconfigure(struct port *);
221 static void port_destroy(struct port *);
222 static struct port *port_lookup(const struct bridge *, const char *name);
223 static struct iface *port_lookup_iface(const struct port *, const char *name);
224 static struct port *port_from_dp_ifidx(const struct bridge *,
225                                        uint16_t dp_ifidx);
226 static void port_update_bond_compat(struct port *);
227 static void port_update_vlan_compat(struct port *);
228 static void port_update_bonding(struct port *);
229
230 static void mirror_create(struct bridge *, const char *name);
231 static void mirror_destroy(struct mirror *);
232 static void mirror_reconfigure(struct bridge *);
233 static void mirror_reconfigure_one(struct mirror *);
234 static bool vlan_is_mirrored(const struct mirror *, int vlan);
235
236 static void brstp_reconfigure(struct bridge *);
237 static void brstp_adjust_timers(struct bridge *);
238 static void brstp_run(struct bridge *);
239 static void brstp_wait(struct bridge *);
240
241 static void iface_create(struct port *, const char *name);
242 static void iface_destroy(struct iface *);
243 static struct iface *iface_lookup(const struct bridge *, const char *name);
244 static struct iface *iface_from_dp_ifidx(const struct bridge *,
245                                          uint16_t dp_ifidx);
246
247 /* Hooks into ofproto processing. */
248 static struct ofhooks bridge_ofhooks;
249 \f
250 /* Public functions. */
251
252 /* Adds the name of each interface used by a bridge, including local and
253  * internal ports, to 'svec'. */
254 void
255 bridge_get_ifaces(struct svec *svec) 
256 {
257     struct bridge *br, *next;
258     size_t i, j;
259
260     LIST_FOR_EACH_SAFE (br, next, struct bridge, node, &all_bridges) {
261         for (i = 0; i < br->n_ports; i++) {
262             struct port *port = br->ports[i];
263
264             for (j = 0; j < port->n_ifaces; j++) {
265                 struct iface *iface = port->ifaces[j];
266                 if (iface->dp_ifidx < 0) {
267                     VLOG_ERR("%s interface not in datapath %s, ignoring",
268                              iface->name, dpif_name(br->dpif));
269                 } else {
270                     if (iface->dp_ifidx != ODPP_LOCAL) {
271                         svec_add(svec, iface->name);
272                     }
273                 }
274             }
275         }
276     }
277 }
278
279 /* The caller must already have called cfg_read(). */
280 void
281 bridge_init(void)
282 {
283     struct svec dpif_names;
284     size_t i;
285
286     unixctl_command_register("fdb/show", bridge_unixctl_fdb_show);
287
288     dp_enumerate(&dpif_names);
289     for (i = 0; i < dpif_names.n; i++) {
290         const char *dpif_name = dpif_names.names[i];
291         struct dpif *dpif;
292         int retval;
293
294         retval = dpif_open(dpif_name, &dpif);
295         if (!retval) {
296             struct svec all_names;
297             size_t j;
298
299             svec_init(&all_names);
300             dpif_get_all_names(dpif, &all_names);
301             for (j = 0; j < all_names.n; j++) {
302                 if (cfg_has("bridge.%s.port", all_names.names[j])) {
303                     goto found;
304                 }
305             }
306             dpif_delete(dpif);
307         found:
308             svec_destroy(&all_names);
309             dpif_close(dpif);
310         }
311     }
312
313     bond_init();
314     bridge_reconfigure();
315 }
316
317 #ifdef HAVE_OPENSSL
318 static bool
319 config_string_change(const char *key, char **valuep)
320 {
321     const char *value = cfg_get_string(0, "%s", key);
322     if (value && (!*valuep || strcmp(value, *valuep))) {
323         free(*valuep);
324         *valuep = xstrdup(value);
325         return true;
326     } else {
327         return false;
328     }
329 }
330
331 static void
332 bridge_configure_ssl(void)
333 {
334     /* XXX SSL should be configurable on a per-bridge basis.
335      * XXX should be possible to de-configure SSL. */
336     static char *private_key_file;
337     static char *certificate_file;
338     static char *cacert_file;
339     struct stat s;
340
341     if (config_string_change("ssl.private-key", &private_key_file)) {
342         vconn_ssl_set_private_key_file(private_key_file);
343     }
344
345     if (config_string_change("ssl.certificate", &certificate_file)) {
346         vconn_ssl_set_certificate_file(certificate_file);
347     }
348
349     /* We assume that even if the filename hasn't changed, if the CA cert 
350      * file has been removed, that we want to move back into
351      * boot-strapping mode.  This opens a small security hole, because
352      * the old certificate will still be trusted until vSwitch is
353      * restarted.  We may want to address this in vconn's SSL library. */
354     if (config_string_change("ssl.ca-cert", &cacert_file)
355         || (cacert_file && stat(cacert_file, &s) && errno == ENOENT)) {
356         vconn_ssl_set_ca_cert_file(cacert_file,
357                                    cfg_get_bool(0, "ssl.bootstrap-ca-cert"));
358     }
359 }
360 #endif
361
362 /* iterate_and_prune_ifaces() callback function that opens the network device
363  * for 'iface', if it is not already open, and retrieves the interface's MAC
364  * address and carrier status. */
365 static bool
366 init_iface_netdev(struct bridge *br UNUSED, struct iface *iface,
367                   void *aux UNUSED)
368 {
369     if (iface->netdev) {
370         return true;
371     } else if (!netdev_open(iface->name, NETDEV_ETH_TYPE_NONE,
372                             &iface->netdev)) {
373         netdev_get_etheraddr(iface->netdev, iface->mac);
374         netdev_get_carrier(iface->netdev, &iface->enabled);
375         return true;
376     } else {
377         /* If the network device can't be opened, then we're not going to try
378          * to do anything with this interface. */
379         return false;
380     }
381 }
382
383 static bool
384 check_iface_dp_ifidx(struct bridge *br, struct iface *iface,
385                      void *local_ifacep_)
386 {
387     struct iface **local_ifacep = local_ifacep_;
388
389     if (iface->dp_ifidx >= 0) {
390         if (iface->dp_ifidx == ODPP_LOCAL) {
391             *local_ifacep = iface;
392         }
393         VLOG_DBG("%s has interface %s on port %d",
394                  dpif_name(br->dpif),
395                  iface->name, iface->dp_ifidx);
396         return true;
397     } else {
398         VLOG_ERR("%s interface not in %s, dropping",
399                  iface->name, dpif_name(br->dpif));
400         return false;
401     }
402 }
403
404 /* Calls 'cb' for each interfaces in 'br', passing along the 'aux' argument.
405  * Deletes from 'br' all the interfaces for which 'cb' returns false, and then
406  * deletes from 'br' any ports that no longer have any interfaces. */
407 static void
408 iterate_and_prune_ifaces(struct bridge *br,
409                          bool (*cb)(struct bridge *, struct iface *,
410                                     void *aux),
411                          void *aux)
412 {
413     size_t i, j;
414
415     for (i = 0; i < br->n_ports; ) {
416         struct port *port = br->ports[i];
417         for (j = 0; j < port->n_ifaces; ) {
418             struct iface *iface = port->ifaces[j];
419             if (cb(br, iface, aux)) {
420                 j++;
421             } else {
422                 iface_destroy(iface);
423             }
424         }
425
426         if (port->n_ifaces) {
427             i++;
428         } else  {
429             VLOG_ERR("%s port has no interfaces, dropping", port->name);
430             port_destroy(port);
431         }
432     }
433 }
434
435 void
436 bridge_reconfigure(void)
437 {
438     struct svec old_br, new_br;
439     struct bridge *br, *next;
440     size_t i;
441
442     COVERAGE_INC(bridge_reconfigure);
443
444     /* Collect old and new bridges. */
445     svec_init(&old_br);
446     svec_init(&new_br);
447     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
448         svec_add(&old_br, br->name);
449     }
450     cfg_get_subsections(&new_br, "bridge");
451
452     /* Get rid of deleted bridges and add new bridges. */
453     svec_sort(&old_br);
454     svec_sort(&new_br);
455     assert(svec_is_unique(&old_br));
456     assert(svec_is_unique(&new_br));
457     LIST_FOR_EACH_SAFE (br, next, struct bridge, node, &all_bridges) {
458         if (!svec_contains(&new_br, br->name)) {
459             bridge_destroy(br);
460         }
461     }
462     for (i = 0; i < new_br.n; i++) {
463         const char *name = new_br.names[i];
464         if (!svec_contains(&old_br, name)) {
465             bridge_create(name);
466         }
467     }
468     svec_destroy(&old_br);
469     svec_destroy(&new_br);
470
471 #ifdef HAVE_OPENSSL
472     /* Configure SSL. */
473     bridge_configure_ssl();
474 #endif
475
476     /* Reconfigure all bridges. */
477     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
478         bridge_reconfigure_one(br);
479     }
480
481     /* Add and delete ports on all datapaths.
482      *
483      * The kernel will reject any attempt to add a given port to a datapath if
484      * that port already belongs to a different datapath, so we must do all
485      * port deletions before any port additions. */
486     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
487         struct odp_port *dpif_ports;
488         size_t n_dpif_ports;
489         struct svec want_ifaces;
490
491         dpif_port_list(br->dpif, &dpif_ports, &n_dpif_ports);
492         bridge_get_all_ifaces(br, &want_ifaces);
493         for (i = 0; i < n_dpif_ports; i++) {
494             const struct odp_port *p = &dpif_ports[i];
495             if (!svec_contains(&want_ifaces, p->devname)
496                 && strcmp(p->devname, br->name)) {
497                 int retval = dpif_port_del(br->dpif, p->port);
498                 if (retval) {
499                     VLOG_ERR("failed to remove %s interface from %s: %s",
500                              p->devname, dpif_name(br->dpif),
501                              strerror(retval));
502                 }
503             }
504         }
505         svec_destroy(&want_ifaces);
506         free(dpif_ports);
507     }
508     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
509         struct odp_port *dpif_ports;
510         size_t n_dpif_ports;
511         struct svec cur_ifaces, want_ifaces, add_ifaces;
512
513         dpif_port_list(br->dpif, &dpif_ports, &n_dpif_ports);
514         svec_init(&cur_ifaces);
515         for (i = 0; i < n_dpif_ports; i++) {
516             svec_add(&cur_ifaces, dpif_ports[i].devname);
517         }
518         free(dpif_ports);
519         svec_sort_unique(&cur_ifaces);
520         bridge_get_all_ifaces(br, &want_ifaces);
521         svec_diff(&want_ifaces, &cur_ifaces, &add_ifaces, NULL, NULL);
522
523         for (i = 0; i < add_ifaces.n; i++) {
524             const char *if_name = add_ifaces.names[i];
525             int internal = cfg_get_bool(0, "iface.%s.internal", if_name);
526             int flags = internal ? ODP_PORT_INTERNAL : 0;
527             int error = dpif_port_add(br->dpif, if_name, flags, NULL);
528             if (error == EXFULL) {
529                 VLOG_ERR("ran out of valid port numbers on %s",
530                          dpif_name(br->dpif));
531                 break;
532             } else if (error) {
533                 VLOG_ERR("failed to add %s interface to %s: %s",
534                          if_name, dpif_name(br->dpif), strerror(error));
535             }
536         }
537         svec_destroy(&cur_ifaces);
538         svec_destroy(&want_ifaces);
539         svec_destroy(&add_ifaces);
540     }
541     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
542         uint8_t ea[8];
543         uint64_t dpid;
544         struct iface *local_iface = NULL;
545         const char *devname;
546         uint8_t engine_type, engine_id;
547         bool add_id_to_iface = false;
548         struct svec nf_hosts;
549
550         bridge_fetch_dp_ifaces(br);
551         iterate_and_prune_ifaces(br, init_iface_netdev, NULL);
552
553         local_iface = NULL;
554         iterate_and_prune_ifaces(br, check_iface_dp_ifidx, &local_iface);
555
556         /* Pick local port hardware address, datapath ID. */
557         bridge_pick_local_hw_addr(br, ea, &devname);
558         if (local_iface) {
559             int error = netdev_nodev_set_etheraddr(local_iface->name, ea);
560             if (error) {
561                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
562                 VLOG_ERR_RL(&rl, "bridge %s: failed to set bridge "
563                             "Ethernet address: %s",
564                             br->name, strerror(error));
565             }
566         }
567
568         dpid = bridge_pick_datapath_id(br, ea, devname);
569         ofproto_set_datapath_id(br->ofproto, dpid);
570
571         /* Set NetFlow configuration on this bridge. */
572         dpif_get_netflow_ids(br->dpif, &engine_type, &engine_id);
573         if (cfg_has("netflow.%s.engine-type", br->name)) {
574             engine_type = cfg_get_int(0, "netflow.%s.engine-type", 
575                     br->name);
576         }
577         if (cfg_has("netflow.%s.engine-id", br->name)) {
578             engine_id = cfg_get_int(0, "netflow.%s.engine-id", br->name);
579         }
580         if (cfg_has("netflow.%s.add-id-to-iface", br->name)) {
581             add_id_to_iface = cfg_get_bool(0, "netflow.%s.add-id-to-iface",
582                     br->name);
583         }
584         if (add_id_to_iface && engine_id > 0x7f) {
585             VLOG_WARN("bridge %s: netflow port mangling may conflict with "
586                     "another vswitch, choose an engine id less than 128", 
587                     br->name);
588         }
589         if (add_id_to_iface && br->n_ports > 0x1ff) {
590             VLOG_WARN("bridge %s: netflow port mangling will conflict with "
591                     "another port when 512 or more ports are used", 
592                     br->name);
593         }
594         svec_init(&nf_hosts);
595         cfg_get_all_keys(&nf_hosts, "netflow.%s.host", br->name);
596         if (ofproto_set_netflow(br->ofproto, &nf_hosts,  engine_type, 
597                     engine_id, add_id_to_iface)) {
598             VLOG_ERR("bridge %s: problem setting netflow collectors", 
599                     br->name);
600         }
601
602         /* Update the controller and related settings.  It would be more
603          * straightforward to call this from bridge_reconfigure_one(), but we
604          * can't do it there for two reasons.  First, and most importantly, at
605          * that point we don't know the dp_ifidx of any interfaces that have
606          * been added to the bridge (because we haven't actually added them to
607          * the datapath).  Second, at that point we haven't set the datapath ID
608          * yet; when a controller is configured, resetting the datapath ID will
609          * immediately disconnect from the controller, so it's better to set
610          * the datapath ID before the controller. */
611         bridge_reconfigure_controller(br);
612     }
613     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
614         for (i = 0; i < br->n_ports; i++) {
615             struct port *port = br->ports[i];
616             port_update_vlan_compat(port);
617             port_update_bonding(port);
618         }
619     }
620     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
621         brstp_reconfigure(br);
622     }
623 }
624
625 static void
626 bridge_pick_local_hw_addr(struct bridge *br, uint8_t ea[ETH_ADDR_LEN],
627                           const char **devname)
628 {
629     uint64_t requested_ea;
630     size_t i, j;
631     int error;
632
633     *devname = NULL;
634
635     /* Did the user request a particular MAC? */
636     requested_ea = cfg_get_mac(0, "bridge.%s.mac", br->name);
637     if (requested_ea) {
638         eth_addr_from_uint64(requested_ea, ea);
639         if (eth_addr_is_multicast(ea)) {
640             VLOG_ERR("bridge %s: cannot set MAC address to multicast "
641                      "address "ETH_ADDR_FMT, br->name, ETH_ADDR_ARGS(ea));
642         } else if (eth_addr_is_zero(ea)) {
643             VLOG_ERR("bridge %s: cannot set MAC address to zero", br->name);
644         } else {
645             return;
646         }
647     }
648
649     /* Otherwise choose the minimum MAC address among all of the interfaces.
650      * (Xen uses FE:FF:FF:FF:FF:FF for virtual interfaces so this will get the
651      * MAC of the physical interface in such an environment.) */
652     memset(ea, 0xff, sizeof ea);
653     for (i = 0; i < br->n_ports; i++) {
654         struct port *port = br->ports[i];
655         if (port->is_mirror_output_port) {
656             continue;
657         }
658         for (j = 0; j < port->n_ifaces; j++) {
659             struct iface *iface = port->ifaces[j];
660             uint8_t iface_ea[ETH_ADDR_LEN];
661             if (iface->dp_ifidx == ODPP_LOCAL
662                 || cfg_get_bool(0, "iface.%s.internal", iface->name)) {
663                 continue;
664             }
665             error = netdev_nodev_get_etheraddr(iface->name, iface_ea);
666             if (!error) {
667                 if (!eth_addr_is_multicast(iface_ea) &&
668                     !eth_addr_is_reserved(iface_ea) &&
669                     !eth_addr_is_zero(iface_ea) &&
670                     memcmp(iface_ea, ea, ETH_ADDR_LEN) < 0) {
671                     memcpy(ea, iface_ea, ETH_ADDR_LEN);
672                     *devname = iface->name;
673                 }
674             } else {
675                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
676                 VLOG_ERR_RL(&rl, "failed to obtain Ethernet address of %s: %s",
677                             iface->name, strerror(error));
678             }
679         }
680     }
681     if (eth_addr_is_multicast(ea) || eth_addr_is_vif(ea)) {
682         memcpy(ea, br->default_ea, ETH_ADDR_LEN);
683         *devname = NULL;
684         VLOG_WARN("bridge %s: using default bridge Ethernet "
685                   "address "ETH_ADDR_FMT, br->name, ETH_ADDR_ARGS(ea));
686     } else {
687         VLOG_DBG("bridge %s: using bridge Ethernet address "ETH_ADDR_FMT,
688                  br->name, ETH_ADDR_ARGS(ea));
689     }
690 }
691
692 /* Choose and returns the datapath ID for bridge 'br' given that the bridge
693  * Ethernet address is 'bridge_ea'.  If 'bridge_ea' is the Ethernet address of
694  * a network device, then that network device's name must be passed in as
695  * 'devname'; if 'bridge_ea' was derived some other way, then 'devname' must be
696  * passed in as a null pointer. */
697 static uint64_t
698 bridge_pick_datapath_id(struct bridge *br,
699                         const uint8_t bridge_ea[ETH_ADDR_LEN],
700                         const char *devname)
701 {
702     /*
703      * The procedure for choosing a bridge MAC address will, in the most
704      * ordinary case, also choose a unique MAC that we can use as a datapath
705      * ID.  In some special cases, though, multiple bridges will end up with
706      * the same MAC address.  This is OK for the bridges, but it will confuse
707      * the OpenFlow controller, because each datapath needs a unique datapath
708      * ID.
709      *
710      * Datapath IDs must be unique.  It is also very desirable that they be
711      * stable from one run to the next, so that policy set on a datapath
712      * "sticks".
713      */
714     uint64_t dpid;
715
716     dpid = cfg_get_dpid(0, "bridge.%s.datapath-id", br->name);
717     if (dpid) {
718         return dpid;
719     }
720
721     if (devname) {
722         int vlan;
723         if (!netdev_get_vlan_vid(devname, &vlan)) {
724             /*
725              * A bridge whose MAC address is taken from a VLAN network device
726              * (that is, a network device created with vconfig(8) or similar
727              * tool) will have the same MAC address as a bridge on the VLAN
728              * device's physical network device.
729              *
730              * Handle this case by hashing the physical network device MAC
731              * along with the VLAN identifier.
732              */
733             uint8_t buf[ETH_ADDR_LEN + 2];
734             memcpy(buf, bridge_ea, ETH_ADDR_LEN);
735             buf[ETH_ADDR_LEN] = vlan >> 8;
736             buf[ETH_ADDR_LEN + 1] = vlan;
737             return dpid_from_hash(buf, sizeof buf);
738         } else {
739             /*
740              * Assume that this bridge's MAC address is unique, since it
741              * doesn't fit any of the cases we handle specially.
742              */
743         }
744     } else {
745         /*
746          * A purely internal bridge, that is, one that has no non-virtual
747          * network devices on it at all, is more difficult because it has no
748          * natural unique identifier at all.
749          *
750          * When the host is a XenServer, we handle this case by hashing the
751          * host's UUID with the name of the bridge.  Names of bridges are
752          * persistent across XenServer reboots, although they can be reused if
753          * an internal network is destroyed and then a new one is later
754          * created, so this is fairly effective.
755          *
756          * When the host is not a XenServer, we punt by using a random MAC
757          * address on each run.
758          */
759         const char *host_uuid = xenserver_get_host_uuid();
760         if (host_uuid) {
761             char *combined = xasprintf("%s,%s", host_uuid, br->name);
762             dpid = dpid_from_hash(combined, strlen(combined));
763             free(combined);
764             return dpid;
765         }
766     }
767
768     return eth_addr_to_uint64(bridge_ea);
769 }
770
771 static uint64_t
772 dpid_from_hash(const void *data, size_t n)
773 {
774     uint8_t hash[SHA1_DIGEST_SIZE];
775
776     BUILD_ASSERT_DECL(sizeof hash >= ETH_ADDR_LEN);
777     sha1_bytes(data, n, hash);
778     eth_addr_mark_random(hash);
779     return eth_addr_to_uint64(hash);
780 }
781
782 int
783 bridge_run(void)
784 {
785     struct bridge *br, *next;
786     int retval;
787
788     retval = 0;
789     LIST_FOR_EACH_SAFE (br, next, struct bridge, node, &all_bridges) {
790         int error = bridge_run_one(br);
791         if (error) {
792             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
793             VLOG_ERR_RL(&rl, "bridge %s: datapath was destroyed externally, "
794                         "forcing reconfiguration", br->name);
795             if (!retval) {
796                 retval = error;
797             }
798         }
799     }
800     return retval;
801 }
802
803 void
804 bridge_wait(void)
805 {
806     struct bridge *br;
807
808     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
809         ofproto_wait(br->ofproto);
810         if (br->controller) {
811             continue;
812         }
813
814         if (br->ml) {
815             mac_learning_wait(br->ml);
816         }
817         bond_wait(br);
818         brstp_wait(br);
819     }
820 }
821
822 /* Forces 'br' to revalidate all of its flows.  This is appropriate when 'br''s
823  * configuration changes.  */
824 static void
825 bridge_flush(struct bridge *br)
826 {
827     COVERAGE_INC(bridge_flush);
828     br->flush = true;
829     if (br->ml) {
830         mac_learning_flush(br->ml);
831     }
832 }
833 \f
834 /* Bridge unixctl user interface functions. */
835 static void
836 bridge_unixctl_fdb_show(struct unixctl_conn *conn, const char *args)
837 {
838     struct ds ds = DS_EMPTY_INITIALIZER;
839     const struct bridge *br;
840
841     br = bridge_lookup(args);
842     if (!br) {
843         unixctl_command_reply(conn, 501, "no such bridge");
844         return;
845     }
846
847     ds_put_cstr(&ds, " port  VLAN  MAC                Age\n");
848     if (br->ml) {
849         const struct mac_entry *e;
850         LIST_FOR_EACH (e, struct mac_entry, lru_node, &br->ml->lrus) {
851             if (e->port < 0 || e->port >= br->n_ports) {
852                 continue;
853             }
854             ds_put_format(&ds, "%5d  %4d  "ETH_ADDR_FMT"  %3d\n",
855                           br->ports[e->port]->ifaces[0]->dp_ifidx,
856                           e->vlan, ETH_ADDR_ARGS(e->mac), mac_entry_age(e));
857         }
858     }
859     unixctl_command_reply(conn, 200, ds_cstr(&ds));
860     ds_destroy(&ds);
861 }
862 \f
863 /* Bridge reconfiguration functions. */
864
865 static struct bridge *
866 bridge_create(const char *name)
867 {
868     struct bridge *br;
869     int error;
870
871     assert(!bridge_lookup(name));
872     br = xcalloc(1, sizeof *br);
873
874     error = dpif_create(name, &br->dpif);
875     if (error == EEXIST || error == EBUSY) {
876         error = dpif_open(name, &br->dpif);
877         if (error) {
878             VLOG_ERR("datapath %s already exists but cannot be opened: %s",
879                      name, strerror(error));
880             free(br);
881             return NULL;
882         }
883         dpif_flow_flush(br->dpif);
884     } else if (error) {
885         VLOG_ERR("failed to create datapath %s: %s", name, strerror(error));
886         free(br);
887         return NULL;
888     }
889
890     error = ofproto_create(name, &bridge_ofhooks, br, &br->ofproto);
891     if (error) {
892         VLOG_ERR("failed to create switch %s: %s", name, strerror(error));
893         dpif_delete(br->dpif);
894         dpif_close(br->dpif);
895         free(br);
896         return NULL;
897     }
898
899     br->name = xstrdup(name);
900     br->ml = mac_learning_create();
901     br->sent_config_request = false;
902     eth_addr_random(br->default_ea);
903
904     port_array_init(&br->ifaces);
905
906     br->flush = false;
907     br->bond_next_rebalance = time_msec() + 10000;
908
909     list_push_back(&all_bridges, &br->node);
910
911     VLOG_INFO("created bridge %s on %s", br->name, dpif_name(br->dpif));
912
913     return br;
914 }
915
916 static void
917 bridge_destroy(struct bridge *br)
918 {
919     if (br) {
920         int error;
921
922         while (br->n_ports > 0) {
923             port_destroy(br->ports[br->n_ports - 1]);
924         }
925         list_remove(&br->node);
926         error = dpif_delete(br->dpif);
927         if (error && error != ENOENT) {
928             VLOG_ERR("failed to delete %s: %s",
929                      dpif_name(br->dpif), strerror(error));
930         }
931         dpif_close(br->dpif);
932         ofproto_destroy(br->ofproto);
933         free(br->controller);
934         mac_learning_destroy(br->ml);
935         port_array_destroy(&br->ifaces);
936         free(br->ports);
937         free(br->name);
938         free(br);
939     }
940 }
941
942 static struct bridge *
943 bridge_lookup(const char *name)
944 {
945     struct bridge *br;
946
947     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
948         if (!strcmp(br->name, name)) {
949             return br;
950         }
951     }
952     return NULL;
953 }
954
955 bool
956 bridge_exists(const char *name)
957 {
958     return bridge_lookup(name) ? true : false;
959 }
960
961 uint64_t
962 bridge_get_datapathid(const char *name)
963 {
964     struct bridge *br = bridge_lookup(name);
965     return br ? ofproto_get_datapath_id(br->ofproto) : 0;
966 }
967
968 static int
969 bridge_run_one(struct bridge *br)
970 {
971     int error;
972
973     error = ofproto_run1(br->ofproto);
974     if (error) {
975         return error;
976     }
977
978     if (br->ml) {
979         mac_learning_run(br->ml, ofproto_get_revalidate_set(br->ofproto));
980     }
981     bond_run(br);
982     brstp_run(br);
983
984     error = ofproto_run2(br->ofproto, br->flush);
985     br->flush = false;
986
987     return error;
988 }
989
990 static const char *
991 bridge_get_controller(const struct bridge *br)
992 {
993     const char *controller;
994
995     controller = cfg_get_string(0, "bridge.%s.controller", br->name);
996     if (!controller) {
997         controller = cfg_get_string(0, "mgmt.controller");
998     }
999     return controller && controller[0] ? controller : NULL;
1000 }
1001
1002 static bool
1003 check_duplicate_ifaces(struct bridge *br, struct iface *iface, void *ifaces_)
1004 {
1005     struct svec *ifaces = ifaces_;
1006     if (!svec_contains(ifaces, iface->name)) {
1007         svec_add(ifaces, iface->name);
1008         svec_sort(ifaces);
1009         return true;
1010     } else {
1011         VLOG_ERR("bridge %s: %s interface is on multiple ports, "
1012                  "removing from %s",
1013                  br->name, iface->name, iface->port->name);
1014         return false;
1015     }
1016 }
1017
1018 static void
1019 bridge_reconfigure_one(struct bridge *br)
1020 {
1021     struct svec old_ports, new_ports, ifaces;
1022     struct svec listeners, old_listeners;
1023     struct svec snoops, old_snoops;
1024     size_t i;
1025
1026     /* Collect old ports. */
1027     svec_init(&old_ports);
1028     for (i = 0; i < br->n_ports; i++) {
1029         svec_add(&old_ports, br->ports[i]->name);
1030     }
1031     svec_sort(&old_ports);
1032     assert(svec_is_unique(&old_ports));
1033
1034     /* Collect new ports. */
1035     svec_init(&new_ports);
1036     cfg_get_all_keys(&new_ports, "bridge.%s.port", br->name);
1037     svec_sort(&new_ports);
1038     if (bridge_get_controller(br)) {
1039         char local_name[IF_NAMESIZE];
1040         int error;
1041
1042         error = dpif_port_get_name(br->dpif, ODPP_LOCAL,
1043                                    local_name, sizeof local_name);
1044         if (!error && !svec_contains(&new_ports, local_name)) {
1045             svec_add(&new_ports, local_name);
1046             svec_sort(&new_ports);
1047         }
1048     }
1049     if (!svec_is_unique(&new_ports)) {
1050         VLOG_WARN("bridge %s: %s specified twice as bridge port",
1051                   br->name, svec_get_duplicate(&new_ports));
1052         svec_unique(&new_ports);
1053     }
1054
1055     ofproto_set_mgmt_id(br->ofproto, mgmt_id);
1056
1057     /* Get rid of deleted ports and add new ports. */
1058     for (i = 0; i < br->n_ports; ) {
1059         struct port *port = br->ports[i];
1060         if (!svec_contains(&new_ports, port->name)) {
1061             port_destroy(port);
1062         } else {
1063             i++;
1064         }
1065     }
1066     for (i = 0; i < new_ports.n; i++) {
1067         const char *name = new_ports.names[i];
1068         if (!svec_contains(&old_ports, name)) {
1069             port_create(br, name);
1070         }
1071     }
1072     svec_destroy(&old_ports);
1073     svec_destroy(&new_ports);
1074
1075     /* Reconfigure all ports. */
1076     for (i = 0; i < br->n_ports; i++) {
1077         port_reconfigure(br->ports[i]);
1078     }
1079
1080     /* Check and delete duplicate interfaces. */
1081     svec_init(&ifaces);
1082     iterate_and_prune_ifaces(br, check_duplicate_ifaces, &ifaces);
1083     svec_destroy(&ifaces);
1084
1085     /* Delete all flows if we're switching from connected to standalone or vice
1086      * versa.  (XXX Should we delete all flows if we are switching from one
1087      * controller to another?) */
1088
1089     /* Configure OpenFlow management listeners. */
1090     svec_init(&listeners);
1091     cfg_get_all_strings(&listeners, "bridge.%s.openflow.listeners", br->name);
1092     if (!listeners.n) {
1093         svec_add_nocopy(&listeners, xasprintf("punix:%s/%s.mgmt",
1094                                               ovs_rundir, br->name));
1095     } else if (listeners.n == 1 && !strcmp(listeners.names[0], "none")) {
1096         svec_clear(&listeners);
1097     }
1098     svec_sort_unique(&listeners);
1099
1100     svec_init(&old_listeners);
1101     ofproto_get_listeners(br->ofproto, &old_listeners);
1102     svec_sort_unique(&old_listeners);
1103
1104     if (!svec_equal(&listeners, &old_listeners)) {
1105         ofproto_set_listeners(br->ofproto, &listeners);
1106     }
1107     svec_destroy(&listeners);
1108     svec_destroy(&old_listeners);
1109
1110     /* Configure OpenFlow controller connection snooping. */
1111     svec_init(&snoops);
1112     cfg_get_all_strings(&snoops, "bridge.%s.openflow.snoops", br->name);
1113     if (!snoops.n) {
1114         svec_add_nocopy(&snoops, xasprintf("punix:%s/%s.snoop",
1115                                            ovs_rundir, br->name));
1116     } else if (snoops.n == 1 && !strcmp(snoops.names[0], "none")) {
1117         svec_clear(&snoops);
1118     }
1119     svec_sort_unique(&snoops);
1120
1121     svec_init(&old_snoops);
1122     ofproto_get_snoops(br->ofproto, &old_snoops);
1123     svec_sort_unique(&old_snoops);
1124
1125     if (!svec_equal(&snoops, &old_snoops)) {
1126         ofproto_set_snoops(br->ofproto, &snoops);
1127     }
1128     svec_destroy(&snoops);
1129     svec_destroy(&old_snoops);
1130
1131     mirror_reconfigure(br);
1132 }
1133
1134 static void
1135 bridge_reconfigure_controller(struct bridge *br)
1136 {
1137     char *pfx = xasprintf("bridge.%s.controller", br->name);
1138     const char *controller;
1139
1140     controller = bridge_get_controller(br);
1141     if ((br->controller != NULL) != (controller != NULL)) {
1142         ofproto_flush_flows(br->ofproto);
1143     }
1144     free(br->controller);
1145     br->controller = controller ? xstrdup(controller) : NULL;
1146
1147     if (controller) {
1148         const char *fail_mode;
1149         int max_backoff, probe;
1150         int rate_limit, burst_limit;
1151
1152         if (!strcmp(controller, "discover")) {
1153             bool update_resolv_conf = true;
1154
1155             if (cfg_has("%s.update-resolv.conf", pfx)) {
1156                 update_resolv_conf = cfg_get_bool(0, "%s.update-resolv.conf",
1157                         pfx);
1158             }
1159             ofproto_set_discovery(br->ofproto, true,
1160                                   cfg_get_string(0, "%s.accept-regex", pfx),
1161                                   update_resolv_conf);
1162         } else {
1163             char local_name[IF_NAMESIZE];
1164             struct netdev *netdev;
1165             bool in_band;
1166             int error;
1167
1168             in_band = (!cfg_is_valid(CFG_BOOL | CFG_REQUIRED,
1169                                      "%s.in-band", pfx)
1170                        || cfg_get_bool(0, "%s.in-band", pfx));
1171             ofproto_set_discovery(br->ofproto, false, NULL, NULL);
1172             ofproto_set_in_band(br->ofproto, in_band);
1173
1174             error = dpif_port_get_name(br->dpif, ODPP_LOCAL,
1175                                        local_name, sizeof local_name);
1176             if (!error) {
1177                 error = netdev_open(local_name, NETDEV_ETH_TYPE_NONE, &netdev);
1178             }
1179             if (!error) {
1180                 if (cfg_is_valid(CFG_IP | CFG_REQUIRED, "%s.ip", pfx)) {
1181                     struct in_addr ip, mask, gateway;
1182                     ip.s_addr = cfg_get_ip(0, "%s.ip", pfx);
1183                     mask.s_addr = cfg_get_ip(0, "%s.netmask", pfx);
1184                     gateway.s_addr = cfg_get_ip(0, "%s.gateway", pfx);
1185
1186                     netdev_turn_flags_on(netdev, NETDEV_UP, true);
1187                     if (!mask.s_addr) {
1188                         mask.s_addr = guess_netmask(ip.s_addr);
1189                     }
1190                     if (!netdev_set_in4(netdev, ip, mask)) {
1191                         VLOG_INFO("bridge %s: configured IP address "IP_FMT", "
1192                                   "netmask "IP_FMT,
1193                                   br->name, IP_ARGS(&ip.s_addr),
1194                                   IP_ARGS(&mask.s_addr));
1195                     }
1196
1197                     if (gateway.s_addr) {
1198                         if (!netdev_add_router(netdev, gateway)) {
1199                             VLOG_INFO("bridge %s: configured gateway "IP_FMT,
1200                                       br->name, IP_ARGS(&gateway.s_addr));
1201                         }
1202                     }
1203                 }
1204                 netdev_close(netdev);
1205             }
1206         }
1207
1208         fail_mode = cfg_get_string(0, "%s.fail-mode", pfx);
1209         if (!fail_mode) {
1210             fail_mode = cfg_get_string(0, "mgmt.fail-mode");
1211         }
1212         ofproto_set_failure(br->ofproto,
1213                             (!fail_mode
1214                              || !strcmp(fail_mode, "standalone")
1215                              || !strcmp(fail_mode, "open")));
1216
1217         probe = cfg_get_int(0, "%s.inactivity-probe", pfx);
1218         if (probe < 5) {
1219             probe = cfg_get_int(0, "mgmt.inactivity-probe");
1220             if (probe < 5) {
1221                 probe = 15;
1222             }
1223         }
1224         ofproto_set_probe_interval(br->ofproto, probe);
1225
1226         max_backoff = cfg_get_int(0, "%s.max-backoff", pfx);
1227         if (!max_backoff) {
1228             max_backoff = cfg_get_int(0, "mgmt.max-backoff");
1229             if (!max_backoff) {
1230                 max_backoff = 15;
1231             }
1232         }
1233         ofproto_set_max_backoff(br->ofproto, max_backoff);
1234
1235         rate_limit = cfg_get_int(0, "%s.rate-limit", pfx);
1236         if (!rate_limit) {
1237             rate_limit = cfg_get_int(0, "mgmt.rate-limit");
1238         }
1239         burst_limit = cfg_get_int(0, "%s.burst-limit", pfx);
1240         if (!burst_limit) {
1241             burst_limit = cfg_get_int(0, "mgmt.burst-limit");
1242         }
1243         ofproto_set_rate_limit(br->ofproto, rate_limit, burst_limit);
1244
1245         ofproto_set_stp(br->ofproto, cfg_get_bool(0, "%s.stp", pfx));
1246
1247         if (cfg_has("%s.commands.acl", pfx)) {
1248             struct svec command_acls;
1249             char *command_acl;
1250
1251             svec_init(&command_acls);
1252             cfg_get_all_strings(&command_acls, "%s.commands.acl", pfx);
1253             command_acl = svec_join(&command_acls, ",", "");
1254
1255             ofproto_set_remote_execution(br->ofproto, command_acl,
1256                                          cfg_get_string(0, "%s.commands.dir",
1257                                                         pfx));
1258
1259             svec_destroy(&command_acls);
1260             free(command_acl);
1261         } else {
1262             ofproto_set_remote_execution(br->ofproto, NULL, NULL);
1263         }
1264     } else {
1265         union ofp_action action;
1266         flow_t flow;
1267
1268         /* Set up a flow that matches every packet and directs them to
1269          * OFPP_NORMAL (which goes to us). */
1270         memset(&action, 0, sizeof action);
1271         action.type = htons(OFPAT_OUTPUT);
1272         action.output.len = htons(sizeof action);
1273         action.output.port = htons(OFPP_NORMAL);
1274         memset(&flow, 0, sizeof flow);
1275         ofproto_add_flow(br->ofproto, &flow, OFPFW_ALL, 0,
1276                          &action, 1, 0);
1277
1278         ofproto_set_in_band(br->ofproto, false);
1279         ofproto_set_max_backoff(br->ofproto, 1);
1280         ofproto_set_probe_interval(br->ofproto, 5);
1281         ofproto_set_failure(br->ofproto, false);
1282         ofproto_set_stp(br->ofproto, false);
1283     }
1284     free(pfx);
1285
1286     ofproto_set_controller(br->ofproto, br->controller);
1287 }
1288
1289 static void
1290 bridge_get_all_ifaces(const struct bridge *br, struct svec *ifaces)
1291 {
1292     size_t i, j;
1293
1294     svec_init(ifaces);
1295     for (i = 0; i < br->n_ports; i++) {
1296         struct port *port = br->ports[i];
1297         for (j = 0; j < port->n_ifaces; j++) {
1298             struct iface *iface = port->ifaces[j];
1299             svec_add(ifaces, iface->name);
1300         }
1301     }
1302     svec_sort(ifaces);
1303     assert(svec_is_unique(ifaces));
1304 }
1305
1306 /* For robustness, in case the administrator moves around datapath ports behind
1307  * our back, we re-check all the datapath port numbers here.
1308  *
1309  * This function will set the 'dp_ifidx' members of interfaces that have
1310  * disappeared to -1, so only call this function from a context where those
1311  * 'struct iface's will be removed from the bridge.  Otherwise, the -1
1312  * 'dp_ifidx'es will cause trouble later when we try to send them to the
1313  * datapath, which doesn't support UINT16_MAX+1 ports. */
1314 static void
1315 bridge_fetch_dp_ifaces(struct bridge *br)
1316 {
1317     struct odp_port *dpif_ports;
1318     size_t n_dpif_ports;
1319     size_t i, j;
1320
1321     /* Reset all interface numbers. */
1322     for (i = 0; i < br->n_ports; i++) {
1323         struct port *port = br->ports[i];
1324         for (j = 0; j < port->n_ifaces; j++) {
1325             struct iface *iface = port->ifaces[j];
1326             iface->dp_ifidx = -1;
1327         }
1328     }
1329     port_array_clear(&br->ifaces);
1330
1331     dpif_port_list(br->dpif, &dpif_ports, &n_dpif_ports);
1332     for (i = 0; i < n_dpif_ports; i++) {
1333         struct odp_port *p = &dpif_ports[i];
1334         struct iface *iface = iface_lookup(br, p->devname);
1335         if (iface) {
1336             if (iface->dp_ifidx >= 0) {
1337                 VLOG_WARN("%s reported interface %s twice",
1338                           dpif_name(br->dpif), p->devname);
1339             } else if (iface_from_dp_ifidx(br, p->port)) {
1340                 VLOG_WARN("%s reported interface %"PRIu16" twice",
1341                           dpif_name(br->dpif), p->port);
1342             } else {
1343                 port_array_set(&br->ifaces, p->port, iface);
1344                 iface->dp_ifidx = p->port;
1345             }
1346         }
1347     }
1348     free(dpif_ports);
1349 }
1350 \f
1351 /* Bridge packet processing functions. */
1352
1353 static int
1354 bond_hash(const uint8_t mac[ETH_ADDR_LEN])
1355 {
1356     return hash_bytes(mac, ETH_ADDR_LEN, 0) & BOND_MASK;
1357 }
1358
1359 static struct bond_entry *
1360 lookup_bond_entry(const struct port *port, const uint8_t mac[ETH_ADDR_LEN])
1361 {
1362     return &port->bond_hash[bond_hash(mac)];
1363 }
1364
1365 static int
1366 bond_choose_iface(const struct port *port)
1367 {
1368     size_t i;
1369     for (i = 0; i < port->n_ifaces; i++) {
1370         if (port->ifaces[i]->enabled) {
1371             return i;
1372         }
1373     }
1374     return -1;
1375 }
1376
1377 static bool
1378 choose_output_iface(const struct port *port, const uint8_t *dl_src,
1379                     uint16_t *dp_ifidx, tag_type *tags)
1380 {
1381     struct iface *iface;
1382
1383     assert(port->n_ifaces);
1384     if (port->n_ifaces == 1) {
1385         iface = port->ifaces[0];
1386     } else {
1387         struct bond_entry *e = lookup_bond_entry(port, dl_src);
1388         if (e->iface_idx < 0 || e->iface_idx >= port->n_ifaces
1389             || !port->ifaces[e->iface_idx]->enabled) {
1390             /* XXX select interface properly.  The current interface selection
1391              * is only good for testing the rebalancing code. */
1392             e->iface_idx = bond_choose_iface(port);
1393             if (e->iface_idx < 0) {
1394                 *tags |= port->no_ifaces_tag;
1395                 return false;
1396             }
1397             e->iface_tag = tag_create_random();
1398         }
1399         *tags |= e->iface_tag;
1400         iface = port->ifaces[e->iface_idx];
1401     }
1402     *dp_ifidx = iface->dp_ifidx;
1403     *tags |= iface->tag;        /* Currently only used for bonding. */
1404     return true;
1405 }
1406
1407 static void
1408 bond_link_status_update(struct iface *iface, bool carrier)
1409 {
1410     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20);
1411     struct port *port = iface->port;
1412
1413     if ((carrier == iface->enabled) == (iface->delay_expires == LLONG_MAX)) {
1414         /* Nothing to do. */
1415         return;
1416     }
1417     VLOG_INFO_RL(&rl, "interface %s: carrier %s",
1418                  iface->name, carrier ? "detected" : "dropped");
1419     if (carrier == iface->enabled) {
1420         iface->delay_expires = LLONG_MAX;
1421         VLOG_INFO_RL(&rl, "interface %s: will not be %s",
1422                      iface->name, carrier ? "disabled" : "enabled");
1423     } else if (carrier && port->updelay && port->active_iface < 0) {
1424         iface->delay_expires = time_msec();
1425         VLOG_INFO_RL(&rl, "interface %s: skipping %d ms updelay since no "
1426                      "other interface is up", iface->name, port->updelay);
1427     } else {
1428         int delay = carrier ? port->updelay : port->downdelay;
1429         iface->delay_expires = time_msec() + delay;
1430         if (delay) {
1431             VLOG_INFO_RL(&rl,
1432                          "interface %s: will be %s if it stays %s for %d ms",
1433                          iface->name,
1434                          carrier ? "enabled" : "disabled",
1435                          carrier ? "up" : "down",
1436                          delay);
1437         }
1438     }
1439 }
1440
1441 static void
1442 bond_choose_active_iface(struct port *port)
1443 {
1444     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20);
1445
1446     port->active_iface = bond_choose_iface(port);
1447     port->active_iface_tag = tag_create_random();
1448     if (port->active_iface >= 0) {
1449         VLOG_INFO_RL(&rl, "port %s: active interface is now %s",
1450                      port->name, port->ifaces[port->active_iface]->name);
1451     } else {
1452         VLOG_WARN_RL(&rl, "port %s: all ports disabled, no active interface",
1453                      port->name);
1454     }
1455 }
1456
1457 static void
1458 bond_enable_slave(struct iface *iface, bool enable)
1459 {
1460     struct port *port = iface->port;
1461     struct bridge *br = port->bridge;
1462
1463     iface->delay_expires = LLONG_MAX;
1464     if (enable == iface->enabled) {
1465         return;
1466     }
1467
1468     iface->enabled = enable;
1469     if (!iface->enabled) {
1470         VLOG_WARN("interface %s: disabled", iface->name);
1471         ofproto_revalidate(br->ofproto, iface->tag);
1472         if (iface->port_ifidx == port->active_iface) {
1473             ofproto_revalidate(br->ofproto,
1474                                port->active_iface_tag);
1475             bond_choose_active_iface(port);
1476         }
1477         bond_send_learning_packets(port);
1478     } else {
1479         VLOG_WARN("interface %s: enabled", iface->name);
1480         if (port->active_iface < 0) {
1481             ofproto_revalidate(br->ofproto, port->no_ifaces_tag);
1482             bond_choose_active_iface(port);
1483             bond_send_learning_packets(port);
1484         }
1485         iface->tag = tag_create_random();
1486     }
1487 }
1488
1489 static void
1490 bond_run(struct bridge *br)
1491 {
1492     size_t i, j;
1493
1494     for (i = 0; i < br->n_ports; i++) {
1495         struct port *port = br->ports[i];
1496         if (port->n_ifaces < 2) {
1497             continue;
1498         }
1499         for (j = 0; j < port->n_ifaces; j++) {
1500             struct iface *iface = port->ifaces[j];
1501             if (time_msec() >= iface->delay_expires) {
1502                 bond_enable_slave(iface, !iface->enabled);
1503             }
1504         }
1505     }
1506 }
1507
1508 static void
1509 bond_wait(struct bridge *br)
1510 {
1511     size_t i, j;
1512
1513     for (i = 0; i < br->n_ports; i++) {
1514         struct port *port = br->ports[i];
1515         if (port->n_ifaces < 2) {
1516             continue;
1517         }
1518         for (j = 0; j < port->n_ifaces; j++) {
1519             struct iface *iface = port->ifaces[j];
1520             if (iface->delay_expires != LLONG_MAX) {
1521                 poll_timer_wait(iface->delay_expires - time_msec());
1522             }
1523         }
1524     }
1525 }
1526
1527 static bool
1528 set_dst(struct dst *p, const flow_t *flow,
1529         const struct port *in_port, const struct port *out_port,
1530         tag_type *tags)
1531 {
1532     /* STP handling.
1533      *
1534      * XXX This uses too many tags: any broadcast flow will get one tag per
1535      * destination port, and thus a broadcast on a switch of any size is likely
1536      * to have all tag bits set.  We should figure out a way to be smarter.
1537      *
1538      * This is OK when STP is disabled, because stp_state_tag is 0 then. */
1539     *tags |= out_port->stp_state_tag;
1540     if (!(out_port->stp_state & (STP_DISABLED | STP_FORWARDING))) {
1541         return false;
1542     }
1543
1544     p->vlan = (out_port->vlan >= 0 ? OFP_VLAN_NONE
1545               : in_port->vlan >= 0 ? in_port->vlan
1546               : ntohs(flow->dl_vlan));
1547     return choose_output_iface(out_port, flow->dl_src, &p->dp_ifidx, tags);
1548 }
1549
1550 static void
1551 swap_dst(struct dst *p, struct dst *q)
1552 {
1553     struct dst tmp = *p;
1554     *p = *q;
1555     *q = tmp;
1556 }
1557
1558 /* Moves all the dsts with vlan == 'vlan' to the front of the 'n_dsts' in
1559  * 'dsts'.  (This may help performance by reducing the number of VLAN changes
1560  * that we push to the datapath.  We could in fact fully sort the array by
1561  * vlan, but in most cases there are at most two different vlan tags so that's
1562  * possibly overkill.) */
1563 static void
1564 partition_dsts(struct dst *dsts, size_t n_dsts, int vlan)
1565 {
1566     struct dst *first = dsts;
1567     struct dst *last = dsts + n_dsts;
1568
1569     while (first != last) {
1570         /* Invariants:
1571          *      - All dsts < first have vlan == 'vlan'.
1572          *      - All dsts >= last have vlan != 'vlan'.
1573          *      - first < last. */
1574         while (first->vlan == vlan) {
1575             if (++first == last) {
1576                 return;
1577             }
1578         }
1579
1580         /* Same invariants, plus one additional:
1581          *      - first->vlan != vlan.
1582          */
1583         while (last[-1].vlan != vlan) {
1584             if (--last == first) {
1585                 return;
1586             }
1587         }
1588
1589         /* Same invariants, plus one additional:
1590          *      - last[-1].vlan == vlan.*/
1591         swap_dst(first++, --last);
1592     }
1593 }
1594
1595 static int
1596 mirror_mask_ffs(mirror_mask_t mask)
1597 {
1598     BUILD_ASSERT_DECL(sizeof(unsigned int) >= sizeof(mask));
1599     return ffs(mask);
1600 }
1601
1602 static bool
1603 dst_is_duplicate(const struct dst *dsts, size_t n_dsts,
1604                  const struct dst *test)
1605 {
1606     size_t i;
1607     for (i = 0; i < n_dsts; i++) {
1608         if (dsts[i].vlan == test->vlan && dsts[i].dp_ifidx == test->dp_ifidx) {
1609             return true;
1610         }
1611     }
1612     return false;
1613 }
1614
1615 static bool
1616 port_trunks_vlan(const struct port *port, uint16_t vlan)
1617 {
1618     return port->vlan < 0 && bitmap_is_set(port->trunks, vlan);
1619 }
1620
1621 static bool
1622 port_includes_vlan(const struct port *port, uint16_t vlan)
1623 {
1624     return vlan == port->vlan || port_trunks_vlan(port, vlan);
1625 }
1626
1627 static size_t
1628 compose_dsts(const struct bridge *br, const flow_t *flow, uint16_t vlan,
1629              const struct port *in_port, const struct port *out_port,
1630              struct dst dsts[], tag_type *tags)
1631 {
1632     mirror_mask_t mirrors = in_port->src_mirrors;
1633     struct dst *dst = dsts;
1634     size_t i;
1635
1636     *tags |= in_port->stp_state_tag;
1637     if (out_port == FLOOD_PORT) {
1638         /* XXX use ODP_FLOOD if no vlans or bonding. */
1639         /* XXX even better, define each VLAN as a datapath port group */
1640         for (i = 0; i < br->n_ports; i++) {
1641             struct port *port = br->ports[i];
1642             if (port != in_port && port_includes_vlan(port, vlan)
1643                 && !port->is_mirror_output_port
1644                 && set_dst(dst, flow, in_port, port, tags)) {
1645                 mirrors |= port->dst_mirrors;
1646                 dst++;
1647             }
1648         }
1649     } else if (out_port && set_dst(dst, flow, in_port, out_port, tags)) {
1650         mirrors |= out_port->dst_mirrors;
1651         dst++;
1652     }
1653
1654     while (mirrors) {
1655         struct mirror *m = br->mirrors[mirror_mask_ffs(mirrors) - 1];
1656         if (!m->n_vlans || vlan_is_mirrored(m, vlan)) {
1657             if (m->out_port) {
1658                 if (set_dst(dst, flow, in_port, m->out_port, tags)
1659                     && !dst_is_duplicate(dsts, dst - dsts, dst)) {
1660                     dst++;
1661                 }
1662             } else {
1663                 for (i = 0; i < br->n_ports; i++) {
1664                     struct port *port = br->ports[i];
1665                     if (port_includes_vlan(port, m->out_vlan)
1666                         && set_dst(dst, flow, in_port, port, tags)
1667                         && !dst_is_duplicate(dsts, dst - dsts, dst))
1668                     {
1669                         if (port->vlan < 0) {
1670                             dst->vlan = m->out_vlan;
1671                         }
1672                         if (dst->dp_ifidx == flow->in_port
1673                             && dst->vlan == vlan) {
1674                             /* Don't send out input port on same VLAN. */
1675                             continue;
1676                         }
1677                         dst++;
1678                     }
1679                 }
1680             }
1681         }
1682         mirrors &= mirrors - 1;
1683     }
1684
1685     partition_dsts(dsts, dst - dsts, ntohs(flow->dl_vlan));
1686     return dst - dsts;
1687 }
1688
1689 static void UNUSED
1690 print_dsts(const struct dst *dsts, size_t n)
1691 {
1692     for (; n--; dsts++) {
1693         printf(">p%"PRIu16, dsts->dp_ifidx);
1694         if (dsts->vlan != OFP_VLAN_NONE) {
1695             printf("v%"PRIu16, dsts->vlan);
1696         }
1697     }
1698 }
1699
1700 static void
1701 compose_actions(struct bridge *br, const flow_t *flow, uint16_t vlan,
1702                 const struct port *in_port, const struct port *out_port,
1703                 tag_type *tags, struct odp_actions *actions)
1704 {
1705     struct dst dsts[DP_MAX_PORTS * (MAX_MIRRORS + 1)];
1706     size_t n_dsts;
1707     const struct dst *p;
1708     uint16_t cur_vlan;
1709
1710     n_dsts = compose_dsts(br, flow, vlan, in_port, out_port, dsts, tags);
1711
1712     cur_vlan = ntohs(flow->dl_vlan);
1713     for (p = dsts; p < &dsts[n_dsts]; p++) {
1714         union odp_action *a;
1715         if (p->vlan != cur_vlan) {
1716             if (p->vlan == OFP_VLAN_NONE) {
1717                 odp_actions_add(actions, ODPAT_STRIP_VLAN);
1718             } else {
1719                 a = odp_actions_add(actions, ODPAT_SET_VLAN_VID);
1720                 a->vlan_vid.vlan_vid = htons(p->vlan);
1721             }
1722             cur_vlan = p->vlan;
1723         }
1724         a = odp_actions_add(actions, ODPAT_OUTPUT);
1725         a->output.port = p->dp_ifidx;
1726     }
1727 }
1728
1729 static bool
1730 is_bcast_arp_reply(const flow_t *flow, const struct ofpbuf *packet)
1731 {
1732     struct arp_eth_header *arp = (struct arp_eth_header *) packet->data;
1733     return (flow->dl_type == htons(ETH_TYPE_ARP)
1734             && eth_addr_is_broadcast(flow->dl_dst)
1735             && packet->size >= sizeof(struct arp_eth_header)
1736             && arp->ar_op == ARP_OP_REQUEST);
1737 }
1738
1739 /* If the composed actions may be applied to any packet in the given 'flow',
1740  * returns true.  Otherwise, the actions should only be applied to 'packet', or
1741  * not at all, if 'packet' was NULL. */
1742 static bool
1743 process_flow(struct bridge *br, const flow_t *flow,
1744              const struct ofpbuf *packet, struct odp_actions *actions,
1745              tag_type *tags)
1746 {
1747     struct iface *in_iface;
1748     struct port *in_port;
1749     struct port *out_port = NULL; /* By default, drop the packet/flow. */
1750     int vlan;
1751
1752     /* Find the interface and port structure for the received packet. */
1753     in_iface = iface_from_dp_ifidx(br, flow->in_port);
1754     if (!in_iface) {
1755         /* No interface?  Something fishy... */
1756         if (packet != NULL) {
1757             /* Odd.  A few possible reasons here:
1758              *
1759              * - We deleted an interface but there are still a few packets
1760              *   queued up from it.
1761              *
1762              * - Someone externally added an interface (e.g. with "ovs-dpctl
1763              *   add-if") that we don't know about.
1764              *
1765              * - Packet arrived on the local port but the local port is not
1766              *   one of our bridge ports.
1767              */
1768             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
1769
1770             VLOG_WARN_RL(&rl, "bridge %s: received packet on unknown "
1771                          "interface %"PRIu16, br->name, flow->in_port); 
1772         }
1773
1774         /* Return without adding any actions, to drop packets on this flow. */
1775         return true;
1776     }
1777     in_port = in_iface->port;
1778
1779     /* Figure out what VLAN this packet belongs to.
1780      *
1781      * Note that dl_vlan of 0 and of OFP_VLAN_NONE both mean that the packet
1782      * belongs to VLAN 0, so we should treat both cases identically.  (In the
1783      * former case, the packet has an 802.1Q header that specifies VLAN 0,
1784      * presumably to allow a priority to be specified.  In the latter case, the
1785      * packet does not have any 802.1Q header.) */
1786     vlan = ntohs(flow->dl_vlan);
1787     if (vlan == OFP_VLAN_NONE) {
1788         vlan = 0;
1789     }
1790     if (in_port->vlan >= 0) {
1791         if (vlan) {
1792             /* XXX support double tagging? */
1793             if (packet != NULL) {
1794                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
1795                 VLOG_WARN_RL(&rl, "bridge %s: dropping VLAN %"PRIu16" tagged "
1796                              "packet received on port %s configured with "
1797                              "implicit VLAN %"PRIu16,
1798                              br->name, ntohs(flow->dl_vlan),
1799                              in_port->name, in_port->vlan);
1800             }
1801             goto done;
1802         }
1803         vlan = in_port->vlan;
1804     } else {
1805         if (!port_includes_vlan(in_port, vlan)) {
1806             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
1807             VLOG_WARN_RL(&rl, "bridge %s: dropping VLAN %d tagged "
1808                          "packet received on port %s not configured for "
1809                          "trunking VLAN %d",
1810                          br->name, vlan, in_port->name, vlan);
1811             goto done;
1812         }
1813     }
1814
1815     /* Drop frames for ports that STP wants entirely killed (both for
1816      * forwarding and for learning).  Later, after we do learning, we'll drop
1817      * the frames that STP wants to do learning but not forwarding on. */
1818     if (in_port->stp_state & (STP_LISTENING | STP_BLOCKING)) {
1819         goto done;
1820     }
1821
1822     /* Drop frames for reserved multicast addresses. */
1823     if (eth_addr_is_reserved(flow->dl_dst)) {
1824         goto done;
1825     }
1826
1827     /* Drop frames on ports reserved for mirroring. */
1828     if (in_port->is_mirror_output_port) {
1829         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
1830         VLOG_WARN_RL(&rl, "bridge %s: dropping packet received on port %s, "
1831                      "which is reserved exclusively for mirroring",
1832                      br->name, in_port->name);
1833         goto done;
1834     }
1835
1836     /* Multicast (and broadcast) packets on bonds need special attention, to
1837      * avoid receiving duplicates. */
1838     if (in_port->n_ifaces > 1 && eth_addr_is_multicast(flow->dl_dst)) {
1839         *tags |= in_port->active_iface_tag;
1840         if (in_port->active_iface != in_iface->port_ifidx) {
1841             /* Drop all multicast packets on inactive slaves. */
1842             goto done;
1843         } else {
1844             /* Drop all multicast packets for which we have learned a different
1845              * input port, because we probably sent the packet on one slaves
1846              * and got it back on the active slave.  Broadcast ARP replies are
1847              * an exception to this rule: the host has moved to another
1848              * switch. */
1849             int src_idx = mac_learning_lookup(br->ml, flow->dl_src, vlan);
1850             if (src_idx != -1 && src_idx != in_port->port_idx) {
1851                 if (packet) {
1852                     if (!is_bcast_arp_reply(flow, packet)) {
1853                         goto done;
1854                     }
1855                 } else {
1856                     /* No way to know whether it's an ARP reply, because the
1857                      * flow entry doesn't include enough information and we
1858                      * don't have a packet.  Punt. */
1859                     return false;
1860                 }
1861             }
1862         }
1863     }
1864
1865     /* MAC learning. */
1866     out_port = FLOOD_PORT;
1867     if (br->ml) {
1868         int out_port_idx;
1869
1870         /* Learn source MAC (but don't try to learn from revalidation). */
1871         if (packet) {
1872             tag_type rev_tag = mac_learning_learn(br->ml, flow->dl_src,
1873                                                   vlan, in_port->port_idx);
1874             if (rev_tag) {
1875                 /* The log messages here could actually be useful in debugging,
1876                  * so keep the rate limit relatively high. */
1877                 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30,
1878                                                                         300);
1879                 VLOG_DBG_RL(&rl, "bridge %s: learned that "ETH_ADDR_FMT" is "
1880                             "on port %s in VLAN %d",
1881                             br->name, ETH_ADDR_ARGS(flow->dl_src),
1882                             in_port->name, vlan);
1883                 ofproto_revalidate(br->ofproto, rev_tag);
1884             }
1885         }
1886
1887         /* Determine output port. */
1888         out_port_idx = mac_learning_lookup_tag(br->ml, flow->dl_dst, vlan,
1889                                                tags);
1890         if (out_port_idx >= 0 && out_port_idx < br->n_ports) {
1891             out_port = br->ports[out_port_idx];
1892         }
1893     }
1894
1895     /* Don't send packets out their input ports.  Don't forward frames that STP
1896      * wants us to discard. */
1897     if (in_port == out_port || in_port->stp_state == STP_LEARNING) {
1898         out_port = NULL;
1899     }
1900
1901 done:
1902     compose_actions(br, flow, vlan, in_port, out_port, tags, actions);
1903
1904     /*
1905      * We send out only a single packet, instead of setting up a flow, if the
1906      * packet is an ARP directed to broadcast that arrived on a bonded
1907      * interface.  In such a situation ARP requests and replies must be handled
1908      * differently, but OpenFlow unfortunately can't distinguish them.
1909      */
1910     return (in_port->n_ifaces < 2
1911             || flow->dl_type != htons(ETH_TYPE_ARP)
1912             || !eth_addr_is_broadcast(flow->dl_dst));
1913 }
1914
1915 /* Careful: 'opp' is in host byte order and opp->port_no is an OFP port
1916  * number. */
1917 static void
1918 bridge_port_changed_ofhook_cb(enum ofp_port_reason reason,
1919                               const struct ofp_phy_port *opp,
1920                               void *br_)
1921 {
1922     struct bridge *br = br_;
1923     struct iface *iface;
1924     struct port *port;
1925
1926     iface = iface_from_dp_ifidx(br, ofp_port_to_odp_port(opp->port_no));
1927     if (!iface) {
1928         return;
1929     }
1930     port = iface->port;
1931
1932     if (reason == OFPPR_DELETE) {
1933         VLOG_WARN("bridge %s: interface %s deleted unexpectedly",
1934                   br->name, iface->name);
1935         iface_destroy(iface);
1936         if (!port->n_ifaces) {
1937             VLOG_WARN("bridge %s: port %s has no interfaces, dropping",
1938                       br->name, port->name);
1939             port_destroy(port);
1940         }
1941
1942         bridge_flush(br);
1943     } else {
1944         memcpy(iface->mac, opp->hw_addr, ETH_ADDR_LEN);
1945         if (port->n_ifaces > 1) {
1946             bool up = !(opp->state & OFPPS_LINK_DOWN);
1947             bond_link_status_update(iface, up);
1948             port_update_bond_compat(port);
1949         }
1950     }
1951 }
1952
1953 static bool
1954 bridge_normal_ofhook_cb(const flow_t *flow, const struct ofpbuf *packet,
1955                         struct odp_actions *actions, tag_type *tags, void *br_)
1956 {
1957     struct bridge *br = br_;
1958
1959 #if 0
1960     if (flow->dl_type == htons(OFP_DL_TYPE_NOT_ETH_TYPE)
1961         && eth_addr_equals(flow->dl_dst, stp_eth_addr)) {
1962         brstp_receive(br, flow, payload);
1963         return true;
1964     }
1965 #endif
1966
1967     COVERAGE_INC(bridge_process_flow);
1968     return process_flow(br, flow, packet, actions, tags);
1969 }
1970
1971 static void
1972 bridge_account_flow_ofhook_cb(const flow_t *flow,
1973                               const union odp_action *actions,
1974                               size_t n_actions, unsigned long long int n_bytes,
1975                               void *br_)
1976 {
1977     struct bridge *br = br_;
1978     const union odp_action *a;
1979
1980     if (!br->has_bonded_ports) {
1981         return;
1982     }
1983
1984     for (a = actions; a < &actions[n_actions]; a++) {
1985         if (a->type == ODPAT_OUTPUT) {
1986             struct port *port = port_from_dp_ifidx(br, a->output.port);
1987             if (port && port->n_ifaces >= 2) {
1988                 struct bond_entry *e = lookup_bond_entry(port, flow->dl_src);
1989                 e->tx_bytes += n_bytes;
1990             }
1991         }
1992     }
1993 }
1994
1995 static void
1996 bridge_account_checkpoint_ofhook_cb(void *br_)
1997 {
1998     struct bridge *br = br_;
1999     size_t i;
2000
2001     if (!br->has_bonded_ports) {
2002         return;
2003     }
2004
2005     /* The current ofproto implementation calls this callback at least once a
2006      * second, so this timer implementation is sufficient. */
2007     if (time_msec() < br->bond_next_rebalance) {
2008         return;
2009     }
2010     br->bond_next_rebalance = time_msec() + 10000;
2011
2012     for (i = 0; i < br->n_ports; i++) {
2013         struct port *port = br->ports[i];
2014         if (port->n_ifaces > 1) {
2015             bond_rebalance_port(port);
2016         }
2017     }
2018 }
2019
2020 static struct ofhooks bridge_ofhooks = {
2021     bridge_port_changed_ofhook_cb,
2022     bridge_normal_ofhook_cb,
2023     bridge_account_flow_ofhook_cb,
2024     bridge_account_checkpoint_ofhook_cb,
2025 };
2026 \f
2027 /* Bonding functions. */
2028
2029 /* Statistics for a single interface on a bonded port, used for load-based
2030  * bond rebalancing.  */
2031 struct slave_balance {
2032     struct iface *iface;        /* The interface. */
2033     uint64_t tx_bytes;          /* Sum of hashes[*]->tx_bytes. */
2034
2035     /* All the "bond_entry"s that are assigned to this interface, in order of
2036      * increasing tx_bytes. */
2037     struct bond_entry **hashes;
2038     size_t n_hashes;
2039 };
2040
2041 /* Sorts pointers to pointers to bond_entries in ascending order by the
2042  * interface to which they are assigned, and within a single interface in
2043  * ascending order of bytes transmitted. */
2044 static int
2045 compare_bond_entries(const void *a_, const void *b_)
2046 {
2047     const struct bond_entry *const *ap = a_;
2048     const struct bond_entry *const *bp = b_;
2049     const struct bond_entry *a = *ap;
2050     const struct bond_entry *b = *bp;
2051     if (a->iface_idx != b->iface_idx) {
2052         return a->iface_idx > b->iface_idx ? 1 : -1;
2053     } else if (a->tx_bytes != b->tx_bytes) {
2054         return a->tx_bytes > b->tx_bytes ? 1 : -1;
2055     } else {
2056         return 0;
2057     }
2058 }
2059
2060 /* Sorts slave_balances so that enabled ports come first, and otherwise in
2061  * *descending* order by number of bytes transmitted. */
2062 static int
2063 compare_slave_balance(const void *a_, const void *b_)
2064 {
2065     const struct slave_balance *a = a_;
2066     const struct slave_balance *b = b_;
2067     if (a->iface->enabled != b->iface->enabled) {
2068         return a->iface->enabled ? -1 : 1;
2069     } else if (a->tx_bytes != b->tx_bytes) {
2070         return a->tx_bytes > b->tx_bytes ? -1 : 1;
2071     } else {
2072         return 0;
2073     }
2074 }
2075
2076 static void
2077 swap_bals(struct slave_balance *a, struct slave_balance *b)
2078 {
2079     struct slave_balance tmp = *a;
2080     *a = *b;
2081     *b = tmp;
2082 }
2083
2084 /* Restores the 'n_bals' slave_balance structures in 'bals' to sorted order
2085  * given that 'p' (and only 'p') might be in the wrong location.
2086  *
2087  * This function invalidates 'p', since it might now be in a different memory
2088  * location. */
2089 static void
2090 resort_bals(struct slave_balance *p,
2091             struct slave_balance bals[], size_t n_bals)
2092 {
2093     if (n_bals > 1) {
2094         for (; p > bals && p->tx_bytes > p[-1].tx_bytes; p--) {
2095             swap_bals(p, p - 1);
2096         }
2097         for (; p < &bals[n_bals - 1] && p->tx_bytes < p[1].tx_bytes; p++) {
2098             swap_bals(p, p + 1);
2099         }
2100     }
2101 }
2102
2103 static void
2104 log_bals(const struct slave_balance *bals, size_t n_bals, struct port *port)
2105 {
2106     if (VLOG_IS_DBG_ENABLED()) {
2107         struct ds ds = DS_EMPTY_INITIALIZER;
2108         const struct slave_balance *b;
2109
2110         for (b = bals; b < bals + n_bals; b++) {
2111             size_t i;
2112
2113             if (b > bals) {
2114                 ds_put_char(&ds, ',');
2115             }
2116             ds_put_format(&ds, " %s %"PRIu64"kB",
2117                           b->iface->name, b->tx_bytes / 1024);
2118
2119             if (!b->iface->enabled) {
2120                 ds_put_cstr(&ds, " (disabled)");
2121             }
2122             if (b->n_hashes > 0) {
2123                 ds_put_cstr(&ds, " (");
2124                 for (i = 0; i < b->n_hashes; i++) {
2125                     const struct bond_entry *e = b->hashes[i];
2126                     if (i > 0) {
2127                         ds_put_cstr(&ds, " + ");
2128                     }
2129                     ds_put_format(&ds, "h%td: %"PRIu64"kB",
2130                                   e - port->bond_hash, e->tx_bytes / 1024);
2131                 }
2132                 ds_put_cstr(&ds, ")");
2133             }
2134         }
2135         VLOG_DBG("bond %s:%s", port->name, ds_cstr(&ds));
2136         ds_destroy(&ds);
2137     }
2138 }
2139
2140 /* Shifts 'hash' from 'from' to 'to' within 'port'. */
2141 static void
2142 bond_shift_load(struct slave_balance *from, struct slave_balance *to,
2143                 struct bond_entry *hash)
2144 {
2145     struct port *port = from->iface->port;
2146     uint64_t delta = hash->tx_bytes;
2147
2148     VLOG_INFO("bond %s: shift %"PRIu64"kB of load (with hash %td) "
2149               "from %s to %s (now carrying %"PRIu64"kB and "
2150               "%"PRIu64"kB load, respectively)",
2151               port->name, delta / 1024, hash - port->bond_hash,
2152               from->iface->name, to->iface->name,
2153               (from->tx_bytes - delta) / 1024,
2154               (to->tx_bytes + delta) / 1024);
2155
2156     /* Delete element from from->hashes.
2157      *
2158      * We don't bother to add the element to to->hashes because not only would
2159      * it require more work, the only purpose it would be to allow that hash to
2160      * be migrated to another slave in this rebalancing run, and there is no
2161      * point in doing that.  */
2162     if (from->hashes[0] == hash) {
2163         from->hashes++;
2164     } else {
2165         int i = hash - from->hashes[0];
2166         memmove(from->hashes + i, from->hashes + i + 1,
2167                 (from->n_hashes - (i + 1)) * sizeof *from->hashes);
2168     }
2169     from->n_hashes--;
2170
2171     /* Shift load away from 'from' to 'to'. */
2172     from->tx_bytes -= delta;
2173     to->tx_bytes += delta;
2174
2175     /* Arrange for flows to be revalidated. */
2176     ofproto_revalidate(port->bridge->ofproto, hash->iface_tag);
2177     hash->iface_idx = to->iface->port_ifidx;
2178     hash->iface_tag = tag_create_random();
2179 }
2180
2181 static void
2182 bond_rebalance_port(struct port *port)
2183 {
2184     struct slave_balance bals[DP_MAX_PORTS];
2185     size_t n_bals;
2186     struct bond_entry *hashes[BOND_MASK + 1];
2187     struct slave_balance *b, *from, *to;
2188     struct bond_entry *e;
2189     size_t i;
2190
2191     /* Sets up 'bals' to describe each of the port's interfaces, sorted in
2192      * descending order of tx_bytes, so that bals[0] represents the most
2193      * heavily loaded slave and bals[n_bals - 1] represents the least heavily
2194      * loaded slave.
2195      *
2196      * The code is a bit tricky: to avoid dynamically allocating a 'hashes'
2197      * array for each slave_balance structure, we sort our local array of
2198      * hashes in order by slave, so that all of the hashes for a given slave
2199      * become contiguous in memory, and then we point each 'hashes' members of
2200      * a slave_balance structure to the start of a contiguous group. */
2201     n_bals = port->n_ifaces;
2202     for (b = bals; b < &bals[n_bals]; b++) {
2203         b->iface = port->ifaces[b - bals];
2204         b->tx_bytes = 0;
2205         b->hashes = NULL;
2206         b->n_hashes = 0;
2207     }
2208     for (i = 0; i <= BOND_MASK; i++) {
2209         hashes[i] = &port->bond_hash[i];
2210     }
2211     qsort(hashes, BOND_MASK + 1, sizeof *hashes, compare_bond_entries);
2212     for (i = 0; i <= BOND_MASK; i++) {
2213         e = hashes[i];
2214         if (e->iface_idx >= 0 && e->iface_idx < port->n_ifaces) {
2215             b = &bals[e->iface_idx];
2216             b->tx_bytes += e->tx_bytes;
2217             if (!b->hashes) {
2218                 b->hashes = &hashes[i];
2219             }
2220             b->n_hashes++;
2221         }
2222     }
2223     qsort(bals, n_bals, sizeof *bals, compare_slave_balance);
2224     log_bals(bals, n_bals, port);
2225
2226     /* Discard slaves that aren't enabled (which were sorted to the back of the
2227      * array earlier). */
2228     while (!bals[n_bals - 1].iface->enabled) {
2229         n_bals--;
2230         if (!n_bals) {
2231             return;
2232         }
2233     }
2234
2235     /* Shift load from the most-loaded slaves to the least-loaded slaves. */
2236     to = &bals[n_bals - 1];
2237     for (from = bals; from < to; ) {
2238         uint64_t overload = from->tx_bytes - to->tx_bytes;
2239         if (overload < to->tx_bytes >> 5 || overload < 100000) {
2240             /* The extra load on 'from' (and all less-loaded slaves), compared
2241              * to that of 'to' (the least-loaded slave), is less than ~3%, or
2242              * it is less than ~1Mbps.  No point in rebalancing. */
2243             break;
2244         } else if (from->n_hashes == 1) {
2245             /* 'from' only carries a single MAC hash, so we can't shift any
2246              * load away from it, even though we want to. */
2247             from++;
2248         } else {
2249             /* 'from' is carrying significantly more load than 'to', and that
2250              * load is split across at least two different hashes.  Pick a hash
2251              * to migrate to 'to' (the least-loaded slave), given that doing so
2252              * must not cause 'to''s load to exceed 'from''s load.
2253              *
2254              * The sort order we use means that we prefer to shift away the
2255              * smallest hashes instead of the biggest ones.  There is little
2256              * reason behind this decision; we could use the opposite sort
2257              * order to shift away big hashes ahead of small ones. */
2258             size_t i;
2259
2260             for (i = 0; i < from->n_hashes; i++) {
2261                 uint64_t delta = from->hashes[i]->tx_bytes;
2262                 if (to->tx_bytes + delta < from->tx_bytes - delta) {
2263                     break;
2264                 }
2265             }
2266             if (i < from->n_hashes) {
2267                 bond_shift_load(from, to, from->hashes[i]);
2268
2269                 /* Re-sort 'bals'.  Note that this may make 'from' and 'to'
2270                  * point to different slave_balance structures.  It is only
2271                  * valid to do these two operations in a row at all because we
2272                  * know that 'from' will not move past 'to' and vice versa. */
2273                 resort_bals(from, bals, n_bals);
2274                 resort_bals(to, bals, n_bals);
2275             } else {
2276                 from++;
2277             }
2278         }
2279     }
2280
2281     /* Implement exponentially weighted moving average.  A weight of 1/2 causes
2282      * historical data to decay to <1% in 7 rebalancing runs.  */
2283     for (e = &port->bond_hash[0]; e <= &port->bond_hash[BOND_MASK]; e++) {
2284         e->tx_bytes /= 2;
2285     }
2286 }
2287
2288 static void
2289 bond_send_learning_packets(struct port *port)
2290 {
2291     struct bridge *br = port->bridge;
2292     struct mac_entry *e;
2293     struct ofpbuf packet;
2294     int error, n_packets, n_errors;
2295
2296     if (!port->n_ifaces || port->active_iface < 0 || !br->ml) {
2297         return;
2298     }
2299
2300     ofpbuf_init(&packet, 128);
2301     error = n_packets = n_errors = 0;
2302     LIST_FOR_EACH (e, struct mac_entry, lru_node, &br->ml->lrus) {
2303         static const char s[] = "Open vSwitch Bond Failover";
2304         union ofp_action actions[2], *a;
2305         struct eth_header *eth;
2306         struct llc_snap_header *llc_snap;
2307         uint16_t dp_ifidx;
2308         tag_type tags = 0;
2309         flow_t flow;
2310         int retval;
2311
2312         if (e->port == port->port_idx
2313             || !choose_output_iface(port, e->mac, &dp_ifidx, &tags)) {
2314             continue;
2315         }
2316
2317         /* Compose packet to send. */
2318         ofpbuf_clear(&packet);
2319         eth = ofpbuf_put_zeros(&packet, ETH_HEADER_LEN);
2320         llc_snap = ofpbuf_put_zeros(&packet, LLC_SNAP_HEADER_LEN);
2321         ofpbuf_put(&packet, s, sizeof s); /* Includes null byte. */
2322         ofpbuf_put(&packet, e->mac, ETH_ADDR_LEN);
2323
2324         memcpy(eth->eth_dst, eth_addr_broadcast, ETH_ADDR_LEN);
2325         memcpy(eth->eth_src, e->mac, ETH_ADDR_LEN);
2326         eth->eth_type = htons(packet.size - ETH_HEADER_LEN);
2327
2328         llc_snap->llc.llc_dsap = LLC_DSAP_SNAP;
2329         llc_snap->llc.llc_ssap = LLC_SSAP_SNAP;
2330         llc_snap->llc.llc_cntl = LLC_CNTL_SNAP;
2331         memcpy(llc_snap->snap.snap_org, "\x00\x23\x20", 3);
2332         llc_snap->snap.snap_type = htons(0xf177); /* Random number. */
2333
2334         /* Compose actions. */
2335         memset(actions, 0, sizeof actions);
2336         a = actions;
2337         if (e->vlan) {
2338             a->vlan_vid.type = htons(OFPAT_SET_VLAN_VID);
2339             a->vlan_vid.len = htons(sizeof *a);
2340             a->vlan_vid.vlan_vid = htons(e->vlan);
2341             a++;
2342         }
2343         a->output.type = htons(OFPAT_OUTPUT);
2344         a->output.len = htons(sizeof *a);
2345         a->output.port = htons(odp_port_to_ofp_port(dp_ifidx));
2346         a++;
2347
2348         /* Send packet. */
2349         n_packets++;
2350         flow_extract(&packet, ODPP_NONE, &flow);
2351         retval = ofproto_send_packet(br->ofproto, &flow, actions, a - actions,
2352                                      &packet);
2353         if (retval) {
2354             error = retval;
2355             n_errors++;
2356         }
2357     }
2358     ofpbuf_uninit(&packet);
2359
2360     if (n_errors) {
2361         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
2362         VLOG_WARN_RL(&rl, "bond %s: %d errors sending %d gratuitous learning "
2363                      "packets, last error was: %s",
2364                      port->name, n_errors, n_packets, strerror(error));
2365     } else {
2366         VLOG_DBG("bond %s: sent %d gratuitous learning packets",
2367                  port->name, n_packets);
2368     }
2369 }
2370 \f
2371 /* Bonding unixctl user interface functions. */
2372
2373 static void
2374 bond_unixctl_list(struct unixctl_conn *conn, const char *args UNUSED)
2375 {
2376     struct ds ds = DS_EMPTY_INITIALIZER;
2377     const struct bridge *br;
2378
2379     ds_put_cstr(&ds, "bridge\tbond\tslaves\n");
2380
2381     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
2382         size_t i;
2383
2384         for (i = 0; i < br->n_ports; i++) {
2385             const struct port *port = br->ports[i];
2386             if (port->n_ifaces > 1) {
2387                 size_t j;
2388
2389                 ds_put_format(&ds, "%s\t%s\t", br->name, port->name);
2390                 for (j = 0; j < port->n_ifaces; j++) {
2391                     const struct iface *iface = port->ifaces[j];
2392                     if (j) {
2393                         ds_put_cstr(&ds, ", ");
2394                     }
2395                     ds_put_cstr(&ds, iface->name);
2396                 }
2397                 ds_put_char(&ds, '\n');
2398             }
2399         }
2400     }
2401     unixctl_command_reply(conn, 200, ds_cstr(&ds));
2402     ds_destroy(&ds);
2403 }
2404
2405 static struct port *
2406 bond_find(const char *name)
2407 {
2408     const struct bridge *br;
2409
2410     LIST_FOR_EACH (br, struct bridge, node, &all_bridges) {
2411         size_t i;
2412
2413         for (i = 0; i < br->n_ports; i++) {
2414             struct port *port = br->ports[i];
2415             if (!strcmp(port->name, name) && port->n_ifaces > 1) {
2416                 return port;
2417             }
2418         }
2419     }
2420     return NULL;
2421 }
2422
2423 static void
2424 bond_unixctl_show(struct unixctl_conn *conn, const char *args)
2425 {
2426     struct ds ds = DS_EMPTY_INITIALIZER;
2427     const struct port *port;
2428     size_t j;
2429
2430     port = bond_find(args);
2431     if (!port) {
2432         unixctl_command_reply(conn, 501, "no such bond");
2433         return;
2434     }
2435
2436     ds_put_format(&ds, "updelay: %d ms\n", port->updelay);
2437     ds_put_format(&ds, "downdelay: %d ms\n", port->downdelay);
2438     ds_put_format(&ds, "next rebalance: %lld ms\n",
2439                   port->bridge->bond_next_rebalance - time_msec());
2440     for (j = 0; j < port->n_ifaces; j++) {
2441         const struct iface *iface = port->ifaces[j];
2442         struct bond_entry *be;
2443
2444         /* Basic info. */
2445         ds_put_format(&ds, "slave %s: %s\n",
2446                       iface->name, iface->enabled ? "enabled" : "disabled");
2447         if (j == port->active_iface) {
2448             ds_put_cstr(&ds, "\tactive slave\n");
2449         }
2450         if (iface->delay_expires != LLONG_MAX) {
2451             ds_put_format(&ds, "\t%s expires in %lld ms\n",
2452                           iface->enabled ? "downdelay" : "updelay",
2453                           iface->delay_expires - time_msec());
2454         }
2455
2456         /* Hashes. */
2457         for (be = port->bond_hash; be <= &port->bond_hash[BOND_MASK]; be++) {
2458             int hash = be - port->bond_hash;
2459             struct mac_entry *me;
2460
2461             if (be->iface_idx != j) {
2462                 continue;
2463             }
2464
2465             ds_put_format(&ds, "\thash %d: %lld kB load\n",
2466                           hash, be->tx_bytes / 1024);
2467
2468             /* MACs. */
2469             if (!port->bridge->ml) {
2470                 break;
2471             }
2472
2473             LIST_FOR_EACH (me, struct mac_entry, lru_node,
2474                            &port->bridge->ml->lrus) {
2475                 uint16_t dp_ifidx;
2476                 tag_type tags = 0;
2477                 if (bond_hash(me->mac) == hash
2478                     && me->port != port->port_idx
2479                     && choose_output_iface(port, me->mac, &dp_ifidx, &tags)
2480                     && dp_ifidx == iface->dp_ifidx)
2481                 {
2482                     ds_put_format(&ds, "\t\t"ETH_ADDR_FMT"\n",
2483                                   ETH_ADDR_ARGS(me->mac));
2484                 }
2485             }
2486         }
2487     }
2488     unixctl_command_reply(conn, 200, ds_cstr(&ds));
2489     ds_destroy(&ds);
2490 }
2491
2492 static void
2493 bond_unixctl_migrate(struct unixctl_conn *conn, const char *args_)
2494 {
2495     char *args = (char *) args_;
2496     char *save_ptr = NULL;
2497     char *bond_s, *hash_s, *slave_s;
2498     uint8_t mac[ETH_ADDR_LEN];
2499     struct port *port;
2500     struct iface *iface;
2501     struct bond_entry *entry;
2502     int hash;
2503
2504     bond_s = strtok_r(args, " ", &save_ptr);
2505     hash_s = strtok_r(NULL, " ", &save_ptr);
2506     slave_s = strtok_r(NULL, " ", &save_ptr);
2507     if (!slave_s) {
2508         unixctl_command_reply(conn, 501,
2509                               "usage: bond/migrate BOND HASH SLAVE");
2510         return;
2511     }
2512
2513     port = bond_find(bond_s);
2514     if (!port) {
2515         unixctl_command_reply(conn, 501, "no such bond");
2516         return;
2517     }
2518
2519     if (sscanf(hash_s, ETH_ADDR_SCAN_FMT, ETH_ADDR_SCAN_ARGS(mac))
2520         == ETH_ADDR_SCAN_COUNT) {
2521         hash = bond_hash(mac);
2522     } else if (strspn(hash_s, "0123456789") == strlen(hash_s)) {
2523         hash = atoi(hash_s) & BOND_MASK;
2524     } else {
2525         unixctl_command_reply(conn, 501, "bad hash");
2526         return;
2527     }
2528
2529     iface = port_lookup_iface(port, slave_s);
2530     if (!iface) {
2531         unixctl_command_reply(conn, 501, "no such slave");
2532         return;
2533     }
2534
2535     if (!iface->enabled) {
2536         unixctl_command_reply(conn, 501, "cannot migrate to disabled slave");
2537         return;
2538     }
2539
2540     entry = &port->bond_hash[hash];
2541     ofproto_revalidate(port->bridge->ofproto, entry->iface_tag);
2542     entry->iface_idx = iface->port_ifidx;
2543     entry->iface_tag = tag_create_random();
2544     unixctl_command_reply(conn, 200, "migrated");
2545 }
2546
2547 static void
2548 bond_unixctl_set_active_slave(struct unixctl_conn *conn, const char *args_)
2549 {
2550     char *args = (char *) args_;
2551     char *save_ptr = NULL;
2552     char *bond_s, *slave_s;
2553     struct port *port;
2554     struct iface *iface;
2555
2556     bond_s = strtok_r(args, " ", &save_ptr);
2557     slave_s = strtok_r(NULL, " ", &save_ptr);
2558     if (!slave_s) {
2559         unixctl_command_reply(conn, 501,
2560                               "usage: bond/set-active-slave BOND SLAVE");
2561         return;
2562     }
2563
2564     port = bond_find(bond_s);
2565     if (!port) {
2566         unixctl_command_reply(conn, 501, "no such bond");
2567         return;
2568     }
2569
2570     iface = port_lookup_iface(port, slave_s);
2571     if (!iface) {
2572         unixctl_command_reply(conn, 501, "no such slave");
2573         return;
2574     }
2575
2576     if (!iface->enabled) {
2577         unixctl_command_reply(conn, 501, "cannot make disabled slave active");
2578         return;
2579     }
2580
2581     if (port->active_iface != iface->port_ifidx) {
2582         ofproto_revalidate(port->bridge->ofproto, port->active_iface_tag);
2583         port->active_iface = iface->port_ifidx;
2584         port->active_iface_tag = tag_create_random();
2585         VLOG_INFO("port %s: active interface is now %s",
2586                   port->name, iface->name);
2587         bond_send_learning_packets(port);
2588         unixctl_command_reply(conn, 200, "done");
2589     } else {
2590         unixctl_command_reply(conn, 200, "no change");
2591     }
2592 }
2593
2594 static void
2595 enable_slave(struct unixctl_conn *conn, const char *args_, bool enable)
2596 {
2597     char *args = (char *) args_;
2598     char *save_ptr = NULL;
2599     char *bond_s, *slave_s;
2600     struct port *port;
2601     struct iface *iface;
2602
2603     bond_s = strtok_r(args, " ", &save_ptr);
2604     slave_s = strtok_r(NULL, " ", &save_ptr);
2605     if (!slave_s) {
2606         unixctl_command_reply(conn, 501,
2607                               "usage: bond/enable/disable-slave BOND SLAVE");
2608         return;
2609     }
2610
2611     port = bond_find(bond_s);
2612     if (!port) {
2613         unixctl_command_reply(conn, 501, "no such bond");
2614         return;
2615     }
2616
2617     iface = port_lookup_iface(port, slave_s);
2618     if (!iface) {
2619         unixctl_command_reply(conn, 501, "no such slave");
2620         return;
2621     }
2622
2623     bond_enable_slave(iface, enable);
2624     unixctl_command_reply(conn, 501, enable ? "enabled" : "disabled");
2625 }
2626
2627 static void
2628 bond_unixctl_enable_slave(struct unixctl_conn *conn, const char *args)
2629 {
2630     enable_slave(conn, args, true);
2631 }
2632
2633 static void
2634 bond_unixctl_disable_slave(struct unixctl_conn *conn, const char *args)
2635 {
2636     enable_slave(conn, args, false);
2637 }
2638
2639 static void
2640 bond_init(void)
2641 {
2642     unixctl_command_register("bond/list", bond_unixctl_list);
2643     unixctl_command_register("bond/show", bond_unixctl_show);
2644     unixctl_command_register("bond/migrate", bond_unixctl_migrate);
2645     unixctl_command_register("bond/set-active-slave",
2646                              bond_unixctl_set_active_slave);
2647     unixctl_command_register("bond/enable-slave", bond_unixctl_enable_slave);
2648     unixctl_command_register("bond/disable-slave", bond_unixctl_disable_slave);
2649 }
2650 \f
2651 /* Port functions. */
2652
2653 static void
2654 port_create(struct bridge *br, const char *name)
2655 {
2656     struct port *port;
2657
2658     port = xcalloc(1, sizeof *port);
2659     port->bridge = br;
2660     port->port_idx = br->n_ports;
2661     port->vlan = -1;
2662     port->trunks = NULL;
2663     port->name = xstrdup(name);
2664     port->active_iface = -1;
2665     port->stp_state = STP_DISABLED;
2666     port->stp_state_tag = 0;
2667
2668     if (br->n_ports >= br->allocated_ports) {
2669         br->ports = x2nrealloc(br->ports, &br->allocated_ports,
2670                                sizeof *br->ports);
2671     }
2672     br->ports[br->n_ports++] = port;
2673
2674     VLOG_INFO("created port %s on bridge %s", port->name, br->name);
2675     bridge_flush(br);
2676 }
2677
2678 static void
2679 port_reconfigure(struct port *port)
2680 {
2681     bool bonded = cfg_has_section("bonding.%s", port->name);
2682     struct svec old_ifaces, new_ifaces;
2683     unsigned long *trunks;
2684     int vlan;
2685     size_t i;
2686
2687     /* Collect old and new interfaces. */
2688     svec_init(&old_ifaces);
2689     svec_init(&new_ifaces);
2690     for (i = 0; i < port->n_ifaces; i++) {
2691         svec_add(&old_ifaces, port->ifaces[i]->name);
2692     }
2693     svec_sort(&old_ifaces);
2694     if (bonded) {
2695         cfg_get_all_keys(&new_ifaces, "bonding.%s.slave", port->name);
2696         if (!new_ifaces.n) {
2697             VLOG_ERR("port %s: no interfaces specified for bonded port",
2698                      port->name);
2699         } else if (new_ifaces.n == 1) {
2700             VLOG_WARN("port %s: only 1 interface specified for bonded port",
2701                       port->name);
2702         }
2703
2704         port->updelay = cfg_get_int(0, "bonding.%s.updelay", port->name);
2705         if (port->updelay < 0) {
2706             port->updelay = 0;
2707         }
2708         port->downdelay = cfg_get_int(0, "bonding.%s.downdelay", port->name);
2709         if (port->downdelay < 0) {
2710             port->downdelay = 0;
2711         }
2712     } else {
2713         svec_init(&new_ifaces);
2714         svec_add(&new_ifaces, port->name);
2715     }
2716
2717     /* Get rid of deleted interfaces and add new interfaces. */
2718     for (i = 0; i < port->n_ifaces; i++) {
2719         struct iface *iface = port->ifaces[i];
2720         if (!svec_contains(&new_ifaces, iface->name)) {
2721             iface_destroy(iface);
2722         } else {
2723             i++;
2724         }
2725     }
2726     for (i = 0; i < new_ifaces.n; i++) {
2727         const char *name = new_ifaces.names[i];
2728         if (!svec_contains(&old_ifaces, name)) {
2729             iface_create(port, name);
2730         }
2731     }
2732
2733     /* Get VLAN tag. */
2734     vlan = -1;
2735     if (cfg_has("vlan.%s.tag", port->name)) {
2736         if (!bonded) {
2737             vlan = cfg_get_vlan(0, "vlan.%s.tag", port->name);
2738             if (vlan >= 0 && vlan <= 4095) {
2739                 VLOG_DBG("port %s: assigning VLAN tag %d", port->name, vlan);
2740             }
2741         } else {
2742             /* It's possible that bonded, VLAN-tagged ports make sense.  Maybe
2743              * they even work as-is.  But they have not been tested. */
2744             VLOG_WARN("port %s: VLAN tags not supported on bonded ports",
2745                       port->name);
2746         }
2747     }
2748     if (port->vlan != vlan) {
2749         port->vlan = vlan;
2750         bridge_flush(port->bridge);
2751     }
2752
2753     /* Get trunked VLANs. */
2754     trunks = NULL;
2755     if (vlan < 0) {
2756         size_t n_trunks, n_errors;
2757         size_t i;
2758
2759         trunks = bitmap_allocate(4096);
2760         n_trunks = cfg_count("vlan.%s.trunks", port->name);
2761         n_errors = 0;
2762         for (i = 0; i < n_trunks; i++) {
2763             int trunk = cfg_get_vlan(i, "vlan.%s.trunks", port->name);
2764             if (trunk >= 0) {
2765                 bitmap_set1(trunks, trunk);
2766             } else {
2767                 n_errors++;
2768             }
2769         }
2770         if (n_errors) {
2771             VLOG_ERR("port %s: invalid values for %zu trunk VLANs",
2772                      port->name, n_trunks);
2773         }
2774         if (n_errors == n_trunks) {
2775             if (n_errors) {
2776                 VLOG_ERR("port %s: no valid trunks, trunking all VLANs",
2777                          port->name);
2778             }
2779             bitmap_set_multiple(trunks, 0, 4096, 1);
2780         }
2781     } else {
2782         if (cfg_has("vlan.%s.trunks", port->name)) {
2783             VLOG_ERR("ignoring vlan.%s.trunks in favor of vlan.%s.vlan",
2784                      port->name, port->name);
2785         }
2786     }
2787     if (trunks == NULL
2788         ? port->trunks != NULL
2789         : port->trunks == NULL || !bitmap_equal(trunks, port->trunks, 4096)) {
2790         bridge_flush(port->bridge);
2791     }
2792     bitmap_free(port->trunks);
2793     port->trunks = trunks;
2794
2795     svec_destroy(&old_ifaces);
2796     svec_destroy(&new_ifaces);
2797 }
2798
2799 static void
2800 port_destroy(struct port *port)
2801 {
2802     if (port) {
2803         struct bridge *br = port->bridge;
2804         struct port *del;
2805         size_t i;
2806
2807         proc_net_compat_update_vlan(port->name, NULL, 0);
2808
2809         for (i = 0; i < MAX_MIRRORS; i++) {
2810             struct mirror *m = br->mirrors[i];
2811             if (m && m->out_port == port) {
2812                 mirror_destroy(m);
2813             }
2814         }
2815
2816         while (port->n_ifaces > 0) {
2817             iface_destroy(port->ifaces[port->n_ifaces - 1]);
2818         }
2819
2820         del = br->ports[port->port_idx] = br->ports[--br->n_ports];
2821         del->port_idx = port->port_idx;
2822
2823         free(port->ifaces);
2824         bitmap_free(port->trunks);
2825         free(port->name);
2826         free(port);
2827         bridge_flush(br);
2828     }
2829 }
2830
2831 static struct port *
2832 port_from_dp_ifidx(const struct bridge *br, uint16_t dp_ifidx)
2833 {
2834     struct iface *iface = iface_from_dp_ifidx(br, dp_ifidx);
2835     return iface ? iface->port : NULL;
2836 }
2837
2838 static struct port *
2839 port_lookup(const struct bridge *br, const char *name)
2840 {
2841     size_t i;
2842
2843     for (i = 0; i < br->n_ports; i++) {
2844         struct port *port = br->ports[i];
2845         if (!strcmp(port->name, name)) {
2846             return port;
2847         }
2848     }
2849     return NULL;
2850 }
2851
2852 static struct iface *
2853 port_lookup_iface(const struct port *port, const char *name)
2854 {
2855     size_t j;
2856
2857     for (j = 0; j < port->n_ifaces; j++) {
2858         struct iface *iface = port->ifaces[j];
2859         if (!strcmp(iface->name, name)) {
2860             return iface;
2861         }
2862     }
2863     return NULL;
2864 }
2865
2866 static void
2867 port_update_bonding(struct port *port)
2868 {
2869     if (port->n_ifaces < 2) {
2870         /* Not a bonded port. */
2871         if (port->bond_hash) {
2872             free(port->bond_hash);
2873             port->bond_hash = NULL;
2874             proc_net_compat_update_bond(port->name, NULL);
2875         }
2876     } else {
2877         if (!port->bond_hash) {
2878             size_t i;
2879
2880             port->bond_hash = xcalloc(BOND_MASK + 1, sizeof *port->bond_hash);
2881             for (i = 0; i <= BOND_MASK; i++) {
2882                 struct bond_entry *e = &port->bond_hash[i];
2883                 e->iface_idx = -1;
2884                 e->tx_bytes = 0;
2885             }
2886             port->no_ifaces_tag = tag_create_random();
2887             bond_choose_active_iface(port);
2888         }
2889         port_update_bond_compat(port);
2890     }
2891 }
2892
2893 static void
2894 port_update_bond_compat(struct port *port)
2895 {
2896     struct compat_bond bond;
2897     size_t i;
2898
2899     if (port->n_ifaces < 2) {
2900         return;
2901     }
2902
2903     bond.up = false;
2904     bond.updelay = port->updelay;
2905     bond.downdelay = port->downdelay;
2906     bond.n_slaves = port->n_ifaces;
2907     bond.slaves = xmalloc(port->n_ifaces * sizeof *bond.slaves);
2908     for (i = 0; i < port->n_ifaces; i++) {
2909         struct iface *iface = port->ifaces[i];
2910         struct compat_bond_slave *slave = &bond.slaves[i];
2911         slave->name = iface->name;
2912         slave->up = ((iface->enabled && iface->delay_expires == LLONG_MAX) ||
2913                      (!iface->enabled && iface->delay_expires != LLONG_MAX));
2914         if (slave->up) {
2915             bond.up = true;
2916         }
2917         memcpy(slave->mac, iface->mac, ETH_ADDR_LEN);
2918     }
2919     proc_net_compat_update_bond(port->name, &bond);
2920     free(bond.slaves);
2921 }
2922
2923 static void
2924 port_update_vlan_compat(struct port *port)
2925 {
2926     struct bridge *br = port->bridge;
2927     char *vlandev_name = NULL;
2928
2929     if (port->vlan > 0) {
2930         /* Figure out the name that the VLAN device should actually have, if it
2931          * existed.  This takes some work because the VLAN device would not
2932          * have port->name in its name; rather, it would have the trunk port's
2933          * name, and 'port' would be attached to a bridge that also had the
2934          * VLAN device one of its ports.  So we need to find a trunk port that
2935          * includes port->vlan.
2936          *
2937          * There might be more than one candidate.  This doesn't happen on
2938          * XenServer, so if it happens we just pick the first choice in
2939          * alphabetical order instead of creating multiple VLAN devices. */
2940         size_t i;
2941         for (i = 0; i < br->n_ports; i++) {
2942             struct port *p = br->ports[i];
2943             if (port_trunks_vlan(p, port->vlan)
2944                 && p->n_ifaces
2945                 && (!vlandev_name || strcmp(p->name, vlandev_name) <= 0))
2946             {
2947                 const uint8_t *ea = p->ifaces[0]->mac;
2948                 if (!eth_addr_is_multicast(ea) &&
2949                     !eth_addr_is_reserved(ea) &&
2950                     !eth_addr_is_zero(ea)) {
2951                     vlandev_name = p->name;
2952                 }
2953             }
2954         }
2955     }
2956     proc_net_compat_update_vlan(port->name, vlandev_name, port->vlan);
2957 }
2958 \f
2959 /* Interface functions. */
2960
2961 static void
2962 iface_create(struct port *port, const char *name)
2963 {
2964     struct iface *iface;
2965
2966     iface = xcalloc(1, sizeof *iface);
2967     iface->port = port;
2968     iface->port_ifidx = port->n_ifaces;
2969     iface->name = xstrdup(name);
2970     iface->dp_ifidx = -1;
2971     iface->tag = tag_create_random();
2972     iface->delay_expires = LLONG_MAX;
2973     iface->netdev = NULL;
2974
2975     if (port->n_ifaces >= port->allocated_ifaces) {
2976         port->ifaces = x2nrealloc(port->ifaces, &port->allocated_ifaces,
2977                                   sizeof *port->ifaces);
2978     }
2979     port->ifaces[port->n_ifaces++] = iface;
2980     if (port->n_ifaces > 1) {
2981         port->bridge->has_bonded_ports = true;
2982     }
2983
2984     VLOG_DBG("attached network device %s to port %s", iface->name, port->name);
2985
2986     bridge_flush(port->bridge);
2987 }
2988
2989 static void
2990 iface_destroy(struct iface *iface)
2991 {
2992     if (iface) {
2993         struct port *port = iface->port;
2994         struct bridge *br = port->bridge;
2995         bool del_active = port->active_iface == iface->port_ifidx;
2996         struct iface *del;
2997
2998         if (iface->dp_ifidx >= 0) {
2999             port_array_set(&br->ifaces, iface->dp_ifidx, NULL);
3000         }
3001
3002         del = port->ifaces[iface->port_ifidx] = port->ifaces[--port->n_ifaces];
3003         del->port_ifidx = iface->port_ifidx;
3004
3005         netdev_close(iface->netdev);
3006         free(iface->name);
3007         free(iface);
3008
3009         if (del_active) {
3010             ofproto_revalidate(port->bridge->ofproto, port->active_iface_tag);
3011             bond_choose_active_iface(port);
3012             bond_send_learning_packets(port);
3013         }
3014
3015         bridge_flush(port->bridge);
3016     }
3017 }
3018
3019 static struct iface *
3020 iface_lookup(const struct bridge *br, const char *name)
3021 {
3022     size_t i, j;
3023
3024     for (i = 0; i < br->n_ports; i++) {
3025         struct port *port = br->ports[i];
3026         for (j = 0; j < port->n_ifaces; j++) {
3027             struct iface *iface = port->ifaces[j];
3028             if (!strcmp(iface->name, name)) {
3029                 return iface;
3030             }
3031         }
3032     }
3033     return NULL;
3034 }
3035
3036 static struct iface *
3037 iface_from_dp_ifidx(const struct bridge *br, uint16_t dp_ifidx)
3038 {
3039     return port_array_get(&br->ifaces, dp_ifidx);
3040 }
3041 \f
3042 /* Port mirroring. */
3043
3044 static void
3045 mirror_reconfigure(struct bridge *br)
3046 {
3047     struct svec old_mirrors, new_mirrors;
3048     size_t i;
3049
3050     /* Collect old and new mirrors. */
3051     svec_init(&old_mirrors);
3052     svec_init(&new_mirrors);
3053     cfg_get_subsections(&new_mirrors, "mirror.%s", br->name);
3054     for (i = 0; i < MAX_MIRRORS; i++) {
3055         if (br->mirrors[i]) {
3056             svec_add(&old_mirrors, br->mirrors[i]->name);
3057         }
3058     }
3059
3060     /* Get rid of deleted mirrors and add new mirrors. */
3061     svec_sort(&old_mirrors);
3062     assert(svec_is_unique(&old_mirrors));
3063     svec_sort(&new_mirrors);
3064     assert(svec_is_unique(&new_mirrors));
3065     for (i = 0; i < MAX_MIRRORS; i++) {
3066         struct mirror *m = br->mirrors[i];
3067         if (m && !svec_contains(&new_mirrors, m->name)) {
3068             mirror_destroy(m);
3069         }
3070     }
3071     for (i = 0; i < new_mirrors.n; i++) {
3072         const char *name = new_mirrors.names[i];
3073         if (!svec_contains(&old_mirrors, name)) {
3074             mirror_create(br, name);
3075         }
3076     }
3077     svec_destroy(&old_mirrors);
3078     svec_destroy(&new_mirrors);
3079
3080     /* Reconfigure all mirrors. */
3081     for (i = 0; i < MAX_MIRRORS; i++) {
3082         if (br->mirrors[i]) {
3083             mirror_reconfigure_one(br->mirrors[i]);
3084         }
3085     }
3086
3087     /* Update port reserved status. */
3088     for (i = 0; i < br->n_ports; i++) {
3089         br->ports[i]->is_mirror_output_port = false;
3090     }
3091     for (i = 0; i < MAX_MIRRORS; i++) {
3092         struct mirror *m = br->mirrors[i];
3093         if (m && m->out_port) {
3094             m->out_port->is_mirror_output_port = true;
3095         }
3096     }
3097 }
3098
3099 static void
3100 mirror_create(struct bridge *br, const char *name)
3101 {
3102     struct mirror *m;
3103     size_t i;
3104
3105     for (i = 0; ; i++) {
3106         if (i >= MAX_MIRRORS) {
3107             VLOG_WARN("bridge %s: maximum of %d port mirrors reached, "
3108                       "cannot create %s", br->name, MAX_MIRRORS, name);
3109             return;
3110         }
3111         if (!br->mirrors[i]) {
3112             break;
3113         }
3114     }
3115
3116     VLOG_INFO("created port mirror %s on bridge %s", name, br->name);
3117     bridge_flush(br);
3118
3119     br->mirrors[i] = m = xcalloc(1, sizeof *m);
3120     m->bridge = br;
3121     m->idx = i;
3122     m->name = xstrdup(name);
3123     svec_init(&m->src_ports);
3124     svec_init(&m->dst_ports);
3125     m->vlans = NULL;
3126     m->n_vlans = 0;
3127     m->out_vlan = -1;
3128     m->out_port = NULL;
3129 }
3130
3131 static void
3132 mirror_destroy(struct mirror *m)
3133 {
3134     if (m) {
3135         struct bridge *br = m->bridge;
3136         size_t i;
3137
3138         for (i = 0; i < br->n_ports; i++) {
3139             br->ports[i]->src_mirrors &= ~(MIRROR_MASK_C(1) << m->idx);
3140             br->ports[i]->dst_mirrors &= ~(MIRROR_MASK_C(1) << m->idx);
3141         }
3142
3143         svec_destroy(&m->src_ports);
3144         svec_destroy(&m->dst_ports);
3145         free(m->vlans);
3146
3147         m->bridge->mirrors[m->idx] = NULL;
3148         free(m);
3149
3150         bridge_flush(br);
3151     }
3152 }
3153
3154 static void
3155 prune_ports(struct mirror *m, struct svec *ports)
3156 {
3157     struct svec tmp;
3158     size_t i;
3159
3160     svec_sort_unique(ports);
3161
3162     svec_init(&tmp);
3163     for (i = 0; i < ports->n; i++) {
3164         const char *name = ports->names[i];
3165         if (port_lookup(m->bridge, name)) {
3166             svec_add(&tmp, name);
3167         } else {
3168             VLOG_WARN("mirror.%s.%s: cannot match on nonexistent port %s",
3169                       m->bridge->name, m->name, name);
3170         }
3171     }
3172     svec_swap(ports, &tmp);
3173     svec_destroy(&tmp);
3174 }
3175
3176 static size_t
3177 prune_vlans(struct mirror *m, struct svec *vlan_strings, int **vlans)
3178 {
3179     size_t n_vlans, i;
3180
3181     /* This isn't perfect: it won't combine "0" and "00", and the textual sort
3182      * order won't give us numeric sort order.  But that's good enough for what
3183      * we need right now. */
3184     svec_sort_unique(vlan_strings);
3185
3186     *vlans = xmalloc(sizeof *vlans * vlan_strings->n);
3187     n_vlans = 0;
3188     for (i = 0; i < vlan_strings->n; i++) {
3189         const char *name = vlan_strings->names[i];
3190         int vlan;
3191         if (!str_to_int(name, 10, &vlan) || vlan < 0 || vlan > 4095) {
3192             VLOG_WARN("mirror.%s.%s.select.vlan: ignoring invalid VLAN %s",
3193                       m->bridge->name, m->name, name);
3194         } else {
3195             (*vlans)[n_vlans++] = vlan;
3196         }
3197     }
3198     return n_vlans;
3199 }
3200
3201 static bool
3202 vlan_is_mirrored(const struct mirror *m, int vlan)
3203 {
3204     size_t i;
3205
3206     for (i = 0; i < m->n_vlans; i++) {
3207         if (m->vlans[i] == vlan) {
3208             return true;
3209         }
3210     }
3211     return false;
3212 }
3213
3214 static bool
3215 port_trunks_any_mirrored_vlan(const struct mirror *m, const struct port *p)
3216 {
3217     size_t i;
3218
3219     for (i = 0; i < m->n_vlans; i++) {
3220         if (port_trunks_vlan(p, m->vlans[i])) {
3221             return true;
3222         }
3223     }
3224     return false;
3225 }
3226
3227 static void
3228 mirror_reconfigure_one(struct mirror *m)
3229 {
3230     char *pfx = xasprintf("mirror.%s.%s", m->bridge->name, m->name);
3231     struct svec src_ports, dst_ports, ports;
3232     struct svec vlan_strings;
3233     mirror_mask_t mirror_bit;
3234     const char *out_port_name;
3235     struct port *out_port;
3236     int out_vlan;
3237     size_t n_vlans;
3238     int *vlans;
3239     size_t i;
3240     bool mirror_all_ports;
3241
3242     /* Get output port. */
3243     out_port_name = cfg_get_key(0, "mirror.%s.%s.output.port",
3244                                 m->bridge->name, m->name);
3245     if (out_port_name) {
3246         out_port = port_lookup(m->bridge, out_port_name);
3247         if (!out_port) {
3248             VLOG_ERR("%s.output.port: bridge %s does not have a port "
3249                       "named %s", pfx, m->bridge->name, out_port_name);
3250             mirror_destroy(m);
3251             free(pfx);
3252             return;
3253         }
3254         out_vlan = -1;
3255
3256         if (cfg_has("%s.output.vlan", pfx)) {
3257             VLOG_ERR("%s.output.port and %s.output.vlan both specified; "
3258                      "ignoring %s.output.vlan", pfx, pfx, pfx);
3259         }
3260     } else if (cfg_has("%s.output.vlan", pfx)) {
3261         out_port = NULL;
3262         out_vlan = cfg_get_vlan(0, "%s.output.vlan", pfx);
3263     } else {
3264         VLOG_ERR("%s: neither %s.output.port nor %s.output.vlan specified, "
3265                  "but exactly one is required; disabling port mirror %s",
3266                  pfx, pfx, pfx, pfx);
3267         mirror_destroy(m);
3268         free(pfx);
3269         return;
3270     }
3271
3272     /* Get all the ports, and drop duplicates and ports that don't exist. */
3273     svec_init(&src_ports);
3274     svec_init(&dst_ports);
3275     svec_init(&ports);
3276     cfg_get_all_keys(&src_ports, "%s.select.src-port", pfx);
3277     cfg_get_all_keys(&dst_ports, "%s.select.dst-port", pfx);
3278     cfg_get_all_keys(&ports, "%s.select.port", pfx);
3279     svec_append(&src_ports, &ports);
3280     svec_append(&dst_ports, &ports);
3281     svec_destroy(&ports);
3282     prune_ports(m, &src_ports);
3283     prune_ports(m, &dst_ports);
3284
3285     /* Get all the vlans, and drop duplicate and invalid vlans. */
3286     svec_init(&vlan_strings);
3287     cfg_get_all_keys(&vlan_strings, "%s.select.vlan", pfx);
3288     n_vlans = prune_vlans(m, &vlan_strings, &vlans);
3289     svec_destroy(&vlan_strings);
3290
3291     /* Update mirror data. */
3292     if (!svec_equal(&m->src_ports, &src_ports)
3293         || !svec_equal(&m->dst_ports, &dst_ports)
3294         || m->n_vlans != n_vlans
3295         || memcmp(m->vlans, vlans, sizeof *vlans * n_vlans)
3296         || m->out_port != out_port
3297         || m->out_vlan != out_vlan) {
3298         bridge_flush(m->bridge);
3299     }
3300     svec_swap(&m->src_ports, &src_ports);
3301     svec_swap(&m->dst_ports, &dst_ports);
3302     free(m->vlans);
3303     m->vlans = vlans;
3304     m->n_vlans = n_vlans;
3305     m->out_port = out_port;
3306     m->out_vlan = out_vlan;
3307
3308     /* If no selection criteria have been given, mirror for all ports. */
3309     mirror_all_ports = (!m->src_ports.n) && (!m->dst_ports.n) && (!m->n_vlans);
3310
3311     /* Update ports. */
3312     mirror_bit = MIRROR_MASK_C(1) << m->idx;
3313     for (i = 0; i < m->bridge->n_ports; i++) {
3314         struct port *port = m->bridge->ports[i];
3315
3316         if (mirror_all_ports
3317             || svec_contains(&m->src_ports, port->name)
3318             || (m->n_vlans
3319                 && (!port->vlan
3320                     ? port_trunks_any_mirrored_vlan(m, port)
3321                     : vlan_is_mirrored(m, port->vlan)))) {
3322             port->src_mirrors |= mirror_bit;
3323         } else {
3324             port->src_mirrors &= ~mirror_bit;
3325         }
3326
3327         if (mirror_all_ports || svec_contains(&m->dst_ports, port->name)) {
3328             port->dst_mirrors |= mirror_bit;
3329         } else {
3330             port->dst_mirrors &= ~mirror_bit;
3331         }
3332     }
3333
3334     /* Clean up. */
3335     svec_destroy(&src_ports);
3336     svec_destroy(&dst_ports);
3337     free(pfx);
3338 }
3339 \f
3340 /* Spanning tree protocol. */
3341
3342 static void brstp_update_port_state(struct port *);
3343
3344 static void
3345 brstp_send_bpdu(struct ofpbuf *pkt, int port_no, void *br_)
3346 {
3347     struct bridge *br = br_;
3348     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
3349     struct iface *iface = iface_from_dp_ifidx(br, port_no);
3350     if (!iface) {
3351         VLOG_WARN_RL(&rl, "%s: cannot send BPDU on unknown port %d",
3352                      br->name, port_no);
3353     } else if (eth_addr_is_zero(iface->mac)) {
3354         VLOG_WARN_RL(&rl, "%s: cannot send BPDU on port %d with unknown MAC",
3355                      br->name, port_no);
3356     } else {
3357         union ofp_action action;
3358         struct eth_header *eth = pkt->l2;
3359         flow_t flow;
3360
3361         memcpy(eth->eth_src, iface->mac, ETH_ADDR_LEN);
3362
3363         memset(&action, 0, sizeof action);
3364         action.type = htons(OFPAT_OUTPUT);
3365         action.output.len = htons(sizeof action);
3366         action.output.port = htons(port_no);
3367
3368         flow_extract(pkt, ODPP_NONE, &flow);
3369         ofproto_send_packet(br->ofproto, &flow, &action, 1, pkt);
3370     }
3371     ofpbuf_delete(pkt);
3372 }
3373
3374 static void
3375 brstp_reconfigure(struct bridge *br)
3376 {
3377     size_t i;
3378
3379     if (!cfg_get_bool(0, "stp.%s.enabled", br->name)) {
3380         if (br->stp) {
3381             stp_destroy(br->stp);
3382             br->stp = NULL;
3383
3384             bridge_flush(br);
3385         }
3386     } else {
3387         uint64_t bridge_address, bridge_id;
3388         int bridge_priority;
3389
3390         bridge_address = cfg_get_mac(0, "stp.%s.address", br->name);
3391         if (!bridge_address) {
3392             if (br->stp) {
3393                 bridge_address = (stp_get_bridge_id(br->stp)
3394                                   & ((UINT64_C(1) << 48) - 1));
3395             } else {
3396                 uint8_t mac[ETH_ADDR_LEN];
3397                 eth_addr_random(mac);
3398                 bridge_address = eth_addr_to_uint64(mac);
3399             }
3400         }
3401
3402         if (cfg_is_valid(CFG_INT | CFG_REQUIRED, "stp.%s.priority",
3403                          br->name)) {
3404             bridge_priority = cfg_get_int(0, "stp.%s.priority", br->name);
3405         } else {
3406             bridge_priority = STP_DEFAULT_BRIDGE_PRIORITY;
3407         }
3408
3409         bridge_id = bridge_address | ((uint64_t) bridge_priority << 48);
3410         if (!br->stp) {
3411             br->stp = stp_create(br->name, bridge_id, brstp_send_bpdu, br);
3412             br->stp_last_tick = time_msec();
3413             bridge_flush(br);
3414         } else {
3415             if (bridge_id != stp_get_bridge_id(br->stp)) {
3416                 stp_set_bridge_id(br->stp, bridge_id);
3417                 bridge_flush(br);
3418             }
3419         }
3420
3421         for (i = 0; i < br->n_ports; i++) {
3422             struct port *p = br->ports[i];
3423             int dp_ifidx;
3424             struct stp_port *sp;
3425             int path_cost, priority;
3426             bool enable;
3427
3428             if (!p->n_ifaces) {
3429                 continue;
3430             }
3431             dp_ifidx = p->ifaces[0]->dp_ifidx;
3432             if (dp_ifidx < 0 || dp_ifidx >= STP_MAX_PORTS) {
3433                 continue;
3434             }
3435
3436             sp = stp_get_port(br->stp, dp_ifidx);
3437             enable = (!cfg_is_valid(CFG_BOOL | CFG_REQUIRED,
3438                                     "stp.%s.port.%s.enabled",
3439                                     br->name, p->name)
3440                       || cfg_get_bool(0, "stp.%s.port.%s.enabled",
3441                                       br->name, p->name));
3442             if (p->is_mirror_output_port) {
3443                 enable = false;
3444             }
3445             if (enable != (stp_port_get_state(sp) != STP_DISABLED)) {
3446                 bridge_flush(br); /* Might not be necessary. */
3447                 if (enable) {
3448                     stp_port_enable(sp);
3449                 } else {
3450                     stp_port_disable(sp);
3451                 }
3452             }
3453
3454             path_cost = cfg_get_int(0, "stp.%s.port.%s.path-cost",
3455                                     br->name, p->name);
3456             stp_port_set_path_cost(sp, path_cost ? path_cost : 19 /* XXX */);
3457
3458             priority = (cfg_is_valid(CFG_INT | CFG_REQUIRED,
3459                                      "stp.%s.port.%s.priority",
3460                                      br->name, p->name)
3461                         ? cfg_get_int(0, "stp.%s.port.%s.priority",
3462                                       br->name, p->name)
3463                         : STP_DEFAULT_PORT_PRIORITY);
3464             stp_port_set_priority(sp, priority);
3465         }
3466
3467         brstp_adjust_timers(br);
3468     }
3469     for (i = 0; i < br->n_ports; i++) {
3470         brstp_update_port_state(br->ports[i]);
3471     }
3472 }
3473
3474 static void
3475 brstp_update_port_state(struct port *p)
3476 {
3477     struct bridge *br = p->bridge;
3478     enum stp_state state;
3479
3480     /* Figure out new state. */
3481     state = STP_DISABLED;
3482     if (br->stp && p->n_ifaces > 0) {
3483         int dp_ifidx = p->ifaces[0]->dp_ifidx;
3484         if (dp_ifidx >= 0 && dp_ifidx < STP_MAX_PORTS) {
3485             state = stp_port_get_state(stp_get_port(br->stp, dp_ifidx));
3486         }
3487     }
3488
3489     /* Update state. */
3490     if (p->stp_state != state) {
3491         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(10, 10);
3492         VLOG_INFO_RL(&rl, "port %s: STP state changed from %s to %s",
3493                      p->name, stp_state_name(p->stp_state),
3494                      stp_state_name(state));
3495         if (p->stp_state == STP_DISABLED) {
3496             bridge_flush(br);
3497         } else {
3498             ofproto_revalidate(p->bridge->ofproto, p->stp_state_tag);
3499         }
3500         p->stp_state = state;
3501         p->stp_state_tag = (p->stp_state == STP_DISABLED ? 0
3502                             : tag_create_random());
3503     }
3504 }
3505
3506 static void
3507 brstp_adjust_timers(struct bridge *br)
3508 {
3509     int hello_time = cfg_get_int(0, "stp.%s.hello-time", br->name);
3510     int max_age = cfg_get_int(0, "stp.%s.max-age", br->name);
3511     int forward_delay = cfg_get_int(0, "stp.%s.forward-delay", br->name);
3512
3513     stp_set_hello_time(br->stp, hello_time ? hello_time : 2000);
3514     stp_set_max_age(br->stp, max_age ? max_age : 20000);
3515     stp_set_forward_delay(br->stp, forward_delay ? forward_delay : 15000);
3516 }
3517
3518 static void
3519 brstp_run(struct bridge *br)
3520 {
3521     if (br->stp) {
3522         long long int now = time_msec();
3523         long long int elapsed = now - br->stp_last_tick;
3524         struct stp_port *sp;
3525
3526         if (elapsed > 0) {
3527             stp_tick(br->stp, MIN(INT_MAX, elapsed));
3528             br->stp_last_tick = now;
3529         }
3530         while (stp_get_changed_port(br->stp, &sp)) {
3531             struct port *p = port_from_dp_ifidx(br, stp_port_no(sp));
3532             if (p) {
3533                 brstp_update_port_state(p);
3534             }
3535         }
3536     }
3537 }
3538
3539 static void
3540 brstp_wait(struct bridge *br)
3541 {
3542     if (br->stp) {
3543         poll_timer_wait(1000);
3544     }
3545 }