c16b2ace13f8fe972e3a2e8217c40cd40167890b
[netvirt.git] /
1 /*
2  * Copyright (c) 2015 - 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.netvirt.fibmanager;
9
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;
24
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;
31
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;
39
40         GlobalEventExecutor.INSTANCE.execute(new Runnable() {
41             @Override
42             public void run() {
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);
47             }
48         });
49     }
50
51     public void start() {
52         InterVpnLinkCache.createInterVpnLinkCaches(this.dataBroker);  // Idempotent creation
53     }
54
55     @Override
56     public void populateFibOnNewDpn(BigInteger dpnId, long vpnId, String rd,
57                                     FutureCallback<List<Void>> callback) {
58         vrfEntryListener.populateFibOnNewDpn(dpnId, vpnId, rd, callback);
59     }
60
61     @Override
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);
65     }
66
67     @Override
68     public void populateFibOnDpn(BigInteger localDpnId, long vpnId, String rd,
69                                  String localNextHopIp, String remoteNextHopIp) {
70         vrfEntryListener.populateFibOnDpn(localDpnId, vpnId, rd, localNextHopIp, remoteNextHopIp);
71     }
72
73     @Override
74     public void cleanUpDpnForVpn(BigInteger dpnId, long vpnId, String rd,
75                                  FutureCallback<List<Void>> callback) {
76         vrfEntryListener.cleanUpDpnForVpn(dpnId, vpnId, rd, callback);
77     }
78
79     @Override
80     public List<String> printFibEntries() {
81         return vrfEntryListener.printFibEntries();
82     }
83
84     @Override
85     public void addStaticRoute(String prefix, String nextHop, String rd, int label) {
86         vpnmanager.addExtraRoute(prefix, nextHop, rd, null, label);
87     }
88
89     @Override
90     public void deleteStaticRoute(String prefix, String nextHop, String rd) {
91         vpnmanager.delExtraRoute(prefix, nextHop, rd, null);
92     }
93
94     @Override
95     public void setConfTransType(String service, String transportType) {
96         nexthopManager.setConfTransType(service, transportType);
97     }
98
99     @Override
100     public void writeConfTransTypeConfigDS() {
101         nexthopManager.writeConfTransTypeConfigDS();
102     }
103
104     @Override
105     public String getConfTransType() {
106         return nexthopManager.getConfiguredTransportTypeL3VPN().toString();
107     }
108
109     @Override
110     public String getReqTransType() {
111         return nexthopManager.getReqTransType();
112     }
113
114     @Override
115     public String getTransportTypeStr(String tunType) {
116         return nexthopManager.getTransportTypeStr(tunType);
117     }
118
119     @Override
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);
125     }
126
127     @Override
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);
131     }
132
133     @Override
134     public void removeOrUpdateFibEntry(DataBroker broker, String rd, String prefix,
135                                        String nextHopToRemove, WriteTransaction writeConfigTxn) {
136         FibUtil.removeOrUpdateFibEntry(broker, rd, prefix, nextHopToRemove, writeConfigTxn);
137     }
138
139     @Override
140     public void removeFibEntry(DataBroker broker, String rd, String prefix, WriteTransaction writeConfigTxn) {
141         FibUtil.removeFibEntry(broker, rd, prefix, writeConfigTxn);
142     }
143
144     @Override
145     public void addVrfTable(DataBroker broker, String rd, WriteTransaction writeConfigTxn) {
146         FibUtil.addVrfTable(broker, rd, writeConfigTxn);
147
148     }
149
150     @Override
151     public void removeVrfTable(DataBroker broker, String rd, WriteTransaction writeConfigTxn) {
152         FibUtil.removeVrfTable(broker, rd, writeConfigTxn);
153     }
154
155     @Override
156     public boolean isVPNConfigured() {
157         return this.vpnmanager.isVPNConfigured();
158     }
159 }