VXLAN: add check for valid VNI values

Bug #1415599 reported by Danny Choi
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
networking-cisco
Confirmed
Undecided
Rich Curran

Bug Description

In Nexus configuration, the valid range is 4096 – 16773119

gg33-N9K-9396PX-1(config-vlan)# vn-segment ?
  <4096-16773119> Segment-id

When illegal value is defined for VNI value in ml2_conf.ini file for VXLAN, e.g.

[ml2_type_nexus_vxlan]
vni_ranges = 4000:4099

the following error/traceback is logged repeatedly in screen-q-svc.log until the VM is deleted:

2015-01-27 16:10:08.257 ERROR neutron.plugins.ml2.managers [req-bf44c116-09a1-42ac-afea-f6bac508c90e None None] Mechanism driver 'cisco_nexus' failed in update_port_postcommit
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers Traceback (most recent call last):
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers File "/opt/stack/neutron/neutron/plugins/ml2/managers.py", line 299, in _call_on_drivers
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers getattr(driver.obj, method_name)(context)
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers File "/opt/stack/neutron/neutron/plugins/ml2/drivers/cisco/nexus/mech_cisco_nexus.py", line 389, in update_port_postcommit
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers self._configure_nve_member) if vxlan_segment else 0
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers File "/opt/stack/neutron/neutron/plugins/ml2/drivers/cisco/nexus/mech_cisco_nexus.py", line 336, in _port_action_vxlan
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers func(vni, device_id, mcast_group, host_id)
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers File "/opt/stack/neutron/neutron/plugins/ml2/drivers/cisco/nexus/mech_cisco_nexus.py", line 139, in _configure_nve_member
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers vni, mcast_group)
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers File "/opt/stack/neutron/neutron/plugins/ml2/drivers/cisco/nexus/nexus_network_driver.py", line 334, in create_nve_member
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers self._edit_config(nexus_host, config=confstr)
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers File "/opt/stack/neutron/neutron/plugins/ml2/drivers/cisco/nexus/nexus_network_driver.py", line 111, in _edit_config
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers raise cexc.NexusConfigFailed(config=config, exc=e)
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers NexusConfigFailed: Failed to configure Nexus:
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers <configure>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers <__XML__MODE__exec_configure>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers <interface>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers <nve>nve1</nve>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers <__XML__MODE_if-nve>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers <member>member vni 4000 mcast-group 225.1.1.1</member>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers </__XML__MODE_if-nve>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers </interface>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers </__XML__MODE__exec_configure>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers </configure>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers </config>
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers . Reason: Syntax error while parsing 'member vni 4000 mcast-group 225.1.1.1'
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers .
2015-01-27 16:10:08.257 TRACE neutron.plugins.ml2.managers
2015-01-27 16:10:08.259 ERROR oslo.messaging.rpc.dispatcher [req-bf44c116-09a1-42ac-afea-f6bac508c90e None None] Exception during message handling: update_port_postcommit failed.
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher Traceback (most recent call last):
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher File "/usr/local/lib/python2.7/dist-packages/oslo/messaging/rpc/dispatcher.py", line 134, in _dispatch_and_reply
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher incoming.message))
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher File "/usr/local/lib/python2.7/dist-packages/oslo/messaging/rpc/dispatcher.py", line 177, in _dispatch
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher return self._do_dispatch(endpoint, method, ctxt, args)
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher File "/usr/local/lib/python2.7/dist-packages/oslo/messaging/rpc/dispatcher.py", line 123, in _do_dispatch
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher result = getattr(endpoint, method)(ctxt, **new_args)
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher File "/opt/stack/neutron/neutron/plugins/ml2/rpc.py", line 161, in update_device_up
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher host)
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher File "/opt/stack/neutron/neutron/plugins/ml2/plugin.py", line 1196, in update_port_status
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher self.mechanism_manager.update_port_postcommit(mech_context)
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher File "/opt/stack/neutron/neutron/plugins/ml2/managers.py", line 535, in update_port_postcommit
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher continue_on_failure=True)
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher File "/opt/stack/neutron/neutron/plugins/ml2/managers.py", line 310, in _call_on_drivers
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher method=method_name
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher MechanismDriverError: update_port_postcommit failed.
2015-01-27 16:10:08.259 TRACE oslo.messaging.rpc.dispatcher
...

Request to add code in nexus_vxlan driver to check for valid VNI values defined in ml2_conf.ini.

VLAN already has such implemented. When invalid VLAN values are defined, Neutron server will not start.

Snippet of screen-q-svc.log:

2015-01-28 11:46:45.083 ERROR neutron.plugins.ml2.drivers.type_vlan [-] Failed to parse network_vlan_ranges. Service terminated!
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan Traceback (most recent call last):
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan File "/opt/stack/neutron/neutron/plugins/ml2/drivers/type_vlan.py", line 89, in _parse_network_vlan_ranges
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan cfg.CONF.ml2_type_vlan.network_vlan_ranges)
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan File "/opt/stack/neutron/neutron/plugins/common/utils.py", line 76, in parse_network_vlan_ranges
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan network, vlan_range = parse_network_vlan_range(entry)
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan File "/opt/stack/neutron/neutron/plugins/common/utils.py", line 66, in parse_network_vlan_range
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan verify_vlan_range(vlan_range)
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan File "/opt/stack/neutron/neutron/plugins/common/utils.py", line 48, in verify_vlan_range
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan error=_("%s is not a valid VLAN tag") % vlan_tag)
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan NetworkVlanRangeError: Invalid network VLAN range: '5000:6000' - '5000 is not a valid VLAN tag'
2015-01-28 11:46:45.083 TRACE neutron.plugins.ml2.drivers.type_vlan

Tags: nexus
Henry Gessau (gessau)
tags: added: nexus
Rich Curran (rcurran)
Changed in networking-cisco:
assignee: nobody → Rich Curran (rcurran)
Rich Curran (rcurran)
Changed in networking-cisco:
status: New → Confirmed
Revision history for this message
Danny Choi (dannchoi) wrote :

Verified in Kilo that Neutron won't start with VNI values below 4096.

2015-04-21 10:52:26.216 INFO neutron.plugins.ml2.managers [-] Initializing driver for type 'nexus_vxlan'
2015-04-21 10:52:26.217 ERROR networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan [-] Failed to parse vni_ranges. Service terminated!
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan Traceback (most recent call last):
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan File "/usr/local/lib/python2.7/dist-packages/networking_cisco/plugins/ml2/drivers/cisc
o/nexus/type_nexus_vxlan.py", line 78, in _verify_vni_ranges
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan cfg.CONF.ml2_type_nexus_vxlan.vni_ranges, self.tunnel_ranges)
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan File "/usr/local/lib/python2.7/dist-packages/networking_cisco/plugins/ml2/drivers/cisc
o/nexus/type_nexus_vxlan.py", line 96, in _parse_nexus_vni_ranges
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan self._parse_nexus_vni_range(tunnel_range)
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan File "/usr/local/lib/python2.7/dist-packages/networking_cisco/plugins/ml2/drivers/cisc
o/nexus/type_nexus_vxlan.py", line 109, in _parse_nexus_vni_range
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan {'id': ident})
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan NetworkTunnelRangeError: Invalid network Tunnel range: '2345:12599' - 2345 is not a valid Nexus VNI value.
2015-04-21 10:52:26.217 TRACE networking_cisco.plugins.ml2.drivers.cisco.nexus.type_nexus_vxlan

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.