diff options
author | Ben Pfaff <blp@nicira.com> | 2012-01-03 13:34:47 -0800 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2012-01-03 13:35:28 -0800 |
commit | 350fc812cccae93958706a3914c348d79b67ac6b (patch) | |
tree | a0c96d612065aaba5bab609842122267bc3d4647 /vswitchd | |
parent | 5f3e52197d7a2e80c15f9434a71a0867773e8fee (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.c | 18 | ||||
-rw-r--r-- | vswitchd/vswitch.xml | 5 |
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. |