Bug 8937 : High CPU utilization of Java process due to SNAT packet looping 52/61252/4
authorcgowdru <chetan.arakere@altencalsoftlabs.com>
Mon, 7 Aug 2017 07:26:19 +0000 (12:56 +0530)
committercgowdru <chetan.arakere@altencalsoftlabs.com>
Wed, 9 Aug 2017 12:51:39 +0000 (18:21 +0530)
commit6cfbcc794bdaec6a699d5c446f843409491241d6
treef09f79823a22544452dbfdae1bf4272a960458c0
parent1de2fcb5cf28cb5a8a2d6be4e588bf5a6e0f467b
Bug 8937 : High CPU utilization of Java process due to SNAT packet looping

Description:
If we have 2 VMs with same IP belong to two different network and the
subnet associated with different routers having same external network and
external bgpvpn. In such as case, when traffic initiated using same
internal port some both the VMs, one of the VMs doesn't undergo SNAT
translation and the packet gets continously looped between Controller and OVS.

When the packet is punted to controller, check is only done if the packet
is already recevied for an given internal-ip and internal-port. As a
result, VM1 packet is processed properly and SNAT translation happens. But
when VM2 packet arrives, we see with internal-ip and internal-port already
processed and hence we sent back to OVS without SNAT translation which
resulted in looping.

Change done to have a check of router-id along with internal-ip and
internal-port to uniquely differentiate VM1 and VM2 traffic seperatly and
perform SNAT translation properly for both.

Change-Id: I29b6aef96f353bef711f3fb2c1f0b9f6d75507a6
Signed-off-by: cgowdru <chetan.arakere@altencalsoftlabs.com>
vpnservice/natservice/natservice-impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalRoutersListener.java
vpnservice/natservice/natservice-impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptEventHandler.java
vpnservice/natservice/natservice-impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptFlowRemovedEventHandler.java
vpnservice/natservice/natservice-impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptPacketInHandler.java
vpnservice/natservice/natservice-impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatConstants.java