Fix build faliures due to OFPlugin checktyle fixes
[netvirt.git] / bgpmanager / bgpmanager-impl / src / main / java / org / opendaylight / netvirt / bgpmanager / BgpManager.java
1 /*
2  * Copyright © 2015, 2017 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.bgpmanager;
9
10 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.Collections;
14 import java.util.List;
15 import javax.annotation.Nullable;
16 import javax.annotation.PostConstruct;
17 import javax.annotation.PreDestroy;
18 import javax.inject.Inject;
19 import javax.inject.Singleton;
20 import org.apache.thrift.TException;
21 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
22 import org.opendaylight.netvirt.bgpmanager.oam.BgpAlarmErrorCodes;
23 import org.opendaylight.netvirt.bgpmanager.oam.BgpConstants;
24 import org.opendaylight.netvirt.bgpmanager.thrift.gen.af_afi;
25 import org.opendaylight.netvirt.bgpmanager.thrift.gen.af_safi;
26 import org.opendaylight.netvirt.fibmanager.api.RouteOrigin;
27 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.AddressFamily;
28 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.Bgp;
29 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.TcpMd5SignaturePasswordType;
30 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.Neighbors;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 @Singleton
36 public class BgpManager implements AutoCloseable, IBgpManager {
37     private static final Logger LOG = LoggerFactory.getLogger(BgpManager.class);
38     private final BgpConfigurationManager bcm;
39
40     private final FibDSWriter fibDSWriter;
41     private volatile long qbgprestartTS = 0;
42
43     @Inject
44     public BgpManager(final BgpConfigurationManager bcm, final FibDSWriter fibDSWriter) {
45         this.bcm = bcm;
46         this.fibDSWriter = fibDSWriter;
47     }
48
49     @PostConstruct
50     public void init() {
51         LOG.info("{} start", getClass().getSimpleName());
52     }
53
54     @Override
55     @PreDestroy
56     public void close() throws Exception {
57         LOG.info("{} close", getClass().getSimpleName());
58     }
59
60     public BgpConfigurationManager getBgpConfigurationManager() {
61         return bcm;
62     }
63
64     public void configureGR(int stalepathTime) throws TException {
65         bcm.addGracefulRestart(stalepathTime);
66     }
67
68     public void delGracefulRestart() throws Exception {
69         bcm.delGracefulRestart();
70     }
71
72     public void addNeighbor(String ipAddress, long asNum,
73             @Nullable final TcpMd5SignaturePasswordType md5Password) throws TException {
74         bcm.addNeighbor(ipAddress, asNum, md5Password);
75     }
76
77     public void addEbgpMultihop(String ipAddress, int nhops) throws TException {
78         bcm.addEbgpMultihop(ipAddress, nhops);
79     }
80
81     public void addUpdateSource(String ipAddress, String srcIp) throws TException {
82         bcm.addUpdateSource(ipAddress, srcIp);
83     }
84
85     public void addAddressFamily(String ipAddress, af_afi afi, af_safi safi) throws TException {
86         bcm.addAddressFamily(ipAddress, afi.getValue(), safi.getValue());
87     }
88
89     public void deleteNeighbor(String ipAddress) throws TException {
90         bcm.delNeighbor(ipAddress);
91     }
92
93     @Override
94     public void addVrf(String rd, Collection<String> importRts, Collection<String> exportRts,
95             AddressFamily addressFamily) throws Exception {
96         bcm.addVrf(rd, new ArrayList<>(importRts), new ArrayList<>(exportRts),  addressFamily);
97     }
98
99     @Override
100       public void deleteVrf(String rd, boolean removeFibTable, AddressFamily addressFamily) {
101         boolean ret = false;
102         if (removeFibTable) {
103             LOG.info("deleteVrf: suppressing FIB from rd {} with {}", rd, addressFamily);
104             fibDSWriter.removeVrfSubFamilyFromDS(rd, addressFamily);
105         }
106         ret = bcm.delVrf(rd, addressFamily);
107         if (ret && removeFibTable) {
108             fibDSWriter.removeVrfFromDS(rd);
109         }
110     }
111
112     @Override
113     public void addPrefix(String rd, String macAddress, String prefix, List<String> nextHopList,
114                           VrfEntry.EncapType encapType, int vpnLabel, long l3vni,
115                           String gatewayMac, RouteOrigin origin)
116             throws Exception {
117         fibDSWriter.addFibEntryToDS(rd, macAddress, prefix, nextHopList,
118                 encapType, vpnLabel, l3vni, gatewayMac, origin);
119         bcm.addPrefix(rd, macAddress, prefix, nextHopList,
120                 encapType, vpnLabel, l3vni, 0 /*l2vni*/, gatewayMac);
121     }
122
123     @Override
124     public void addPrefix(String rd, String macAddress, String prefix, String nextHop, VrfEntry.EncapType encapType,
125                           int vpnLabel, long l3vni, String gatewayMac, RouteOrigin origin) throws Exception {
126         addPrefix(rd, macAddress, prefix, Collections.singletonList(nextHop), encapType, vpnLabel, l3vni,
127                 gatewayMac, origin);
128     }
129
130     @Override
131     public void deletePrefix(String rd, String prefix) {
132         fibDSWriter.removeFibEntryFromDS(rd, prefix);
133         bcm.delPrefix(rd, prefix);
134     }
135
136     @Override
137     public void advertisePrefix(String rd, String macAddress, String prefix, List<String> nextHopList,
138                                 VrfEntry.EncapType encapType, long vpnLabel, long l3vni, long l2vni,
139                                 String gatewayMac) throws Exception {
140         LOG.info("Advertise Prefix: Adding Prefix rd {} prefix {} label {} l3vni {} l2vni {}",
141                 rd, prefix, vpnLabel, l3vni, l2vni);
142         bcm.addPrefix(rd, macAddress, prefix, nextHopList,
143                 encapType, vpnLabel, l3vni, l2vni, gatewayMac);
144         LOG.info("Advertise Prefix: Added Prefix rd {} prefix {} label {} l3vni {} l2vni {}",
145                 rd, prefix, vpnLabel, l3vni, l2vni);
146     }
147
148     @Override
149     public void advertisePrefix(String rd, String macAddress, String prefix, String nextHop,
150                                 VrfEntry.EncapType encapType, long vpnLabel, long l3vni, long l2vni,
151                                 String gatewayMac) throws Exception {
152         LOG.info("ADVERTISE: Adding Prefix rd {} prefix {} nexthop {} label {} l3vni {} l2vni {}",
153                 rd, prefix, nextHop, vpnLabel, l3vni, l2vni);
154         bcm.addPrefix(rd, macAddress, prefix, Collections.singletonList(nextHop), encapType,
155                 vpnLabel, l3vni, l2vni, gatewayMac);
156         LOG.info("ADVERTISE: Added Prefix rd {} prefix {} nexthop {} label {} l3vni {} l2vni {}",
157                 rd, prefix, nextHop, vpnLabel, l3vni, l2vni);
158     }
159
160     @Override
161     public void withdrawPrefix(String rd, String prefix) {
162         LOG.info("WITHDRAW: Removing Prefix rd {} prefix {} afi {}", rd, prefix);
163         bcm.delPrefix(rd, prefix);
164         LOG.info("WITHDRAW: Removed Prefix rd {} prefix {} afi {}", rd, prefix);
165     }
166
167     @Override
168     public void setQbgpLog(String fileName, String debugLevel) {
169         bcm.addLogging(fileName, debugLevel);
170     }
171
172     public void delLogging() {
173         bcm.delLogging();
174     }
175
176     public void startBgp(long asn, String routerId, int spt, boolean fbit) {
177         bcm.startBgp(asn, routerId, spt, fbit);
178     }
179
180     public void stopBgp() {
181         bcm.stopBgp();
182     }
183
184     public void startConfig(String host, int port) {
185         bcm.startConfig(host, port);
186     }
187
188     public void stopConfig() {
189         bcm.stopConfig();
190     }
191
192     public Bgp getConfig() {
193         return bcm.getConfig();
194     }
195
196
197     public void enableMultipath(af_afi afi, af_safi safi) {
198         bcm.setMultipathStatus(afi, safi,true);
199     }
200
201     public void disableMultipath(af_afi afi, af_safi safi) {
202         bcm.setMultipathStatus(afi, safi, false);
203     }
204
205     public void multipaths(String rd, int maxpath) {
206         bcm.multipaths(rd, maxpath);
207     }
208
209     @Override
210     public String getDCGwIP() {
211         Bgp conf = bcm.getConfig();
212         if (conf == null) {
213             return null;
214         }
215         List<Neighbors> nbrs = conf.getNeighbors();
216         if (nbrs == null) {
217             return null;
218         }
219         return nbrs.get(0).getAddress().getValue();
220     }
221
222     @Override
223     // This method doesn't actually do any real work currently but may at some point so suppress FindBugs violation.
224     @SuppressFBWarnings("UC_USELESS_VOID_METHOD")
225     public synchronized void sendNotificationEvent(String pfx, int code, int subcode) {
226         if (code != BgpConstants.BGP_NOTIFY_CEASE_CODE) {
227             // CEASE Notifications alone have to be reported to the CBA.
228             // Silently return here. No need to log because tons
229             // of non-alarm notifications will be sent to the SDNc.
230             return;
231         }
232         BgpAlarmErrorCodes errorSubCode = BgpAlarmErrorCodes.checkErrorSubcode(subcode);
233         if (errorSubCode == BgpAlarmErrorCodes.ERROR_IGNORE) {
234             // Need to report only those subcodes, defined in
235             // BgpAlarmErrorCodes enum class.
236             return;
237         }
238     }
239
240     public FibDSWriter getFibWriter() {
241         return fibDSWriter;
242     }
243
244     public String getConfigHost() {
245         return bcm.getConfigHost();
246     }
247
248     public int getConfigPort() {
249         return bcm.getConfigPort();
250     }
251
252
253     @Override
254     public void bgpRestarted() {
255         bcm.bgpRestarted();
256     }
257
258     public BgpManager getBgpManager() {
259         return this;
260     }
261
262     public boolean isBgpConnected() {
263         return bcm.isBgpConnected();
264     }
265
266     public long getLastConnectedTS() {
267         return bcm.getLastConnectedTS();
268     }
269
270     public long getConnectTS() {
271         return bcm.getConnectTS();
272     }
273
274     public long getStartTS() {
275         return bcm.getStartTS();
276     }
277
278     public long getQbgprestartTS() {
279         return qbgprestartTS;
280     }
281
282     @Override
283     public void setQbgprestartTS(long qbgprestartTS) {
284         this.qbgprestartTS = qbgprestartTS;
285     }
286
287     public long getStaleStartTime() {
288         return bcm.getStaleStartTime();
289     }
290
291     public long getStaleEndTime() {
292         return bcm.getStaleEndTime();
293     }
294
295     public long getCfgReplayStartTime() {
296         return bcm.getCfgReplayStartTime();
297     }
298
299     public long getCfgReplayEndTime() {
300         return bcm.getCfgReplayEndTime();
301     }
302
303     public long getStaleCleanupTime() {
304         return bcm.getStaleCleanupTime();
305     }
306
307
308 }