From b9d296b66632a645656bb398519358263633ade8 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Thu, 23 Oct 2014 11:51:05 +0900 Subject: [PATCH] l2population_rpc: Make fdb_add_tun/fdb_remove_tun more flexible It's a preparation for the following ofagent changes. Related: blueprint ofagent-flow-based-tunneling Change-Id: I21318bd9f3b07ccc0ac026d7220d2f826a3325cf --- neutron/agent/l2population_rpc.py | 8 ++++---- .../plugins/ofagent/agent/ofa_neutron_agent.py | 7 +++++-- .../openvswitch/agent/ovs_neutron_agent.py | 12 ++++++++---- .../tests/unit/agent/l2population_rpc_base.py | 3 +++ .../tests/unit/agent/test_l2population_rpc.py | 18 ++++++++++++------ 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/neutron/agent/l2population_rpc.py b/neutron/agent/l2population_rpc.py index 9e42d9e82..6547a29a0 100644 --- a/neutron/agent/l2population_rpc.py +++ b/neutron/agent/l2population_rpc.py @@ -225,10 +225,10 @@ class L2populationRpcCallBackTunnelMixin(L2populationRpcCallBackMixin): yield (lvm, agent_ports) @log.log - def fdb_add_tun(self, context, br, lvm, agent_ports, ofports): + def fdb_add_tun(self, context, br, lvm, agent_ports, lookup_port): for remote_ip, ports in agent_ports.items(): # Ensure we have a tunnel port with this remote agent - ofport = ofports[lvm.network_type].get(remote_ip) + ofport = lookup_port(lvm.network_type, remote_ip) if not ofport: ofport = self.setup_tunnel_port(br, remote_ip, lvm.network_type) @@ -238,9 +238,9 @@ class L2populationRpcCallBackTunnelMixin(L2populationRpcCallBackMixin): self.add_fdb_flow(br, port, remote_ip, lvm, ofport) @log.log - def fdb_remove_tun(self, context, br, lvm, agent_ports, ofports): + def fdb_remove_tun(self, context, br, lvm, agent_ports, lookup_port): for remote_ip, ports in agent_ports.items(): - ofport = ofports[lvm.network_type].get(remote_ip) + ofport = lookup_port(lvm.network_type, remote_ip) if not ofport: continue for port in ports: diff --git a/neutron/plugins/ofagent/agent/ofa_neutron_agent.py b/neutron/plugins/ofagent/agent/ofa_neutron_agent.py index 21a3e61e7..e6d66d67e 100644 --- a/neutron/plugins/ofagent/agent/ofa_neutron_agent.py +++ b/neutron/plugins/ofagent/agent/ofa_neutron_agent.py @@ -326,6 +326,9 @@ class OFANeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, # are processed in the same order as the relevant API requests self.updated_ports.add(ports.get_normalized_port_name(port['id'])) + def _tunnel_port_lookup(self, network_type, remote_ip): + return self.tun_ofports[network_type].get(remote_ip) + @log.log def fdb_add(self, context, fdb_entries): for lvm, agent_ports in self.get_agent_ports(fdb_entries, @@ -336,7 +339,7 @@ class OFANeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, self._fdb_add_arp(lvm, {self.local_ip: local}) if len(agent_ports): self.fdb_add_tun(context, self.int_br, lvm, agent_ports, - self.tun_ofports) + self._tunnel_port_lookup) else: self._fdb_add_arp(lvm, agent_ports) @@ -350,7 +353,7 @@ class OFANeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, self._fdb_remove_arp(lvm, {self.local_ip: local}) if len(agent_ports): self.fdb_remove_tun(context, self.int_br, lvm, agent_ports, - self.tun_ofports) + self._tunnel_port_lookup) else: self._fdb_remove_arp(lvm, agent_ports) diff --git a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py index 0a618e602..a500187ba 100644 --- a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py +++ b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py @@ -372,6 +372,9 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, ofport = self.tun_br_ofports[tunnel_type].get(tunnel_ip) self.cleanup_tunnel_port(self.tun_br, ofport, tunnel_type) + def _tunnel_port_lookup(self, network_type, remote_ip): + return self.tun_br_ofports[network_type].get(remote_ip) + def fdb_add(self, context, fdb_entries): LOG.debug("fdb_add received") for lvm, agent_ports in self.get_agent_ports(fdb_entries, @@ -381,10 +384,10 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, if not self.enable_distributed_routing: with self.tun_br.deferred() as deferred_br: self.fdb_add_tun(context, deferred_br, lvm, - agent_ports, self.tun_br_ofports) + agent_ports, self._tunnel_port_lookup) else: self.fdb_add_tun(context, self.tun_br, lvm, - agent_ports, self.tun_br_ofports) + agent_ports, self._tunnel_port_lookup) def fdb_remove(self, context, fdb_entries): LOG.debug("fdb_remove received") @@ -395,10 +398,11 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, if not self.enable_distributed_routing: with self.tun_br.deferred() as deferred_br: self.fdb_remove_tun(context, deferred_br, lvm, - agent_ports, self.tun_br_ofports) + agent_ports, + self._tunnel_port_lookup) else: self.fdb_remove_tun(context, self.tun_br, lvm, - agent_ports, self.tun_br_ofports) + agent_ports, self._tunnel_port_lookup) def add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport): if port_info == q_const.FLOODING_ENTRY: diff --git a/neutron/tests/unit/agent/l2population_rpc_base.py b/neutron/tests/unit/agent/l2population_rpc_base.py index 8ce648213..cd4e325dc 100644 --- a/neutron/tests/unit/agent/l2population_rpc_base.py +++ b/neutron/tests/unit/agent/l2population_rpc_base.py @@ -152,3 +152,6 @@ class TestL2populationRpcCallBackTunnelMixinBase(base.BaseTestCase): }, } self.upd_fdb_entry1 = {'chg_ip': self.upd_fdb_entry1_val} + + def _tunnel_port_lookup(self, network_type, remote_ip): + return self.ofports[network_type].get(remote_ip) diff --git a/neutron/tests/unit/agent/test_l2population_rpc.py b/neutron/tests/unit/agent/test_l2population_rpc.py index 282d5c4fb..2a5bbff68 100644 --- a/neutron/tests/unit/agent/test_l2population_rpc.py +++ b/neutron/tests/unit/agent/test_l2population_rpc.py @@ -68,7 +68,8 @@ class TestL2populationRpcCallBackTunnelMixin( mock.patch.object(self.fakeagent, 'add_fdb_flow'), ) as (mock_setup_tunnel_port, mock_add_fdb_flow): self.fakeagent.fdb_add_tun('context', self.fakebr, self.lvm1, - self.agent_ports, self.ofports) + self.agent_ports, + self._tunnel_port_lookup) expected = [ mock.call(self.fakebr, (self.lvms[0].mac, self.lvms[0].ip), self.ports[0].ip, self.lvm1, self.ports[0].ofport), @@ -89,7 +90,8 @@ class TestL2populationRpcCallBackTunnelMixin( mock.patch.object(self.fakeagent, 'add_fdb_flow'), ) as (mock_setup_tunnel_port, mock_add_fdb_flow): self.fakeagent.fdb_add_tun('context', self.fakebr, self.lvm1, - self.agent_ports, self.ofports) + self.agent_ports, + self._tunnel_port_lookup) mock_setup_tunnel_port.assert_called_once_with( self.fakebr, self.ports[1].ip, self.lvm1.network_type) expected = [ @@ -111,7 +113,8 @@ class TestL2populationRpcCallBackTunnelMixin( mock.patch.object(self.fakeagent, 'add_fdb_flow'), ) as (mock_setup_tunnel_port, mock_add_fdb_flow): self.fakeagent.fdb_add_tun('context', self.fakebr, self.lvm1, - self.agent_ports, self.ofports) + self.agent_ports, + self._tunnel_port_lookup) mock_setup_tunnel_port.assert_called_once_with( self.fakebr, self.ports[1].ip, self.lvm1.network_type) expected = [ @@ -127,7 +130,8 @@ class TestL2populationRpcCallBackTunnelMixin( with mock.patch.object( self.fakeagent, 'del_fdb_flow') as mock_del_fdb_flow: self.fakeagent.fdb_remove_tun('context', self.fakebr, self.lvm1, - self.agent_ports, self.ofports) + self.agent_ports, + self._tunnel_port_lookup) expected = [ mock.call(self.fakebr, (self.lvms[0].mac, self.lvms[0].ip), self.ports[0].ip, self.lvm1, self.ports[0].ofport), @@ -146,7 +150,8 @@ class TestL2populationRpcCallBackTunnelMixin( mock.patch.object(self.fakeagent, 'cleanup_tunnel_port'), ) as (mock_del_fdb_flow, mock_cleanup_tunnel_port): self.fakeagent.fdb_remove_tun('context', self.fakebr, self.lvm1, - self.agent_ports, self.ofports) + self.agent_ports, + self._tunnel_port_lookup) expected = [ mock.call(self.fakebr, (self.lvms[0].mac, self.lvms[0].ip), self.ports[0].ip, self.lvm1, self.ports[0].ofport), @@ -166,7 +171,8 @@ class TestL2populationRpcCallBackTunnelMixin( with mock.patch.object( self.fakeagent, 'del_fdb_flow') as mock_del_fdb_flow: self.fakeagent.fdb_remove_tun('context', self.fakebr, self.lvm1, - self.agent_ports, self.ofports) + self.agent_ports, + self._tunnel_port_lookup) expected = [ mock.call(self.fakebr, (self.lvms[0].mac, self.lvms[0].ip), self.ports[0].ip, self.lvm1, self.ports[0].ofport), -- 2.45.2