Merge "Add legacy sNAT rule to l3_proactive_app"
This commit is contained in:
commit
a6e38e4ad8
@ -30,3 +30,10 @@ NEUTRON_CONFIG_ARG+=" --config-file $DRAGONFLOW_CONF"
|
||||
|
||||
Q_ML2_PLUGIN_MECHANISM_DRIVERS=${Q_ML2_PLUGIN_MECHANISM_DRIVERS:-"df"}
|
||||
ML2_L3_PLUGIN=${ML2_L3_PLUGIN:-"df-l3"}
|
||||
|
||||
# OVS bridge definition
|
||||
Q_USE_PROVIDERNET_FOR_PUBLIC=${Q_USE_PROVIDERNET_FOR_PUBLIC:-False}
|
||||
PUBLIC_BRIDGE=${PUBLIC_BRIDGE:-br-ex}
|
||||
INTEGRATION_BRIDGE=${INTEGRATION_BRIDGE:-br-int}
|
||||
INTEGRATION_PEER_PORT=${INTEGRATION_PEER_PORT:-patch-ex}
|
||||
PUBLIC_PEER_PORT=${PUBLIC_PEER_PORT:-patch-int}
|
||||
|
@ -35,12 +35,6 @@ REMOTE_DB_IP=${REMOTE_DB_IP:-$HOST_IP}
|
||||
REMOTE_DB_PORT=${REMOTE_DB_PORT:-4001}
|
||||
REMOTE_DB_HOSTS=${REMOTE_DB_HOSTS:-"$REMOTE_DB_IP:$REMOTE_DB_PORT"}
|
||||
|
||||
# OVS bridge definition
|
||||
PUBLIC_BRIDGE=${PUBLIC_BRIDGE:-br-ex}
|
||||
INTEGRATION_BRIDGE=${INTEGRATION_BRIDGE:-br-int}
|
||||
INTEGRATION_PEER_PORT=${INTEGRATION_PEER_PORT:-patch-ex}
|
||||
PUBLIC_PEER_PORT=${PUBLIC_PEER_PORT:-patch-int}
|
||||
|
||||
# OVS related pid files
|
||||
#----------------------
|
||||
OVS_DB_SERVICE="ovsdb-server"
|
||||
|
@ -186,7 +186,10 @@ class L3ProactiveApp(df_base_app.DFlowApp):
|
||||
router_port.get_cidr_netmask(),
|
||||
tunnel_key,
|
||||
local_network_id,
|
||||
router_port.get_mac())
|
||||
mac)
|
||||
|
||||
# Fall through to sNAT
|
||||
self._add_subnet_send_to_snat(local_network_id, mac, tunnel_key)
|
||||
|
||||
def _get_port(self, ip, lswitch_id, topic):
|
||||
ports = self.db_store.get_ports(topic)
|
||||
@ -440,6 +443,35 @@ class L3ProactiveApp(df_base_app.DFlowApp):
|
||||
priority=const.PRIORITY_MEDIUM,
|
||||
match=match)
|
||||
|
||||
def _add_subnet_send_to_snat(self, network_id, mac, tunnel_key):
|
||||
datapath = self.get_datapath()
|
||||
ofproto = datapath.ofproto
|
||||
parser = datapath.ofproto_parser
|
||||
match = parser.OFPMatch(metadata=network_id, eth_dst=mac)
|
||||
actions = [parser.OFPActionSetField(reg7=tunnel_key)]
|
||||
inst = [
|
||||
parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions),
|
||||
parser.OFPInstructionGotoTable(const.EGRESS_TABLE),
|
||||
]
|
||||
self.mod_flow(
|
||||
datapath,
|
||||
inst=inst,
|
||||
table_id=const.L3_LOOKUP_TABLE,
|
||||
priority=const.PRIORITY_LOW,
|
||||
match=match)
|
||||
|
||||
def _delete_subnet_send_to_snat(self, network_id, mac):
|
||||
datapath = self.get_datapath()
|
||||
ofproto = datapath.ofproto
|
||||
parser = datapath.ofproto_parser
|
||||
match = parser.OFPMatch(metadata=network_id, eth_dst=mac)
|
||||
self.mod_flow(
|
||||
datapath,
|
||||
command=ofproto.OFPFC_DELETE_STRICT,
|
||||
table_id=const.L3_LOOKUP_TABLE,
|
||||
priority=const.PRIORITY_LOW,
|
||||
match=match)
|
||||
|
||||
def _delete_router_port(self, router, router_port):
|
||||
LOG.info(_LI("Removing logical router interface = %s"),
|
||||
router_port)
|
||||
@ -452,6 +484,8 @@ class L3ProactiveApp(df_base_app.DFlowApp):
|
||||
ip = router_port.get_ip()
|
||||
mac = router_port.get_mac()
|
||||
|
||||
self._delete_subnet_send_to_snat(local_network_id, mac)
|
||||
|
||||
if netaddr.IPAddress(ip).version == 4:
|
||||
arp_responder.ArpResponder(self, local_network_id, ip).remove()
|
||||
icmp_responder.ICMPResponder(
|
||||
|
@ -31,6 +31,19 @@ class TestL3ProactiveApp(test_app_base.DFAppTestBase):
|
||||
self.router = test_app_base.fake_logic_router1
|
||||
|
||||
def test_add_del_route(self):
|
||||
_add_subnet_send_to_snat = mock.patch.object(
|
||||
self.app,
|
||||
'_add_subnet_send_to_snat'
|
||||
)
|
||||
self.addCleanup(_add_subnet_send_to_snat.stop)
|
||||
_add_subnet_send_to_snat.start()
|
||||
_del_subnet_send_to_snat = mock.patch.object(
|
||||
self.app,
|
||||
'_delete_subnet_send_to_snat'
|
||||
)
|
||||
self.addCleanup(_del_subnet_send_to_snat.stop)
|
||||
_del_subnet_send_to_snat.start()
|
||||
|
||||
# delete router
|
||||
self.controller.delete_lrouter(self.router.get_id())
|
||||
self.assertEqual(5, self.mock_mod_flow.call_count)
|
||||
@ -41,6 +54,11 @@ class TestL3ProactiveApp(test_app_base.DFAppTestBase):
|
||||
self.assertEqual(4, self.mock_mod_flow.call_count)
|
||||
args, kwargs = self.mock_mod_flow.call_args
|
||||
self.assertEqual(const.L2_LOOKUP_TABLE, kwargs['table_id'])
|
||||
self.app._add_subnet_send_to_snat.assert_called_once_with(
|
||||
test_app_base.fake_logic_switch1.get_unique_key(),
|
||||
self.router.get_ports()[0].get_mac(),
|
||||
self.router.get_ports()[0].get_unique_key()
|
||||
)
|
||||
self.mock_mod_flow.reset_mock()
|
||||
|
||||
# add route
|
||||
@ -59,3 +77,7 @@ class TestL3ProactiveApp(test_app_base.DFAppTestBase):
|
||||
self.router.inner_obj['version'] += 2
|
||||
self.controller.update_lrouter(self.router)
|
||||
self.assertEqual(1, self.mock_mod_flow.call_count)
|
||||
self.app._delete_subnet_send_to_snat.assert_called_once_with(
|
||||
test_app_base.fake_logic_switch1.get_unique_key(),
|
||||
self.router.get_ports()[0].get_mac(),
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user