ofagent: Fix port_dead
Remove relevant flows on port_dead, so that it correctly stops forwarding packets to/from admin_state_up=False ports. Revealed by tempest test_update_instance_port_admin_state test case. While i'm here, update docstring of port_dead. (cherry-picked from networking-ofagent 92c9f3339811f332c89fc6e739f13a1a8fe733d1) Closes-Bug: #1421098 Change-Id: I70ac46f77ed3f9fcfdb051abb4a5f09b81fb61b8
This commit is contained in:
parent
9ff5bb9671
commit
3abee3bcfd
|
@ -585,12 +585,21 @@ class OFANeutronAgent(n_rpc.RpcCallback,
|
|||
return
|
||||
self.int_br.local_out_delete_port(lvm.vlan, port.vif_mac)
|
||||
|
||||
def port_dead(self, port):
|
||||
"""Once a port has no binding, put it on the "dead vlan".
|
||||
def port_dead(self, port, net_uuid=None):
|
||||
"""Try to stop forwarding on the port.
|
||||
|
||||
:param port: a ovs_lib.VifPort object.
|
||||
:param port: a ports.OFPort object.
|
||||
:param net_uuid: network uuid to which the port belongs to.
|
||||
None if unknown.
|
||||
"""
|
||||
pass
|
||||
self.int_br.check_in_port_delete_port(port.ofport)
|
||||
if port.vif_mac is None:
|
||||
return
|
||||
if net_uuid is None:
|
||||
return
|
||||
lvm = self.local_vlan_map.get(net_uuid)
|
||||
if lvm is not None:
|
||||
self.int_br.local_out_delete_port(lvm.vlan, port.vif_mac)
|
||||
|
||||
def setup_integration_br(self):
|
||||
"""Setup the integration bridge.
|
||||
|
@ -721,7 +730,7 @@ class OFANeutronAgent(n_rpc.RpcCallback,
|
|||
self.port_bound(vif_port, network_id, network_type,
|
||||
physical_network, segmentation_id)
|
||||
else:
|
||||
self.port_dead(vif_port)
|
||||
self.port_dead(vif_port, network_id)
|
||||
else:
|
||||
LOG.debug("No VIF port for port %s defined on agent.", port_id)
|
||||
|
||||
|
|
|
@ -841,3 +841,22 @@ class TestOFANeutronAgent(ofa_test_base.OFAAgentTestBase):
|
|||
result = self.agent._get_ofport_names('hoge')
|
||||
_get_ports.assert_called_once_with('hoge')
|
||||
self.assertEqual(set(names), result)
|
||||
|
||||
def test_port_dead(self):
|
||||
net = "539b161f-b31a-11e4-8c19-08606e7f74e7"
|
||||
mac = "08:60:6e:7f:74:e7"
|
||||
ofport = 111
|
||||
vlan = 99
|
||||
port = mock.Mock()
|
||||
port.ofport = ofport
|
||||
port.vif_mac = mac
|
||||
lvm = mock.Mock()
|
||||
lvm.vlan = vlan
|
||||
self.agent.local_vlan_map[net] = lvm
|
||||
with contextlib.nested(
|
||||
mock.patch.object(self.agent.int_br, 'check_in_port_delete_port'),
|
||||
mock.patch.object(self.agent.int_br, 'local_out_delete_port'),
|
||||
) as (check_in_port_delete_port, local_out_delete_port):
|
||||
self.agent.port_dead(port, net_uuid=net)
|
||||
check_in_port_delete_port.assert_called_once_with(ofport)
|
||||
local_out_delete_port.assert_called_once_with(vlan, mac)
|
||||
|
|
Loading…
Reference in New Issue