"neutronvpn:createL3VPN" fails to create L3VPN for IPv6 use case. 19/88019/19
authorSurendar Raju <surendar.raju@ericsson.com>
Mon, 24 Feb 2020 07:59:58 +0000 (13:29 +0530)
committerKarthikeyan Krishnan <karthikeyangceb007@gmail.com>
Fri, 6 Mar 2020 02:59:23 +0000 (02:59 +0000)
commit2cb614254701461fc81d18df284389e99521083c
treee5ca9131683ee757f8f814e383d6fa6feca4f4fc
parent35631566cc1c319e83d150f53ea9529f0ce7e015
"neutronvpn:createL3VPN" fails to create L3VPN for IPv6 use case.

a) Issue: vpnTargets (route-distinguisher/iRT/eRT)
are VPN properties, but according to the VPNInstance
IETF yang model, VpnTargets reside within IP-families
(v4/v6). For Boron based release, only IPv4 family was
supported and thus, making use of ipv4-family ->
vpnTargets sufficed. For R7, this will not work as at
the time of VPNInstance creation, there is no knowledge
of whether v4 or v6 family subnets will be associated
to VPN. Thus, there is no clear model to store vpnTargets.

b) Manifestation in TRs:  HX53527 - [NFVi] EO request
for "neutronvpn:createL3VPN" fails to create L3VPN:
Pure IPv6 VPNs fail to get VPN connectivity due to
the above anomaly.

c) Solution: Move vpnTargets and RD out of IP-family
containers. Representation of the new yang-model is as below:
container vpn-instances {
list vpn-instance {
list vpnTargets { }
Ipv4-family {
}
Ipv6-family {
}

}
}
}

d) Additional changes:
1. For use-cases where IPv4 family is being
incorrectly used and functionality is working per chance
need to align with the new model.
2. Refactoring to remove ipv4-family
and ipv6-family from yang model itself in case
we are not using these at all.

e) Benefits:
1. Functional benefits to avoid storing data
inconsistently, and moving towards making our models more logical
2. Refactoring will lead to cleaner code.
3. Removing large config containers of ipv4-family
and ipv6 family will lead to performance improvements.

Change-Id: Id33d4931f994f739d31620f8bdc492f15cf8ffd1
Signed-off-by: Surendar Raju <surendar.raju@ericsson.com>
18 files changed:
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatUtil.java
neutronvpn/api/src/main/yang/l3vpn-instances-interfaces.yang
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronBgpvpnChangeListener.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronSubnetChangeListener.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnUtils.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/evpn/manager/NeutronEvpnManager.java
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/IVpnManager.java
vpnmanager/api/src/main/yang/odl-l3vpn.yang
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetmapChangeListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnManagerImpl.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnOpStatusListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java
vpnmanager/impl/src/test/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/L3VpnTestCatalog.java
vpnmanager/impl/src/test/java/org/opendaylight/netvirt/vpnmanager/test/VpnServiceTest.java
vpnmanager/impl/src/test/java/org/opendaylight/netvirt/vpnmanager/test/VpnSubnetRouteHandlerTest.java
vpnmanager/shell/src/main/java/org/opendaylight/netvirt/vpnmanager/shell/ShowVpn.java