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>
-/* 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.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* in the process of reconstructing all of them. */
free_registered_blocks();
* in the process of reconstructing all of them. */
free_registered_blocks();
+ splinter_vlans = bitmap_allocate(4096);
sset_init(&splinter_ifaces);
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;
for (i = 0; i < ovs_cfg->n_bridges; i++) {
struct ovsrec_bridge *br_cfg = ovs_cfg->bridges[i];
size_t j;
struct ovsrec_interface *iface_cfg = port_cfg->interfaces[k];
if (vlan_splinters_is_enabled(iface_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);
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);
}
}
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;
}
sset_destroy(&splinter_ifaces);
return NULL;
}
+ <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
<li>
The VLAN is listed within the <ref table="Port" column="trunks"/>
column of the <ref table="Port"/> record of an interface on which