2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 package org.opendaylight.genius.interfacemanager.commons;
10 import java.math.BigInteger;
11 import java.util.Collections;
12 import java.util.List;
13 import java.util.concurrent.ConcurrentHashMap;
14 import java.util.concurrent.ConcurrentMap;
15 import javax.inject.Inject;
16 import javax.inject.Singleton;
17 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
18 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
19 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
20 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
21 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
22 import org.opendaylight.genius.interfacemanager.IfmConstants;
23 import org.opendaylight.genius.interfacemanager.IfmUtil;
24 import org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.BatchingUtils;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.BridgeInterfaceInfo;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.BridgeRefInfo;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.IfIndexesInterfaceMap;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.InterfaceChildInfo;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.TunnelInstanceInterfaceMap;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterface;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterfaceBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterfaceKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntry;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntryKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntryKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntry;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntryBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntryKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntry;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryKey;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntry;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntryBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntryKey;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.tunnel.instance._interface.map.TunnelInstanceInterface;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.tunnel.instance._interface.map.TunnelInstanceInterfaceBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.tunnel.instance._interface.map.TunnelInstanceInterfaceKey;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.Tunnels;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
56 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
57 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
58 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
59 import org.slf4j.Logger;
60 import org.slf4j.LoggerFactory;
63 public final class InterfaceMetaUtils {
64 private static final Logger LOG = LoggerFactory.getLogger(InterfaceMetaUtils.class);
66 private final DataBroker dataBroker;
67 private final IdManagerService idManager;
68 private final BatchingUtils batchingUtils;
69 private final ConcurrentMap<BigInteger, BridgeEntry> bridgeEntryMap = new ConcurrentHashMap<>();
70 private final ConcurrentMap<BigInteger, BridgeRefEntry> bridgeRefEntryMap = new ConcurrentHashMap<>();
73 public InterfaceMetaUtils(DataBroker dataBroker, IdManagerService idManager, BatchingUtils batchingUtils) {
74 this.dataBroker = dataBroker;
75 this.idManager = idManager;
76 this.batchingUtils = batchingUtils;
79 public static InstanceIdentifier<BridgeRefEntry> getBridgeRefEntryIdentifier(BridgeRefEntryKey bridgeRefEntryKey) {
80 InstanceIdentifier.InstanceIdentifierBuilder<BridgeRefEntry> bridgeRefEntryInstanceIdentifierBuilder =
81 InstanceIdentifier.builder(BridgeRefInfo.class)
82 .child(BridgeRefEntry.class, bridgeRefEntryKey);
83 return bridgeRefEntryInstanceIdentifierBuilder.build();
86 public BridgeRefEntry getBridgeRefEntryFromOperDS(BigInteger dpId) {
87 BridgeRefEntry bridgeRefEntry = getBridgeRefEntryFromCache(dpId);
88 if (bridgeRefEntry != null) {
89 return bridgeRefEntry;
91 BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(dpId);
92 InstanceIdentifier<BridgeRefEntry> bridgeRefEntryIid = InterfaceMetaUtils
93 .getBridgeRefEntryIdentifier(bridgeRefEntryKey);
94 bridgeRefEntry = IfmUtil.read(LogicalDatastoreType.OPERATIONAL, bridgeRefEntryIid, dataBroker).orNull();
95 if (bridgeRefEntry != null) {
96 addBridgeRefEntryToCache(dpId, bridgeRefEntry);
98 return bridgeRefEntry;
101 public OvsdbBridgeRef getOvsdbBridgeRef(BigInteger dpId) {
103 BridgeRefEntry bridgeRefEntry = getBridgeRefEntryFromOperDS(dpId);
105 if (bridgeRefEntry == null) {
106 // bridge ref entry will be null if the bridge is disconnected from controller.
107 // In that case, fetch bridge reference from bridge interface entry config DS
108 BridgeEntry bridgeEntry = getBridgeEntryFromConfigDS(dpId);
109 if (bridgeEntry == null) {
112 return bridgeEntry.getBridgeReference();
114 return bridgeRefEntry.getBridgeReference();
117 public BridgeRefEntry getBridgeReferenceForInterface(Interface interfaceInfo) {
118 ParentRefs parentRefs = interfaceInfo.getAugmentation(ParentRefs.class);
119 BigInteger dpn = parentRefs.getDatapathNodeIdentifier();
120 return getBridgeRefEntryFromOperDS(dpn);
123 public boolean bridgeExists(BridgeRefEntry bridgeRefEntry) {
124 if (bridgeRefEntry != null && bridgeRefEntry.getBridgeReference() != null) {
125 InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid =
126 (InstanceIdentifier<OvsdbBridgeAugmentation>) bridgeRefEntry.getBridgeReference().getValue();
127 return IfmUtil.read(LogicalDatastoreType.OPERATIONAL, bridgeIid, dataBroker).isPresent();
132 public static InstanceIdentifier<BridgeEntry> getBridgeEntryIdentifier(BridgeEntryKey bridgeEntryKey) {
133 InstanceIdentifier.InstanceIdentifierBuilder<BridgeEntry> bridgeEntryIdBuilder =
134 InstanceIdentifier.builder(BridgeInterfaceInfo.class).child(BridgeEntry.class, bridgeEntryKey);
135 return bridgeEntryIdBuilder.build();
138 public BridgeEntry getBridgeEntryFromConfigDS(BigInteger dpnId) {
139 BridgeEntry bridgeEntry = getBridgeEntryFromCache(dpnId);
140 if (bridgeEntry != null) {
143 BridgeEntryKey bridgeEntryKey = new BridgeEntryKey(dpnId);
144 InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier =
145 InterfaceMetaUtils.getBridgeEntryIdentifier(bridgeEntryKey);
146 LOG.debug("Trying to retrieve bridge entry from config for Id: {}", bridgeEntryInstanceIdentifier);
147 bridgeEntry = readBridgeEntryFromConfigDS(bridgeEntryInstanceIdentifier);
148 if (bridgeEntry != null) {
149 addBridgeEntryToCache(dpnId, bridgeEntry);
154 public BridgeEntry getBridgeEntryFromConfigDS(InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier) {
155 BigInteger dpnId = bridgeEntryInstanceIdentifier.firstKeyOf(BridgeEntry.class).getDpid();
156 return getBridgeEntryFromConfigDS(dpnId);
159 private BridgeEntry readBridgeEntryFromConfigDS(
160 InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier) {
161 return IfmUtil.read(LogicalDatastoreType.CONFIGURATION, bridgeEntryInstanceIdentifier, dataBroker).orNull();
164 public static InstanceIdentifier<BridgeInterfaceEntry> getBridgeInterfaceEntryIdentifier(
165 BridgeEntryKey bridgeEntryKey, BridgeInterfaceEntryKey bridgeInterfaceEntryKey) {
166 return InstanceIdentifier.builder(BridgeInterfaceInfo.class)
167 .child(BridgeEntry.class, bridgeEntryKey)
168 .child(BridgeInterfaceEntry.class, bridgeInterfaceEntryKey).build();
172 public void createBridgeInterfaceEntryInConfigDS(BigInteger dpId, String childInterface) {
173 BridgeEntryKey bridgeEntryKey = new BridgeEntryKey(dpId);
174 BridgeInterfaceEntryKey bridgeInterfaceEntryKey = new BridgeInterfaceEntryKey(childInterface);
175 InstanceIdentifier<BridgeInterfaceEntry> bridgeInterfaceEntryIid =
176 InterfaceMetaUtils.getBridgeInterfaceEntryIdentifier(bridgeEntryKey, bridgeInterfaceEntryKey);
177 BridgeInterfaceEntryBuilder entryBuilder = new BridgeInterfaceEntryBuilder().setKey(bridgeInterfaceEntryKey)
178 .setInterfaceName(childInterface);
179 batchingUtils.write(bridgeInterfaceEntryIid, entryBuilder.build(), BatchingUtils.EntityType.DEFAULT_CONFIG);
182 public static InstanceIdentifier<InterfaceParentEntry> getInterfaceParentEntryIdentifier(
183 InterfaceParentEntryKey interfaceParentEntryKey) {
184 InstanceIdentifier.InstanceIdentifierBuilder<InterfaceParentEntry> intfIdBuilder =
185 InstanceIdentifier.builder(InterfaceChildInfo.class)
186 .child(InterfaceParentEntry.class, interfaceParentEntryKey);
187 return intfIdBuilder.build();
190 public static InstanceIdentifier<InterfaceChildEntry> getInterfaceChildEntryIdentifier(
191 InterfaceParentEntryKey interfaceParentEntryKey, InterfaceChildEntryKey interfaceChildEntryKey) {
192 InstanceIdentifier.InstanceIdentifierBuilder<InterfaceChildEntry> intfIdBuilder =
193 InstanceIdentifier.builder(InterfaceChildInfo.class)
194 .child(InterfaceParentEntry.class, interfaceParentEntryKey)
195 .child(InterfaceChildEntry.class, interfaceChildEntryKey);
196 return intfIdBuilder.build();
199 public InterfaceParentEntry getInterfaceParentEntryFromConfigDS(String interfaceName) {
200 InterfaceParentEntryKey interfaceParentEntryKey = new InterfaceParentEntryKey(interfaceName);
201 InterfaceParentEntry interfaceParentEntry = getInterfaceParentEntryFromConfigDS(interfaceParentEntryKey);
202 return interfaceParentEntry;
205 public InterfaceParentEntry getInterfaceParentEntryFromConfigDS(InterfaceParentEntryKey interfaceParentEntryKey) {
206 InstanceIdentifier<InterfaceParentEntry> intfParentIid =
207 getInterfaceParentEntryIdentifier(interfaceParentEntryKey);
209 return getInterfaceParentEntryFromConfigDS(intfParentIid);
212 public InterfaceParentEntry getInterfaceParentEntryFromConfigDS(InstanceIdentifier<InterfaceParentEntry> intfId) {
213 return IfmUtil.read(LogicalDatastoreType.CONFIGURATION, intfId, dataBroker).orNull();
216 public InterfaceChildEntry getInterfaceChildEntryFromConfigDS(
217 InterfaceParentEntryKey interfaceParentEntryKey, InterfaceChildEntryKey interfaceChildEntryKey) {
218 InstanceIdentifier<InterfaceChildEntry> intfChildIid =
219 getInterfaceChildEntryIdentifier(interfaceParentEntryKey, interfaceChildEntryKey);
221 return getInterfaceChildEntryFromConfigDS(intfChildIid);
224 public InterfaceChildEntry getInterfaceChildEntryFromConfigDS(
225 InstanceIdentifier<InterfaceChildEntry> intfChildIid) {
226 return IfmUtil.read(LogicalDatastoreType.CONFIGURATION, intfChildIid, dataBroker).orNull();
229 public void createLportTagInterfaceMap(String infName, Integer ifIndex) {
230 LOG.debug("creating lport tag to interface map for {} ifIndex {}",infName, ifIndex);
231 InstanceIdentifier<IfIndexInterface> id = InstanceIdentifier.builder(IfIndexesInterfaceMap.class)
232 .child(IfIndexInterface.class, new IfIndexInterfaceKey(ifIndex)).build();
233 IfIndexInterface ifIndexInterface = new IfIndexInterfaceBuilder().setIfIndex(ifIndex)
234 .setKey(new IfIndexInterfaceKey(ifIndex)).setInterfaceName(infName).build();
235 batchingUtils.write(id, ifIndexInterface, BatchingUtils.EntityType.DEFAULT_OPERATIONAL);
238 public int removeLportTagInterfaceMap(WriteTransaction tx, String infName) {
239 // workaround to get the id to remove from lport tag interface map
240 Integer ifIndex = IfmUtil.allocateId(idManager, IfmConstants.IFM_IDPOOL_NAME, infName);
241 IfmUtil.releaseId(idManager, IfmConstants.IFM_IDPOOL_NAME, infName);
242 LOG.debug("removing lport tag to interface map for {}",infName);
243 InstanceIdentifier<IfIndexInterface> id = InstanceIdentifier.builder(IfIndexesInterfaceMap.class)
244 .child(IfIndexInterface.class, new IfIndexInterfaceKey(ifIndex)).build();
245 tx.delete(LogicalDatastoreType.OPERATIONAL, id);
249 public static void addBridgeRefToBridgeInterfaceEntry(BigInteger dpId, OvsdbBridgeRef ovsdbBridgeRef,
250 WriteTransaction tx) {
251 BridgeEntryKey bridgeEntryKey = new BridgeEntryKey(dpId);
252 InstanceIdentifier<BridgeEntry> bridgeEntryInstanceIdentifier = getBridgeEntryIdentifier(bridgeEntryKey);
254 BridgeEntryBuilder bridgeEntryBuilder =
255 new BridgeEntryBuilder().setKey(bridgeEntryKey).setBridgeReference(ovsdbBridgeRef);
256 tx.merge(LogicalDatastoreType.CONFIGURATION, bridgeEntryInstanceIdentifier, bridgeEntryBuilder.build(), true);
259 public static void createBridgeRefEntry(BigInteger dpnId, InstanceIdentifier<?> bridgeIid,
260 WriteTransaction tx) {
261 LOG.debug("Creating bridge ref entry for dpn: {} bridge: {}",
263 BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(dpnId);
264 InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
265 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
266 BridgeRefEntryBuilder tunnelDpnBridgeEntryBuilder =
267 new BridgeRefEntryBuilder().setKey(bridgeRefEntryKey).setDpid(dpnId)
268 .setBridgeReference(new OvsdbBridgeRef(bridgeIid));
269 tx.put(LogicalDatastoreType.OPERATIONAL, bridgeEntryId, tunnelDpnBridgeEntryBuilder.build(), true);
272 public static void deleteBridgeRefEntry(BigInteger dpnId,
273 WriteTransaction tx) {
274 LOG.debug("Deleting bridge ref entry for dpn: {}",
276 BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(dpnId);
277 InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
278 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
279 tx.delete(LogicalDatastoreType.OPERATIONAL, bridgeEntryId);
282 public static void createTunnelToInterfaceMap(String tunnelInstanceId,
284 WriteTransaction transaction) {
285 LOG.debug("creating tunnel instance identifier to interface map for {}",infName);
286 InstanceIdentifier<TunnelInstanceInterface> id = InstanceIdentifier.builder(TunnelInstanceInterfaceMap.class)
287 .child(TunnelInstanceInterface.class, new TunnelInstanceInterfaceKey(tunnelInstanceId)).build();
288 TunnelInstanceInterface tunnelInstanceInterface = new TunnelInstanceInterfaceBuilder()
289 .setTunnelInstanceIdentifier(tunnelInstanceId).setKey(new TunnelInstanceInterfaceKey(tunnelInstanceId))
290 .setInterfaceName(infName).build();
291 transaction.put(LogicalDatastoreType.OPERATIONAL, id, tunnelInstanceInterface, true);
295 public static void createTunnelToInterfaceMap(String infName,InstanceIdentifier<Node> nodeId,
296 WriteTransaction transaction,
298 InstanceIdentifier<Tunnels> tunnelsInstanceIdentifier = org.opendaylight.genius.interfacemanager.renderer
299 .hwvtep.utilities.SouthboundUtils.createTunnelsInstanceIdentifier(nodeId,
300 ifTunnel.getTunnelSource(), ifTunnel.getTunnelDestination());
301 createTunnelToInterfaceMap(tunnelsInstanceIdentifier.toString(), infName, transaction);
304 public static void removeTunnelToInterfaceMap(InstanceIdentifier<Node> nodeId,
305 WriteTransaction transaction,
307 InstanceIdentifier<Tunnels> tunnelsInstanceIdentifier = org.opendaylight.genius.interfacemanager.renderer
308 .hwvtep.utilities.SouthboundUtils.createTunnelsInstanceIdentifier(
309 nodeId, ifTunnel.getTunnelSource(), ifTunnel.getTunnelDestination());
310 transaction.delete(LogicalDatastoreType.OPERATIONAL, tunnelsInstanceIdentifier);
313 public static String getInterfaceForTunnelInstanceIdentifier(String tunnelInstanceId,
314 ReadTransaction tx) throws ReadFailedException {
315 InstanceIdentifier<TunnelInstanceInterface> id = InstanceIdentifier.builder(TunnelInstanceInterfaceMap.class)
316 .child(TunnelInstanceInterface.class, new TunnelInstanceInterfaceKey(tunnelInstanceId)).build();
317 return tx.read(LogicalDatastoreType.OPERATIONAL, id).checkedGet().toJavaUtil().map(
318 TunnelInstanceInterface::getInterfaceName).orElse(null);
321 public void deleteBridgeInterfaceEntry(BridgeEntryKey bridgeEntryKey,
322 List<BridgeInterfaceEntry> bridgeInterfaceEntries, InstanceIdentifier<BridgeEntry> bridgeEntryIid,
323 String interfaceName) {
324 BridgeInterfaceEntryKey bridgeInterfaceEntryKey =
325 new BridgeInterfaceEntryKey(interfaceName);
326 InstanceIdentifier<BridgeInterfaceEntry> bridgeInterfaceEntryIid =
327 InterfaceMetaUtils.getBridgeInterfaceEntryIdentifier(bridgeEntryKey,
328 bridgeInterfaceEntryKey);
330 if (bridgeInterfaceEntries.size() <= 1) {
331 batchingUtils.delete(bridgeEntryIid, BatchingUtils.EntityType.DEFAULT_CONFIG);
333 // No point deleting interface individually if bridge entry is being deleted
334 // Note: Will this cause issue in listener code? Does it expect separate notifications for two?
335 batchingUtils.delete(bridgeInterfaceEntryIid, BatchingUtils.EntityType.DEFAULT_CONFIG);
339 public List<TerminationPoint> getTerminationPointsOnBridge(BigInteger dpnId) {
340 BridgeRefEntry bridgeRefEntry = getBridgeRefEntryFromOperDS(dpnId);
341 if (bridgeRefEntry == null || bridgeRefEntry.getBridgeReference() == null) {
342 LOG.debug("BridgeRefEntry for DPNID {} not found", dpnId);
343 return Collections.emptyList();
345 InstanceIdentifier<Node> nodeIid =
346 bridgeRefEntry.getBridgeReference().getValue().firstIdentifierOf(Node.class);
347 com.google.common.base.Optional<Node> optNode =
348 IfmUtil.read(LogicalDatastoreType.OPERATIONAL, nodeIid, dataBroker);
349 if (optNode.isPresent()) {
350 return optNode.get().getTerminationPoint();
352 return Collections.emptyList();
355 // Cache Util methods
357 // Start: BridgeEntryCache
358 public void addBridgeEntryToCache(BigInteger dpnId, BridgeEntry bridgeEntry) {
359 bridgeEntryMap.put(dpnId, bridgeEntry);
362 public void addBridgeEntryToCache(BridgeEntry bridgeEntry) {
363 addBridgeEntryToCache(bridgeEntry.getKey().getDpid(), bridgeEntry);
366 public void removeFromBridgeEntryCache(BigInteger dpnId) {
367 bridgeEntryMap.remove(dpnId);
370 public void removeFromBridgeEntryCache(BridgeEntry bridgeEntry) {
371 removeFromBridgeEntryCache(bridgeEntry.getKey().getDpid());
374 public BridgeEntry getBridgeEntryFromCache(BigInteger dpnId) {
375 return bridgeEntryMap.get(dpnId);
377 // End: Bridge Entry Cache
379 //Start: BridgeRefEntry Cache
380 public void addBridgeRefEntryToCache(BigInteger dpnId, BridgeRefEntry bridgeRefEntry) {
381 bridgeRefEntryMap.put(dpnId, bridgeRefEntry);
384 public void addBridgeRefEntryToCache(BridgeRefEntry bridgeRefEntry) {
385 addBridgeRefEntryToCache(bridgeRefEntry.getKey().getDpid(), bridgeRefEntry);
388 public void removeFromBridgeRefEntryCache(BigInteger dpnId) {
389 bridgeRefEntryMap.remove(dpnId);
392 public void removeFromBridgeRefEntryCache(BridgeRefEntry bridgeRefEntry) {
393 removeFromBridgeRefEntryCache(bridgeRefEntry.getKey().getDpid());
396 public BridgeRefEntry getBridgeRefEntryFromCache(BigInteger dpnId) {
397 return bridgeRefEntryMap.get(dpnId);