From 142eb9fd0e9eb704afc9b62200fbbe3443fe069e Mon Sep 17 00:00:00 2001 From: Vishal Thapar Date: Thu, 28 Jan 2016 16:22:43 +0530 Subject: [PATCH] BUG:5116 add support for router-association Change-Id: I938753eefcb1a4ea7fc118cfbfaa515b24c6fea1 Signed-off-by: Vishal Thapar --- .../NeutronBgpvpnChangeListener.java | 69 +++++++++++++++++-- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronBgpvpnChangeListener.java b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronBgpvpnChangeListener.java index dada11d2..efab28fb 100644 --- a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronBgpvpnChangeListener.java +++ b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronBgpvpnChangeListener.java @@ -115,9 +115,19 @@ public class NeutronBgpvpnChangeListener extends AbstractDataChangeListener identifier, Bgpvpn original, Bgpvpn update) { List oldNetworks = original.getNetworks(); List newNetworks = update.getNetworks(); + List oldRouters= original.getRouters(); + List newRouters = update.getRouters(); + Uuid vpnId = update.getUuid(); + if (LOG.isTraceEnabled()) { LOG.trace("Update Bgpvpn : key: " + identifier + ", value=" + update); } + + handleNetworksUpdate(vpnId, oldNetworks, newNetworks); + handleRoutersUpdate(vpnId, oldRouters, newRouters); + } + + protected void handleNetworksUpdate(Uuid vpnId, List oldNetworks, List newNetworks) { if (newNetworks != null && !newNetworks.isEmpty()) { if (oldNetworks != null && !oldNetworks.isEmpty()) { if (oldNetworks != newNetworks) { @@ -132,21 +142,70 @@ public class NeutronBgpvpnChangeListener extends AbstractDataChangeListener oldRouters, List newRouters) { + if (newRouters != null && !newRouters.isEmpty()) { + if (oldRouters != null && !oldRouters.isEmpty()) { + Uuid oldRouter = oldRouters.get(0); + Uuid newRouter = newRouters.get(0); + if (oldRouter != newRouter) { + nvpnManager.dissociateRouterFromVpn(vpnId, oldRouter); + nvpnManager.associateRouterToVpn(vpnId, newRouter); + } + } else { + nvpnManager.associateRouterToVpn(vpnId, newRouters.get(0)); + } + } else { + /* dissociate old router */ + if (oldRouters != null && !oldRouters.isEmpty()) { + Uuid oldRouter = oldRouters.get(0); + nvpnManager.dissociateRouterFromVpn(vpnId, oldRouter); } } - // ### TBD : Handle routers + +/* TBD : multiple rotuer support + if (oldRouters != newRouters) { + Iterator iter = newRouters.iterator(); + while (iter.hasNext()) { + Object net = iter.next(); + if (oldRouters.contains(net)) { + oldRouters.remove(net); + iter.remove(); + } + } + //clear removed routers + if (!oldRouters.isEmpty()) { + LOG.trace("Removing old routers {} ", oldRouters); + nvpnManager.dissociateRoutersFromVpn(vpnId, oldRouters); + } + //add new (Delta) routers + if (!newRouters.isEmpty()) { + LOG.trace("Adding delta New routers {} ", newRouters); + nvpnManager.associateRoutersToVpn(vpnId, newRouters); + } + } + } else { + //add new routers + LOG.trace("Adding New routers {} ", newRouters); + nvpnManager.associateRoutersToVpn(vpnId, newRouters); + } + + }*/ } -} \ No newline at end of file +} -- 2.36.6