<html><body>
<p><font size="2" face="sans-serif">Henry, thank you very much for your reply.  To try to tie together our discussion here with what's in the launchpad bug report I opened (<a href="https://bugs.launchpad.net/neutron/+bug/1269926">https://bugs.launchpad.net/neutron/+bug/1269926</a>), here is the method used to create the network.  </font><font size="2" color="#333333" face="sans-serif">I'm creating the network via a UI, which does a rest api POST to https://<ip>/powervc/openstack/network/v2.0//networks with the following payload:</font><br>
<br>
<font size="2" color="#333333" face="sans-serif">name: "test4094"<br>
provider:network_type: "vlan"<br>
provider:physical_network: "default"<br>
provider:segmentation_id: 4094</font><br>
<font size="2" color="#333333" face="sans-serif">Per the documentation, I assume the tenant_id is obtained via keystone.</font><font size="2" face="sans-serif"><br>
</font><br>
<font size="2" face="sans-serif">Also interesting, I see this in /var/log/neutron/server.log:</font><br>
<br>
<font size="2" face="sans-serif">2014-01-17 17:43:05.688 62718 DEBUG neutron.plugins.ml2.drivers.type_vlan [req-484c7ddd-7f83-443b-9427-f7ac327dd99d 0 26e92528a0bc4d84ac0777b2d2b93a83] NT-E59BA3F Reserving specific vlan 4094 on physical network default outside pool reserve_provider_segment /usr/lib/python2.6/site-packages/neutron/plugins/ml2/drivers/type_vlan.py:212</font><br>
<br>
<font size="2" face="sans-serif">Which indicates OpenStack realizes this is outside the vlan range yet still allowed it.  Lending even more credence to the fact that I'm incorrect in my thinking that this should have been prevented.  Further information to help understand why this is not being enforced would be greatly appreciated.</font><br>
<br>
<font size="2" face="sans-serif">Thanks!</font><br>
<br>
<font size="2" face="sans-serif">- Paul</font><br>
<br>
<tt><font size="2">Henry Gessau <gessau@cisco.com> wrote on 01/16/2014 03:31:44 PM:<br>
<br>
> Date: Thu, 16 Jan 2014 16:31:44 -0500<br>
> From: Henry Gessau <gessau@cisco.com><br>
> To: "OpenStack Development Mailing List (not for usage questions)"<br>
>    <openstack-dev@lists.openstack.org><br>
> Subject: Re: [openstack-dev] [neutron] ML2 vlan type driver does not<br>
>    honor network_vlan_ranges<br>
> Message-ID: <52D84FC0.8020100@cisco.com><br>
> Content-Type: text/plain; charset=ISO-8859-1<br>
> <br>
> network_vlan_ranges is a 'pool' of vlans from which to pick a vlans for<br>
> tenant networks. Provider networks are not confined to this pool. In fact, I<br>
> believe it is a more common use-case that provider vlans are outside the<br>
> pool so that they do not conflict with tenant vlan allocation.<br>
> <br>
> -- Henry<br>
> <br>
> On Thu, Jan 16, at 3:45 pm, Paul Ward <wpward@us.ibm.com> wrote:<br>
> <br>
> > In testing some new function I've written, I've unsurfaced the problem that<br>
> > the ML2 vlan type driver does not enforce the vlan range specified in the<br>
> > network_vlan_ranges option in ml2_conf.ini file.  It is properly enforcing<br>
> > the physical network name, and even checking to be sure the segmentation_id<br>
> > is valid in the sense that it's not outside the range of ALL validvlan ids.<br>
> >  But it does not actually enforce that segmentation_id is within the vlan<br>
> > range specified for the given physical network in network_vlan_ranges.<br>
> > <br>
> > The fix I propose is simple.  Add the following check to<br>
> > /neutron/plugins/ml2/drivers/type_vlan.py<br>
> > (TypeVlanDriver.validate_provider_segment()):<br>
> > <br>
> >         range_min, range_max = self.network_vlan_ranges[physical_network][0]<br>
> >         if segmentation_id not in range(range_min, range_max):<br>
> >             msg = (_("segmentation_id out of range (%(min)s through "<br>
> >                      "%(max)s)") %<br>
> >                    {'min': range_min,<br>
> >                     'max': range_max})<br>
> >             raise exc.InvalidInput(error_message=msg)<br>
> > <br>
> > This would go near line 182 in<br>
> > <a href="https://github.com/openstack/neutron/blob/master/neutron/plugins/">https://github.com/openstack/neutron/blob/master/neutron/plugins/</a><br>
> ml2/drivers/type_vlan.py.<br>
> > <br>
> > One question I have is whether self.network_vlan_ranges[physical_network]<br>
> > could actually be an empty list rather than a tuple representing the vlan<br>
> > range.  I believe that should always exist, but the documentation is not<br>
> > clear on this.  For reference, the corresponding line in <br>
> ml2_conf.ini is this:<br>
> > <br>
> > [ml2_type_vlan]<br>
> > network_vlan_ranges = default:1:4093<br>
> > <br>
> > Thanks in advance to any that choose to provide some insight here!<br>
> > <br>
> > <br>
> > _______________________________________________<br>
> > OpenStack-dev mailing list<br>
> > OpenStack-dev@lists.openstack.org<br>
> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> > </font></tt></body></html>