2 * Copyright (c) 2015 - 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netvirt.fibmanager;
10 import com.google.common.util.concurrent.FutureCallback;
11 import io.netty.util.concurrent.GlobalEventExecutor;
12 import java.math.BigInteger;
13 import java.util.List;
14 import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
17 import org.opendaylight.netvirt.fibmanager.api.IFibManager;
18 import org.opendaylight.netvirt.fibmanager.api.RouteOrigin;
19 import org.opendaylight.netvirt.vpnmanager.api.IVpnManager;
20 import org.opendaylight.netvirt.vpnmanager.api.intervpnlink.InterVpnLinkCache;
21 import org.osgi.framework.BundleContext;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
25 public class FibManagerImpl implements IFibManager {
26 private static final Logger LOG = LoggerFactory.getLogger(FibManagerImpl.class);
27 private final NexthopManager nexthopManager;
28 private final VrfEntryListener vrfEntryListener;
29 private IVpnManager vpnmanager;
30 private final DataBroker dataBroker;
32 public FibManagerImpl(final DataBroker dataBroker,
33 final NexthopManager nexthopManager,
34 final VrfEntryListener vrfEntryListener,
35 final BundleContext bundleContext) {
36 this.dataBroker = dataBroker;
37 this.nexthopManager = nexthopManager;
38 this.vrfEntryListener = vrfEntryListener;
40 GlobalEventExecutor.INSTANCE.execute(new Runnable() {
43 final WaitingServiceTracker<IVpnManager> tracker = WaitingServiceTracker.create(
44 IVpnManager.class, bundleContext);
45 vpnmanager = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
46 LOG.info("FibManagerImpl initialized. IVpnManager={}", vpnmanager);
52 InterVpnLinkCache.createInterVpnLinkCaches(this.dataBroker); // Idempotent creation
56 public void populateFibOnNewDpn(BigInteger dpnId, long vpnId, String rd,
57 FutureCallback<List<Void>> callback) {
58 vrfEntryListener.populateFibOnNewDpn(dpnId, vpnId, rd, callback);
62 public void cleanUpDpnForVpn(BigInteger dpnId, long vpnId, String rd,
63 String localNextHopIp, String remoteNextHopIp, FutureCallback<List<Void>> callback) {
64 vrfEntryListener.cleanUpDpnForVpn(dpnId, vpnId, rd, localNextHopIp, remoteNextHopIp, callback);
68 public void populateFibOnDpn(BigInteger localDpnId, long vpnId, String rd,
69 String localNextHopIp, String remoteNextHopIp) {
70 vrfEntryListener.populateFibOnDpn(localDpnId, vpnId, rd, localNextHopIp, remoteNextHopIp);
74 public void cleanUpDpnForVpn(BigInteger dpnId, long vpnId, String rd,
75 FutureCallback<List<Void>> callback) {
76 vrfEntryListener.cleanUpDpnForVpn(dpnId, vpnId, rd, callback);
80 public List<String> printFibEntries() {
81 return vrfEntryListener.printFibEntries();
85 public void addStaticRoute(String prefix, String nextHop, String rd, int label) {
86 vpnmanager.addExtraRoute(prefix, nextHop, rd, null, label);
90 public void deleteStaticRoute(String prefix, String nextHop, String rd) {
91 vpnmanager.delExtraRoute(prefix, nextHop, rd, null);
95 public void setConfTransType(String service, String transportType) {
96 nexthopManager.setConfTransType(service, transportType);
100 public void writeConfTransTypeConfigDS() {
101 nexthopManager.writeConfTransTypeConfigDS();
105 public String getConfTransType() {
106 return nexthopManager.getConfiguredTransportTypeL3VPN().toString();
110 public String getReqTransType() {
111 return nexthopManager.getReqTransType();
115 public String getTransportTypeStr(String tunType) {
116 return nexthopManager.getTransportTypeStr(tunType);
120 public void handleRemoteRoute(boolean action, BigInteger localDpnId, BigInteger remoteDpnId,
121 long vpnId, String rd, String destPrefix, String localNextHopIp,
122 String remoteNextHopIP) {
123 vrfEntryListener.handleRemoteRoute(action, localDpnId, remoteDpnId, vpnId, rd, destPrefix,
124 localNextHopIp, remoteNextHopIP);
128 public void addOrUpdateFibEntry(DataBroker broker, String rd, String prefix, List<String> nextHopList,
129 int label, RouteOrigin origin, WriteTransaction writeConfigTxn) {
130 FibUtil.addOrUpdateFibEntry(broker, rd, prefix , nextHopList, label, origin, writeConfigTxn);
134 public void removeOrUpdateFibEntry(DataBroker broker, String rd, String prefix,
135 String nextHopToRemove, WriteTransaction writeConfigTxn) {
136 FibUtil.removeOrUpdateFibEntry(broker, rd, prefix, nextHopToRemove, writeConfigTxn);
140 public void removeFibEntry(DataBroker broker, String rd, String prefix, WriteTransaction writeConfigTxn) {
141 FibUtil.removeFibEntry(broker, rd, prefix, writeConfigTxn);
145 public void addVrfTable(DataBroker broker, String rd, WriteTransaction writeConfigTxn) {
146 FibUtil.addVrfTable(broker, rd, writeConfigTxn);
151 public void removeVrfTable(DataBroker broker, String rd, WriteTransaction writeConfigTxn) {
152 FibUtil.removeVrfTable(broker, rd, writeConfigTxn);
156 public boolean isVPNConfigured() {
157 return this.vpnmanager.isVPNConfigured();