71cfad7888ab8fdbea0b0bb16ba2c391caa8b7a9
[vpnservice.git] / nexthopmgr / nexthopmgr-impl / src / main / java / org / opendaylight / vpnservice / nexthopmgr / NexthopManager.java
1 /*
2  * Copyright (c) 2015 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.nexthopmgr;
9 /**********************************************************************************
10 ** NextHop MD-SAL DS 
11 ** ------------------------------------------------
12 ** DP_ID  |  VPN   |   IP Address  |  GroupId     |
13 ** ------------------------------------------------
14 ** 
15 ** Listen to DCNs from vpn-inetrfaces
16 ** if a next-hop is added/removed in vpn-interfaces DS
17 **      call add/removeNextHop(interface.dpn, interface.port, vpn_instance.vpnId, AdjacencyIpAddress);
18 ** 
19 ** if a tunnel-interface is added inn interfaces DS --
20 **      call add/removeNextHop(interface.dpn, interface.port, 00, RemoteIpAddress);
21 *************************************************************************************/
22 import java.util.Collections;
23 import java.util.Map;
24 import java.util.Set;
25
26 import java.util.List;
27 import com.google.common.base.Optional;
28 import com.google.common.collect.FluentIterable;
29
30
31 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
32 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
33 import org.opendaylight.yangtools.concepts.ListenerRegistration;
34 import org.opendaylight.yangtools.yang.binding.DataObject;
35 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
36 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
37 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
38 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
39 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
40 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
41
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
45 /*import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.NextHopList;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.next.hop.list.L3NextHops;
47 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.VpnInterface1;
49 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
50 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey;
51 */
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150330.L3nexthop;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150330.l3nexthop.VpnNexthops;
54
55 import org.slf4j.Logger;
56 import org.slf4j.LoggerFactory;
57
58 public class NexthopManager extends AbstractDataChangeListener<L3nexthop> implements AutoCloseable{
59     private static final Logger LOG = LoggerFactory.getLogger(L3nexthop.class);
60     private ListenerRegistration<DataChangeListener> listenerRegistration;
61     private final DataBroker broker;
62
63     public NexthopManager(final DataBroker db) {
64         super(L3nexthop.class);
65         broker = db;
66         registerListener(db);
67     }
68
69         @Override
70     public void close() throws Exception {
71         if (listenerRegistration != null) {
72             try {
73                 listenerRegistration.close();
74             } catch (final Exception e) {
75                 LOG.error("Error when cleaning up DataChangeListener.", e);
76             }
77             listenerRegistration = null;
78         }
79         LOG.info("VPN Interface Manager Closed");
80     }
81
82
83     private void registerListener(final DataBroker db) {
84         try {
85             listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION,
86                     getWildCardPath(), NexthopManager.this, DataChangeScope.SUBTREE);
87         } catch (final Exception e) {
88             LOG.error("Nexthop Manager DataChange listener registration fail!", e);
89             throw new IllegalStateException("Nexthop Manager registration Listener failed.", e);
90         }
91     }
92     
93         public void addNextHop(long dpnId, int port, String vpnRD, String IpAddress)
94         {
95                 String nhKey = new String("nexthop"+vpnRD+IpAddress);
96                 
97                 int groupId = 1;//getIdManager().getUniqueId("nextHopGroupIdPool", nhKey);
98
99 /*              if (getNextHop(groupId) == Null){
100                         List<BucketInfo> listBucketInfo = new ArrayList<BucketInfo>();
101                         List<ActionInfo> listActionInfo = null;//nextHop.getActions({output to port}); 
102                         BucketInfo bucket = new BucketInfo(listActionInfo);
103                         listBucketInfo.add(bucket);
104                         //GroupEntity groupEntity = MDSALUtil.buildGroupEntity(dpId, groupId, IPAddress, GroupTypes.GroupIndirect, listBucketInfo);
105                         //getMdsalApiManager().installGroup(groupEntity, objTransaction???);
106                         
107                         //update MD-SAL DS
108                         addNextHopToDS(dpId, vpn, ipAddress, groupId);
109                 }else{
110                         //check update
111                 }*/
112         }       
113
114         public void removeNextHop(long dpnId, int port, String vpnRD, String IpAddress)
115         {
116                 String nhKey = new String("nexthop"+vpnRD+IpAddress);
117                 int groupId = 1;//getIdManager().getUniqueId(L3Constants.L3NEXTHOP_GROUPID_POOL, nhKey);
118
119 /*              if (getNextHop(groupId) != Null){
120                         List<BucketInfo> listBucketInfo = new ArrayList<BucketInfo>();
121                         List<ActionInfo> listActionInfo = null;//nextHop.getActions({output to port}); 
122                         BucketInfo bucket = new BucketInfo(listActionInfo);
123                         listBucketInfo.add(bucket);
124                         //GroupEntity groupEntity = MDSALUtil.buildGroupEntity(dpId, groupId, IPAddress, GroupTypes.GroupIndirect, listBucketInfo);
125                         //getMdsalApiManager().removeGroup(groupEntity, objTransaction???);
126                         
127                         //update MD-SAL DS
128                         removeNextHopFromDS(dpId, vpn, ipAddress);
129                 }else{
130                         //check update
131                 }*/
132         }       
133                 
134         public long getNextHopPointer(long dpnId, int vpnId, String prefixIp, String nxetHopIp)
135         {
136 /*              String endpointIp = interfaceManager.getLocalEndpointIp(dpnId);
137                 if (nextHopIp.equals(endpointIp)) {
138                         return getGidFromDS(dpnId, vpnId, prefixIp);
139                 } else {
140                         return getGidFromDS(dpnId, 00, nextHopIp);
141                 }*/
142                 return 0;
143         }
144
145     private InstanceIdentifier<L3nexthop> getWildCardPath() {
146         return InstanceIdentifier.create(L3nexthop.class);//.child(l3nexthop.vpnNexthops.class);
147     }
148
149         private void addNextHopToDS(long dpId, int vpnId, String ipAddress, long groupId)
150         {
151                 
152         }
153
154         private long getGidFromDS(String ipaddress)
155         {
156                 return 0;
157                 
158         }
159
160         @Override
161         protected void remove(InstanceIdentifier<L3nexthop> identifier,
162                         L3nexthop del) {
163                 // TODO Auto-generated method stub
164                 
165         }
166
167         @Override
168         protected void update(InstanceIdentifier<L3nexthop> identifier,
169                         L3nexthop original, L3nexthop update) {
170                 // TODO Auto-generated method stub
171                 
172         }
173
174         @Override
175         protected void add(InstanceIdentifier<L3nexthop> identifier, L3nexthop add) {
176                 // TODO Auto-generated method stub
177                 
178         }
179
180 }