aboutsummaryrefslogtreecommitdiff
path: root/vswitchd
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2012-01-03 13:34:47 -0800
committerBen Pfaff <blp@nicira.com>2012-01-03 13:35:28 -0800
commit350fc812cccae93958706a3914c348d79b67ac6b (patch)
treea0c96d612065aaba5bab609842122267bc3d4647 /vswitchd
parent5f3e52197d7a2e80c15f9434a71a0867773e8fee (diff)
vswitchd: Also consider access port VLANs as "in use" for VLAN splinters.
It's natural to add an access port to a bridge and expect that trunk ports will then immediately start to work properly with that VLAN without additional configuration. This change makes that happen. Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'vswitchd')
-rw-r--r--vswitchd/bridge.c18
-rw-r--r--vswitchd/vswitch.xml5
2 files changed, 15 insertions, 8 deletions
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index e89855e8..44a9d1dc 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks
+/* Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -3410,8 +3410,9 @@ collect_splinter_vlans(const struct ovsrec_open_vswitch *ovs_cfg)
* in the process of reconstructing all of them. */
free_registered_blocks();
- splinter_vlans = NULL;
+ splinter_vlans = bitmap_allocate(4096);
sset_init(&splinter_ifaces);
+ vlan_splinters_enabled_anywhere = false;
for (i = 0; i < ovs_cfg->n_bridges; i++) {
struct ovsrec_bridge *br_cfg = ovs_cfg->bridges[i];
size_t j;
@@ -3424,21 +3425,22 @@ collect_splinter_vlans(const struct ovsrec_open_vswitch *ovs_cfg)
struct ovsrec_interface *iface_cfg = port_cfg->interfaces[k];
if (vlan_splinters_is_enabled(iface_cfg)) {
+ vlan_splinters_enabled_anywhere = true;
sset_add(&splinter_ifaces, iface_cfg->name);
-
- if (!splinter_vlans) {
- splinter_vlans = bitmap_allocate(4096);
- }
vlan_bitmap_from_array__(port_cfg->trunks,
port_cfg->n_trunks,
splinter_vlans);
}
}
+
+ if (port_cfg->tag && *port_cfg->tag > 0 && *port_cfg->tag < 4095) {
+ bitmap_set1(splinter_vlans, *port_cfg->tag);
+ }
}
}
- vlan_splinters_enabled_anywhere = splinter_vlans != NULL;
- if (!splinter_vlans) {
+ if (!vlan_splinters_enabled_anywhere) {
+ free(splinter_vlans);
sset_destroy(&splinter_ifaces);
return NULL;
}
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index bebebe05..48c0ad4e 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -1790,6 +1790,11 @@
<ul>
<li>
+ The VLAN is the <ref table="Port" column="tag"/> value in any <ref
+ table="Port"/> record.
+ </li>
+
+ <li>
The VLAN is listed within the <ref table="Port" column="trunks"/>
column of the <ref table="Port"/> record of an interface on which
VLAN splinters are enabled.