routerName);
return futures;
} else {
- NatUtil.installRouterGwFlows(dataBroker, vpnManager, router, primarySwitchId,
- NwConstants.DEL_FLOW);
Collection<String> externalIps = NatUtil.getExternalIpsForRouter(dataBroker, routerId);
handleDisableSnat(router, networkUuid, externalIps, true, null, primarySwitchId,
routerId, removeFlowInvTx);
private final DataBroker dataBroker;
private final IVpnManager vpnManager;
+ private final ExternalRouterDataUtil externalRouterDataUtil;
@Inject
- public CentralizedSwitchChangeListener(final DataBroker dataBroker, final IVpnManager vpnManager) {
+ public CentralizedSwitchChangeListener(final DataBroker dataBroker, final IVpnManager vpnManager,
+ ExternalRouterDataUtil externalRouterDataUtil) {
super(RouterToNaptSwitch.class, CentralizedSwitchChangeListener.class);
this.dataBroker = dataBroker;
this.vpnManager = vpnManager;
+ this.externalRouterDataUtil = externalRouterDataUtil;
}
@Override
}
private void setupRouterGwFlows(RouterToNaptSwitch routerToNaptSwitch, WriteTransaction writeTx, int addOrRemove) {
- Routers router = VpnUtil.getExternalRouter(dataBroker, routerToNaptSwitch.getRouterName());
+ Routers router = null;
+ if (addOrRemove == NwConstants.ADD_FLOW) {
+ router = VpnUtil.getExternalRouter(dataBroker, routerToNaptSwitch.getRouterName());
+ }
+ else {
+ router = externalRouterDataUtil.getRouter(routerToNaptSwitch.getRouterName());
+ }
if (router == null) {
LOG.warn("No router data found for router id {}", routerToNaptSwitch.getRouterName());
return;
vpnManager.addArpResponderFlowsToExternalNetworkIps(routerName,
VpnUtil.getIpsListFromExternalIps(router.getExternalIps()),
extGwMacAddress, primarySwitchId, extNetworkId, writeTx);
+ externalRouterDataUtil.addtoRouterMap(router);
} else {
vpnManager.removeRouterGwMacFlow(routerName, extGwMacAddress, primarySwitchId, extNetworkId,
subnetVpnName.getValue(), writeTx);
vpnManager.removeArpResponderFlowsToExternalNetworkIps(routerName,
VpnUtil.getIpsListFromExternalIps(router.getExternalIps()),
extGwMacAddress, primarySwitchId, extNetworkId);
+ externalRouterDataUtil.removeFromRouterMap(router);
}
}
}
--- /dev/null
+/*
+ * Copyright (c) 2018 Red Hat, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.netvirt.vpnmanager;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.inject.Singleton;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.ext.routers.Routers;
+
+@Singleton
+public class ExternalRouterDataUtil {
+
+ private final Map<String,Routers> routerMap = new ConcurrentHashMap<>();
+
+ public void addtoRouterMap(Routers router) {
+ routerMap.put(router.getRouterName(), router);
+ }
+
+ public void updateRouterMap(Routers router) {
+ routerMap.put(router.getRouterName(), router);
+ }
+
+ public void removeFromRouterMap(Routers router) {
+ routerMap.remove(router.getRouterName());
+ }
+
+ public Routers getRouter(String routerId) {
+ return routerMap.get(routerId);
+ }
+}