From 45c580a3486b246c8e7032d95c58eefdf6d3b3fc Mon Sep 17 00:00:00 2001
From: Ben Pfaff
Date: Tue, 3 Jan 2012 13:34:47 -0800
Subject: [PATCH] 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
---
vswitchd/bridge.c | 18 ++++++++++--------
vswitchd/vswitch.xml | 5 +++++
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 265410fc..b45b9727 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.
@@ -3412,8 +3412,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;
@@ -3426,21 +3427,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 2f9a534d..7d02e503 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -1807,6 +1807,11 @@
+ -
+ The VLAN is the
value in any record.
+
+
-
The VLAN is listed within the
column of the record of an interface on which
--
2.30.2