Ensure External Connectivity for NAPT Switch 70/75570/23
authorAswin Suryanarayanan <asuryana@redhat.com>
Thu, 30 Aug 2018 14:27:58 +0000 (19:57 +0530)
committerAswin Suryanarayanan <asuryana@redhat.com>
Mon, 8 Oct 2018 11:40:19 +0000 (11:40 +0000)
commitdaa85fec597b538b9ca6b74dd9aa4d138a07e235
treeece5b4d582da8260c6049ca0a7f7b5ea5aa8a9d3
parent6a12ce38efd5ce8995fa60930bd610c98bd7f5c2
Ensure External Connectivity for NAPT Switch

Currently, Netvirt code assumes that all the Compute Nodes in the
deployment have external network connectivity (via provider mappings).
However, we could have a deployment scenario where provider mappings
are configured on only few compute nodes. In such a deployment, SNAT
and FIP use-cases for FLAT/VLAN provider networks have to be
appropriately handled.

This patch does the following.
1. NAPT Switch will be scheduled only on the Compute Nodes that have
   the external network connectivity.
2. For a VM with Floating ip, if the compute node (hosting the VM)
   does not have the provider mappings (for external network), traffic
   would be routed from the Compute Node to the NAPT Switch (which is
   selected based on the provider-mappings) and then sent out to the
   External network using the floatingip.
3. When SNAT is disabled on a router only the flows related to NAPT is
removed. The centralized switch is not released and the flows in to send
the packet to the centralized switch and vice versa is retained.

Change-Id: I5908f44cfbdbc74c9a8ee1218931fed9297e65a9
Signed-off-by: Aswin Suryanarayanan <asuryana@redhat.com>
Signed-off-by: Sridhar Gaddam <sgaddam@redhat.com>
(cherry picked from commit 8172c9796e5cba81ec78581f8ca66fefbf0a01e0)
17 files changed:
natservice/api/src/main/java/org/opendaylight/netvirt/natservice/api/CentralizedSwitchScheduler.java
natservice/api/src/main/java/org/opendaylight/netvirt/natservice/api/SnatServiceListener.java
natservice/api/src/main/java/org/opendaylight/netvirt/natservice/api/SnatServiceManager.java
natservice/api/src/main/yang/odl-nat.yang
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/ha/SnatCentralizedSwitchChangeListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/ha/SnatNodeEventListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/ha/WeightedCentralizedSwitchScheduler.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/AbstractSnatService.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ConntrackBasedSnatService.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/FloatingIPListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptSwitchHA.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatTunnelInterfaceStateListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatUtil.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/RouterDpnChangeListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/SnatExternalRoutersListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/SnatServiceManagerImpl.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/VxlanGreConntrackBasedSnatService.java