Support for SNAT and DNAT features in L3 forwarding services.
[vpnservice.git] / fibmanager / fibmanager-impl / src / main / java / org / opendaylight / vpnservice / fibmanager / FibManagerProvider.java
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.vpnservice.fibmanager;
9
10 import java.math.BigInteger;
11 import java.util.List;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
14 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
15 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
16 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
17 import org.opendaylight.fibmanager.api.IFibManager;
18 import org.opendaylight.vpnmanager.api.IVpnManager;
19 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fib.rpc.rev160121.FibRpcService;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.ItmRpcService;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 public class FibManagerProvider implements BindingAwareProvider, IFibManager, AutoCloseable {
28
29   private static final Logger LOG = LoggerFactory.getLogger(FibManagerProvider.class);
30
31   private FibManager fibManager;
32   private IMdsalApiManager mdsalManager;
33   private IVpnManager vpnmanager;
34   private NexthopManager nexthopManager;
35   private IdManagerService idManager;
36   private ItmRpcService itmManager;
37   private OdlInterfaceRpcService interfaceManager;
38   private FibNodeCapableListener fibNcListener;
39   private RpcProviderRegistry rpcProviderRegistry;
40   private RpcRegistration<FibRpcService> rpcRegistration;
41
42   @Override
43   public void onSessionInitiated(ProviderContext session) {
44     LOG.info("FibManagerProvider Session Initiated");
45     try {
46       final  DataBroker dataBroker = session.getSALService(DataBroker.class);
47       nexthopManager = new NexthopManager(dataBroker);
48       nexthopManager.setMdsalManager(mdsalManager);
49       nexthopManager.setIdManager(idManager);
50       nexthopManager.setInterfaceManager(interfaceManager);
51       nexthopManager.setITMRpcService(itmManager);
52       fibManager = new FibManager(dataBroker);
53       fibManager.setMdsalManager(mdsalManager);
54       fibManager.setVpnmanager(vpnmanager);
55       fibManager.setNextHopManager(nexthopManager);
56       fibManager.setITMRpcService(itmManager);
57       fibManager.setInterfaceManager(interfaceManager);
58       fibNcListener = new FibNodeCapableListener(dataBroker, fibManager);
59       FibRpcService fibRpcService = new FibRpcServiceImpl(dataBroker, mdsalManager, this);
60       rpcRegistration = getRpcProviderRegistry().addRpcImplementation(FibRpcService.class, fibRpcService);
61     } catch (Exception e) {
62       LOG.error("Error initializing services", e);
63     }
64   }
65
66   @Override
67   public void close() throws Exception {
68     LOG.info("FibManagerProvider Closed");
69     fibManager.close();
70     fibNcListener.close();
71   }
72
73   public void setMdsalManager(IMdsalApiManager mdsalManager) {
74     this.mdsalManager = mdsalManager;
75   }
76
77   public void setVpnmanager(IVpnManager vpnmanager) {
78     this.vpnmanager = vpnmanager;
79     vpnmanager.setFibService(this);
80   }
81
82   public void setIdManager(IdManagerService idManager) {
83     this.idManager = idManager;
84   }
85
86   public void setInterfaceManager(OdlInterfaceRpcService interfaceManager) {
87     this.interfaceManager = interfaceManager;
88   }
89
90   public void setITMProvider(ItmRpcService itmManager) {
91     this.itmManager = itmManager;
92   }
93
94   @Override
95   public void populateFibOnNewDpn(BigInteger dpnId, long vpnId, String rd) {
96     fibManager.populateFibOnNewDpn(dpnId, vpnId, rd);
97   }
98
99   @Override
100   public void cleanUpDpnForVpn(BigInteger dpnId, long vpnId, String rd) {
101     fibManager.cleanUpDpnForVpn(dpnId, vpnId, rd);
102   }
103
104   @Override
105   public List<String> printFibEntries() {
106     return fibManager.printFibEntries();
107   }
108
109   //Temp
110   @Override
111   public void addStaticRoute(String prefix, String nextHop, String rd, int label) {
112     this.vpnmanager.addExtraRoute(prefix, nextHop, rd, null, label);
113   }
114
115   @Override
116   public void deleteStaticRoute(String prefix, String rd) {
117     this.vpnmanager.delExtraRoute(prefix, rd, null);
118   }
119
120   public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
121     this.rpcProviderRegistry = rpcProviderRegistry;
122   }
123
124   private RpcProviderRegistry getRpcProviderRegistry() {
125     return rpcProviderRegistry;
126   }
127
128 }