Merge "Bug 7270 Duplicate remote Mcast mac entry in TOR ."
[genius.git] / interfacemanager / interfacemanager-impl / src / main / java / org / opendaylight / genius / interfacemanager / commons / InterfaceMetaUtils.java
1 /*
2  * Copyright (c) 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.genius.interfacemanager.commons;
9
10 import java.math.BigInteger;
11 import java.util.List;
12 import java.util.concurrent.ConcurrentHashMap;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.genius.interfacemanager.IfmConstants;
17 import org.opendaylight.genius.interfacemanager.IfmUtil;
18 import org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.BatchingUtils;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.BridgeInterfaceInfo;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.BridgeRefInfo;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.IfIndexesInterfaceMap;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.InterfaceChildInfo;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.TunnelInstanceInterfaceMap;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterface;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterfaceBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterfaceKey;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntry;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntryKey;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntryKey;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntry;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntryBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntryKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntry;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntry;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntryBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntryKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.tunnel.instance._interface.map.TunnelInstanceInterface;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.tunnel.instance._interface.map.TunnelInstanceInterfaceBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.tunnel.instance._interface.map.TunnelInstanceInterfaceKey;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.Tunnels;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
51 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55 public class InterfaceMetaUtils {
56     private static final Logger LOG = LoggerFactory.getLogger(InterfaceMetaUtils.class);
57     private static ConcurrentHashMap<BigInteger, BridgeEntry> bridgeEntryMap = new ConcurrentHashMap();
58     private static ConcurrentHashMap<BigInteger, BridgeRefEntry> bridgeRefEntryMap = new ConcurrentHashMap();
59
60     public static InstanceIdentifier<BridgeRefEntry> getBridgeRefEntryIdentifier(BridgeRefEntryKey bridgeRefEntryKey) {
61         InstanceIdentifier.InstanceIdentifierBuilder<BridgeRefEntry> bridgeRefEntryInstanceIdentifierBuilder =
62                 InstanceIdentifier.builder(BridgeRefInfo.class)
63                         .child(BridgeRefEntry.class, bridgeRefEntryKey);
64         return bridgeRefEntryInstanceIdentifierBuilder.build();
65     }
66
67     public static BridgeRefEntry getBridgeRefEntryFromOperDS(BigInteger dpId, DataBroker dataBroker) {
68         BridgeRefEntry bridgeRefEntry = getBridgeRefEntryFromCache(dpId);
69         if(bridgeRefEntry != null) {
70             return bridgeRefEntry;
71         }
72         BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(dpId);
73         InstanceIdentifier<BridgeRefEntry> bridgeRefEntryIid = InterfaceMetaUtils
74                 .getBridgeRefEntryIdentifier(bridgeRefEntryKey);
75         bridgeRefEntry = IfmUtil.read(LogicalDatastoreType.OPERATIONAL, bridgeRefEntryIid, dataBroker).orNull();
76         if(bridgeRefEntry != null) {
77             addBridgeRefEntryToCache(dpId, bridgeRefEntry);
78         }
79         return bridgeRefEntry;
80     }
81
82     public static OvsdbBridgeRef getOvsdbBridgeRef(BigInteger dpId, DataBroker dataBroker) {
83
84         BridgeRefEntry bridgeRefEntry = getBridgeRefEntryFromOperDS(dpId, dataBroker);
85
86         if(bridgeRefEntry == null){
87             // bridge ref entry will be null if the bridge is disconnected from controller.
88             // In that case, fetch bridge reference from bridge interface entry config DS
89             BridgeEntry bridgeEntry = getBridgeEntryFromConfigDS(dpId, dataBroker);
90             if(bridgeEntry == null){
91                 return null;
92             }
93             return  bridgeEntry.getBridgeReference();
94         }
95         return bridgeRefEntry.getBridgeReference();
96     }
97
98     public static BridgeRefEntry getBridgeReferenceForInterface(Interface interfaceInfo,
99                                                                 DataBroker dataBroker) {
100         ParentRefs parentRefs = interfaceInfo.getAugmentation(ParentRefs.class);
101         BigInteger dpn = parentRefs.getDatapathNodeIdentifier();
102         return getBridgeRefEntryFromOperDS(dpn, dataBroker);
103     }
104
105     public static boolean bridgeExists(BridgeRefEntry bridgeRefEntry,
106                                        DataBroker dataBroker) {
107         if (bridgeRefEntry != null && bridgeRefEntry.getBridgeReference() != null) {
108             InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid =
109                     (InstanceIdentifier<OvsdbBridgeAugmentation>) bridgeRefEntry.getBridgeReference().getValue();
110             return IfmUtil.read(LogicalDatastoreType.OPERATIONAL, bridgeIid, dataBroker).isPresent();
111         }
112         return false;
113     }
114     public static InstanceIdentifier<BridgeEntry> getBridgeEntryIdentifier(BridgeEntryKey bridgeEntryKey) {
115         InstanceIdentifier.InstanceIdentifierBuilder<BridgeEntry> bridgeEntryIdBuilder =
116                 InstanceIdentifier.builder(BridgeInterfaceInfo.class).child(BridgeEntry.class, bridgeEntryKey);
117         return bridgeEntryIdBuilder.build();
118     }
119
120     public static BridgeEntry getBridgeEntryFromConfigDS(BigInteger dpnId,
121                                                          DataBroker dataBroker) {
122         BridgeEntry bridgeEntry = getBridgeEntryFromCache(dpnId);
123         if(bridgeEntry != null) {
124             return bridgeEntry;
125         }
126         BridgeEntryKey bridgeEntryKey = new BridgeEntryKey(dpnId);
127         InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier =
128                 InterfaceMetaUtils.getBridgeEntryIdentifier(bridgeEntryKey);
129         LOG.debug("Trying to retrieve bridge entry from config for Id: {}", bridgeEntryInstanceIdentifier);
130         bridgeEntry = readBridgeEntryFromConfigDS(bridgeEntryInstanceIdentifier,
131                 dataBroker);
132         if(bridgeEntry != null) {
133             addBridgeEntryToCache(dpnId, bridgeEntry);
134         }
135         return bridgeEntry;
136     }
137
138     private static BridgeEntry readBridgeEntryFromConfigDS(InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier,
139                                                          DataBroker dataBroker) {
140         return IfmUtil.read(LogicalDatastoreType.CONFIGURATION, bridgeEntryInstanceIdentifier, dataBroker).orNull();
141     }
142
143     public static BridgeEntry getBridgeEntryFromConfigDS(InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier,
144                                                          DataBroker dataBroker) {
145         BigInteger dpnId = bridgeEntryInstanceIdentifier.firstKeyOf(BridgeEntry.class).getDpid();
146         return getBridgeEntryFromConfigDS(dpnId, dataBroker);
147     }
148
149     public static InstanceIdentifier<BridgeInterfaceEntry> getBridgeInterfaceEntryIdentifier(BridgeEntryKey bridgeEntryKey,
150                                                                                              BridgeInterfaceEntryKey bridgeInterfaceEntryKey) {
151         return InstanceIdentifier.builder(BridgeInterfaceInfo.class)
152                 .child(BridgeEntry.class, bridgeEntryKey)
153                 .child(BridgeInterfaceEntry.class, bridgeInterfaceEntryKey).build();
154
155     }
156
157     public static void createBridgeInterfaceEntryInConfigDS(BigInteger dpId,
158                                                             String childInterface) {
159         BridgeEntryKey bridgeEntryKey = new BridgeEntryKey(dpId);
160         BridgeInterfaceEntryKey bridgeInterfaceEntryKey = new BridgeInterfaceEntryKey(childInterface);
161         InstanceIdentifier<BridgeInterfaceEntry> bridgeInterfaceEntryIid =
162                 InterfaceMetaUtils.getBridgeInterfaceEntryIdentifier(bridgeEntryKey, bridgeInterfaceEntryKey);
163         BridgeInterfaceEntryBuilder entryBuilder = new BridgeInterfaceEntryBuilder().setKey(bridgeInterfaceEntryKey)
164                 .setInterfaceName(childInterface);
165         BatchingUtils.write(bridgeInterfaceEntryIid, entryBuilder.build(), BatchingUtils.EntityType.DEFAULT_CONFIG);
166     }
167
168     public static InstanceIdentifier<InterfaceParentEntry> getInterfaceParentEntryIdentifier(
169             InterfaceParentEntryKey interfaceParentEntryKey) {
170         InstanceIdentifier.InstanceIdentifierBuilder<InterfaceParentEntry> intfIdBuilder =
171                 InstanceIdentifier.builder(InterfaceChildInfo.class)
172                         .child(InterfaceParentEntry.class, interfaceParentEntryKey);
173         return intfIdBuilder.build();
174     }
175
176     public static InstanceIdentifier<InterfaceChildEntry> getInterfaceChildEntryIdentifier(
177             InterfaceParentEntryKey interfaceParentEntryKey, InterfaceChildEntryKey interfaceChildEntryKey) {
178         InstanceIdentifier.InstanceIdentifierBuilder<InterfaceChildEntry> intfIdBuilder =
179                 InstanceIdentifier.builder(InterfaceChildInfo.class)
180                         .child(InterfaceParentEntry.class, interfaceParentEntryKey)
181                         .child(InterfaceChildEntry.class, interfaceChildEntryKey);
182         return intfIdBuilder.build();
183     }
184
185     public static InterfaceParentEntry getInterfaceParentEntryFromConfigDS(
186             String interfaceName, DataBroker dataBroker) {
187         InterfaceParentEntryKey interfaceParentEntryKey = new InterfaceParentEntryKey(interfaceName);
188         InterfaceParentEntry interfaceParentEntry =
189                 InterfaceMetaUtils.getInterfaceParentEntryFromConfigDS(interfaceParentEntryKey, dataBroker);
190         return interfaceParentEntry;
191     }
192
193     public static InterfaceParentEntry getInterfaceParentEntryFromConfigDS(
194             InterfaceParentEntryKey interfaceParentEntryKey, DataBroker dataBroker) {
195         InstanceIdentifier<InterfaceParentEntry> intfParentIid =
196                 getInterfaceParentEntryIdentifier(interfaceParentEntryKey);
197
198         return getInterfaceParentEntryFromConfigDS(intfParentIid, dataBroker);
199     }
200
201     public static InterfaceParentEntry getInterfaceParentEntryFromConfigDS(
202             InstanceIdentifier<InterfaceParentEntry> intfId, DataBroker dataBroker) {
203         return IfmUtil.read(LogicalDatastoreType.CONFIGURATION, intfId, dataBroker).orNull();
204     }
205
206     public static InterfaceChildEntry getInterfaceChildEntryFromConfigDS(InterfaceParentEntryKey interfaceParentEntryKey,
207                                                                          InterfaceChildEntryKey interfaceChildEntryKey,
208                                                                          DataBroker dataBroker) {
209         InstanceIdentifier<InterfaceChildEntry> intfChildIid =
210                 getInterfaceChildEntryIdentifier(interfaceParentEntryKey, interfaceChildEntryKey);
211
212         return getInterfaceChildEntryFromConfigDS(intfChildIid, dataBroker);
213     }
214
215     public static InterfaceChildEntry getInterfaceChildEntryFromConfigDS(
216             InstanceIdentifier<InterfaceChildEntry> intfChildIid, DataBroker dataBroker) {
217         return IfmUtil.read(LogicalDatastoreType.CONFIGURATION, intfChildIid, dataBroker).orNull();
218     }
219
220     public static void createLportTagInterfaceMap(WriteTransaction t, String infName, Integer ifIndex) {
221         LOG.debug("creating lport tag to interface map for {}",infName);
222         InstanceIdentifier<IfIndexInterface> id = InstanceIdentifier.builder(IfIndexesInterfaceMap.class).child(IfIndexInterface.class, new IfIndexInterfaceKey(ifIndex)).build();
223         IfIndexInterface ifIndexInterface = new IfIndexInterfaceBuilder().setIfIndex(ifIndex).setKey(new IfIndexInterfaceKey(ifIndex)).setInterfaceName(infName).build();
224         t.put(LogicalDatastoreType.OPERATIONAL, id, ifIndexInterface, true);
225     }
226
227     public static void removeLportTagInterfaceMap(IdManagerService idManager, WriteTransaction t, String infName) {
228         // workaround to get the id to remove from lport tag interface map
229         Integer ifIndex = IfmUtil.allocateId(idManager, IfmConstants.IFM_IDPOOL_NAME, infName);
230         IfmUtil.releaseId(idManager, IfmConstants.IFM_IDPOOL_NAME, infName);
231         LOG.debug("removing lport tag to interface map for {}",infName);
232         InstanceIdentifier<IfIndexInterface> id = InstanceIdentifier.builder(IfIndexesInterfaceMap.class).child(IfIndexInterface.class, new IfIndexInterfaceKey(ifIndex)).build();
233         t.delete(LogicalDatastoreType.OPERATIONAL, id);
234     }
235
236     public static void addBridgeRefToBridgeInterfaceEntry(BigInteger dpId, OvsdbBridgeRef ovsdbBridgeRef, WriteTransaction t){
237         BridgeEntryKey bridgeEntryKey = new BridgeEntryKey(dpId);
238         InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier = getBridgeEntryIdentifier(bridgeEntryKey);
239
240         BridgeEntryBuilder bridgeEntryBuilder =
241                 new BridgeEntryBuilder().setKey(bridgeEntryKey).setBridgeReference(ovsdbBridgeRef);
242         t.merge(LogicalDatastoreType.CONFIGURATION, bridgeEntryInstanceIdentifier, bridgeEntryBuilder.build(), true);
243     }
244
245     public static void createBridgeRefEntry(BigInteger dpnId, InstanceIdentifier<?> bridgeIid,
246                                             WriteTransaction tx){
247         LOG.debug("Creating bridge ref entry for dpn: {} bridge: {}",
248                 dpnId, bridgeIid);
249         BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(dpnId);
250         InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
251                 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
252         BridgeRefEntryBuilder tunnelDpnBridgeEntryBuilder =
253                 new BridgeRefEntryBuilder().setKey(bridgeRefEntryKey).setDpid(dpnId)
254                         .setBridgeReference(new OvsdbBridgeRef(bridgeIid));
255         tx.put(LogicalDatastoreType.OPERATIONAL, bridgeEntryId, tunnelDpnBridgeEntryBuilder.build(), true);
256     }
257     public static void deleteBridgeRefEntry(BigInteger dpnId,
258                                             WriteTransaction tx) {
259         LOG.debug("Deleting bridge ref entry for dpn: {}",
260                 dpnId);
261         BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(dpnId);
262         InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
263                 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
264         tx.delete(LogicalDatastoreType.OPERATIONAL, bridgeEntryId);
265     }
266
267     public static void createTunnelToInterfaceMap(String tunnelInstanceId,
268                                                   String infName,
269                                                   WriteTransaction transaction) {
270         LOG.debug("creating tunnel instance identifier to interface map for {}",infName);
271         InstanceIdentifier<TunnelInstanceInterface> id = InstanceIdentifier.builder(TunnelInstanceInterfaceMap.class).
272                 child(TunnelInstanceInterface.class, new TunnelInstanceInterfaceKey(tunnelInstanceId)).build();
273         TunnelInstanceInterface tunnelInstanceInterface = new TunnelInstanceInterfaceBuilder().
274                 setTunnelInstanceIdentifier(tunnelInstanceId).setKey(new TunnelInstanceInterfaceKey(tunnelInstanceId)).setInterfaceName(infName).build();
275         transaction.put(LogicalDatastoreType.OPERATIONAL, id, tunnelInstanceInterface, true);
276
277     }
278
279     public static void createTunnelToInterfaceMap(String infName,InstanceIdentifier<Node> nodeId,
280                                                   WriteTransaction transaction,
281                                                   IfTunnel ifTunnel){
282         InstanceIdentifier<Tunnels> tunnelsInstanceIdentifier = org.opendaylight.genius.interfacemanager.renderer.hwvtep.utilities.SouthboundUtils.
283                 createTunnelsInstanceIdentifier(nodeId,
284                         ifTunnel.getTunnelSource(), ifTunnel.getTunnelDestination());
285         createTunnelToInterfaceMap(tunnelsInstanceIdentifier.toString(), infName, transaction);
286     }
287
288     public static void removeTunnelToInterfaceMap(InstanceIdentifier<Node> nodeId,
289                                                   WriteTransaction transaction,
290                                                   IfTunnel ifTunnel){
291         InstanceIdentifier<Tunnels> tunnelsInstanceIdentifier = org.opendaylight.genius.interfacemanager.renderer.hwvtep.utilities.SouthboundUtils.
292                 createTunnelsInstanceIdentifier(nodeId,
293                         ifTunnel.getTunnelSource(), ifTunnel.getTunnelDestination());
294         transaction.delete(LogicalDatastoreType.OPERATIONAL, tunnelsInstanceIdentifier);
295     }
296
297     public static String getInterfaceForTunnelInstanceIdentifier(String tunnelInstanceId,
298                                                                  DataBroker dataBroker) {
299         InstanceIdentifier<TunnelInstanceInterface> id = InstanceIdentifier.builder(TunnelInstanceInterfaceMap.class).
300                 child(TunnelInstanceInterface.class, new TunnelInstanceInterfaceKey(tunnelInstanceId)).build();
301         return IfmUtil.read(LogicalDatastoreType.OPERATIONAL, id, dataBroker).transform(
302                 TunnelInstanceInterface::getInterfaceName).orNull();
303     }
304
305     public static void deleteBridgeInterfaceEntry(BridgeEntryKey bridgeEntryKey, List<BridgeInterfaceEntry> bridgeInterfaceEntries,
306                                                   InstanceIdentifier<BridgeEntry> bridgeEntryIid,
307                                                   WriteTransaction transaction, String interfaceName){
308         BridgeInterfaceEntryKey bridgeInterfaceEntryKey =
309                 new BridgeInterfaceEntryKey(interfaceName);
310         InstanceIdentifier<BridgeInterfaceEntry> bridgeInterfaceEntryIid =
311                 InterfaceMetaUtils.getBridgeInterfaceEntryIdentifier(bridgeEntryKey,
312                         bridgeInterfaceEntryKey);
313
314         if (bridgeInterfaceEntries.size() <= 1) {
315             transaction.delete(LogicalDatastoreType.CONFIGURATION, bridgeEntryIid);
316         } else {
317             // No point deleting interface individually if bridge entry is being deleted
318             // Note: Will this cause issue in listener code? Does it expect separate notifications for two?
319             transaction.delete(LogicalDatastoreType.CONFIGURATION, bridgeInterfaceEntryIid);
320         }
321     }
322
323     // Cache Util methods
324
325     // Start: BridgeEntryCache
326     public static void addBridgeEntryToCache(BigInteger dpnId, BridgeEntry bridgeEntry) {
327         bridgeEntryMap.put(dpnId, bridgeEntry);
328     }
329
330     public static void addBridgeEntryToCache(BridgeEntry bridgeEntry) {
331         addBridgeEntryToCache(bridgeEntry.getKey().getDpid(), bridgeEntry);
332     }
333
334     public static void removeFromBridgeEntryCache(BigInteger dpnId) {
335         bridgeEntryMap.remove(dpnId);
336     }
337
338     public static void removeFromBridgeEntryCache(BridgeEntry bridgeEntry) {
339         removeFromBridgeEntryCache(bridgeEntry.getKey().getDpid());
340     }
341
342     public static BridgeEntry getBridgeEntryFromCache(BigInteger dpnId) {
343         return bridgeEntryMap.get(dpnId);
344     }
345     // End: Bridge Entry Cache
346
347     //Start: BridgeRefEntry Cache
348     public static void addBridgeRefEntryToCache(BigInteger dpnId, BridgeRefEntry bridgeRefEntry) {
349         bridgeRefEntryMap.put(dpnId, bridgeRefEntry);
350     }
351
352     public static void addBridgeRefEntryToCache(BridgeRefEntry bridgeRefEntry) {
353         addBridgeRefEntryToCache(bridgeRefEntry.getKey().getDpid(), bridgeRefEntry);
354     }
355
356     public static void removeFromBridgeRefEntryCache(BigInteger dpnId) {
357         bridgeRefEntryMap.remove(dpnId);
358     }
359
360     public static void removeFromBridgeRefEntryCache(BridgeRefEntry bridgeRefEntry) {
361         removeFromBridgeRefEntryCache(bridgeRefEntry.getKey().getDpid());
362     }
363
364     public static BridgeRefEntry getBridgeRefEntryFromCache(BigInteger dpnId) {
365         return bridgeRefEntryMap.get(dpnId);
366     }
367 }