summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-04-08 12:52:23 -0700
committerBen Pfaff <blp@nicira.com>2011-04-19 09:32:18 -0700
commit5621d47b9ecb67ab9e52b34be9307a660167b067 (patch)
tree8ff9c339a407fb8d5afa247893da51f94c1b1322
parentede2fd6d7876791a16b977174887200df2f64ef4 (diff)
downloadopenvswitch-5621d47b9ecb67ab9e52b34be9307a660167b067.tar.gz
bridge: Fix VLAN selection mirroring logic.
The logic here did not make sense. A packet arriving on a port is mirrored if the port is a mirroring source port AND (not OR) the packet is in one of the VLANs that is mirrored. This test has been here since the mirroring code was introduced. It seems to me that it was never correct.
-rw-r--r--vswitchd/bridge.c19
1 files changed, 1 insertions, 18 deletions
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 0e429fd4d..8b82de80f 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -3724,19 +3724,6 @@ vlan_is_mirrored(const struct mirror *m, int vlan)
return false;
}
-static bool
-port_trunks_any_mirrored_vlan(const struct mirror *m, const struct port *p)
-{
- size_t i;
-
- for (i = 0; i < m->n_vlans; i++) {
- if (port_trunks_vlan(p, m->vlans[i])) {
- return true;
- }
- }
- return false;
-}
-
static void
mirror_reconfigure_one(struct mirror *m, struct ovsrec_mirror *cfg)
{
@@ -3821,11 +3808,7 @@ mirror_reconfigure_one(struct mirror *m, struct ovsrec_mirror *cfg)
/* Update ports. */
mirror_bit = MIRROR_MASK_C(1) << m->idx;
HMAP_FOR_EACH (port, hmap_node, &m->bridge->ports) {
- if (sset_contains(&m->src_ports, port->name)
- || (m->n_vlans
- && (!port->vlan
- ? port_trunks_any_mirrored_vlan(m, port)
- : vlan_is_mirrored(m, port->vlan)))) {
+ if (sset_contains(&m->src_ports, port->name)) {
port->src_mirrors |= mirror_bit;
} else {
port->src_mirrors &= ~mirror_bit;