- mirror_collect_ports(m, cfg->select_src_port, cfg->n_select_src_port,
- &src_ports);
- mirror_collect_ports(m, cfg->select_dst_port, cfg->n_select_dst_port,
- &dst_ports);
- any_ports_specified = cfg->n_select_dst_port || cfg->n_select_dst_port;
- if (any_ports_specified
- && shash_is_empty(&src_ports) && shash_is_empty(&dst_ports)) {
- VLOG_ERR("bridge %s: disabling mirror %s since none of the specified "
- "selection ports exists", m->bridge->name, m->name);
- mirror_destroy(m);
- goto exit;
- }
+ if (cfg->select_all) {
+ for (i = 0; i < m->bridge->n_ports; i++) {
+ const char *name = m->bridge->ports[i]->name;
+ shash_add_once(&src_ports, name, NULL);
+ shash_add_once(&dst_ports, name, NULL);
+ }
+ vlans = NULL;
+ n_vlans = 0;
+ } else {
+ /* Get ports, and drop duplicates and ports that don't exist. */
+ mirror_collect_ports(m, cfg->select_src_port, cfg->n_select_src_port,
+ &src_ports);
+ mirror_collect_ports(m, cfg->select_dst_port, cfg->n_select_dst_port,
+ &dst_ports);