]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
l2population_rpc: Make fdb_add_tun/fdb_remove_tun more flexible
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>
Thu, 23 Oct 2014 02:51:05 +0000 (11:51 +0900)
committerYAMAMOTO Takashi <yamamoto@valinux.co.jp>
Mon, 23 Feb 2015 01:35:15 +0000 (10:35 +0900)
It's a preparation for the following ofagent changes.

Related: blueprint ofagent-flow-based-tunneling
Change-Id: I21318bd9f3b07ccc0ac026d7220d2f826a3325cf

neutron/agent/l2population_rpc.py
neutron/plugins/ofagent/agent/ofa_neutron_agent.py
neutron/plugins/openvswitch/agent/ovs_neutron_agent.py
neutron/tests/unit/agent/l2population_rpc_base.py
neutron/tests/unit/agent/test_l2population_rpc.py

index 9e42d9e82b45ae245e0f65427d1ad81046be8780..6547a29a06492803cc400937a1edea11554af323 100644 (file)
@@ -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:
index 21a3e61e75dbc177bc9f18e2ceee24e5fc5a5003..e6d66d67ed54a27745a1cca8192c137465f2f7d9 100644 (file)
@@ -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)
 
index 0a618e602259f4e066e89fd2d8a42eb282700237..a500187ba18b4a2819489d8071d353d39e249f40 100644 (file)
@@ -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:
index 8ce6482130312244157bb411dad1352a9881add6..cd4e325dc62d95129f717c9c891025b5274cd312 100644 (file)
@@ -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)
index 282d5c4fb190712812e4282e1ed6254d1142ae58..2a5bbff68c7893c412aa0d633e9d2406f507ff45 100644 (file)
@@ -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),