From bf763e40df1a5d0e6831e1d8a6005bd2d721b8fa Mon Sep 17 00:00:00 2001 From: Vishal Thapar Date: Thu, 21 May 2015 15:40:13 +0530 Subject: [PATCH] Bug 3292: Invalid Range exception in setDpnId 1. Change dpnId from long to BigInteger Change-Id: I1235500337561784bdf836d2dd8f486b598c416d Signed-off-by: Vishal Thapar --- .../fibmanager/api/IFibManager.java | 6 +- .../vpnservice/fibmanager/FibManager.java | 69 ++++++------ .../fibmanager/FibManagerProvider.java | 5 +- .../fibmanager/FibNodeCapableListener.java | 4 +- .../fibmanager/test/FibManagerTest.java | 27 +++-- .../interfaces/IInterfaceManager.java | 6 +- .../vpnservice/interfacemgr/IfmUtil.java | 4 +- .../interfacemgr/InterfaceManager.java | 16 +-- .../interfacemgr/InterfacemgrProvider.java | 4 +- .../interfacemgr/test/IfmUtilTest.java | 4 +- .../mdsalutil/AbstractSwitchEntity.java | 19 ++-- .../vpnservice/mdsalutil/FlowEntity.java | 4 +- .../vpnservice/mdsalutil/GroupEntity.java | 7 +- .../vpnservice/mdsalutil/MDSALUtil.java | 22 ++-- .../interfaces/IMdsalApiManager.java | 7 +- .../mdsalutil/internal/MDSALManager.java | 20 ++-- .../mdsalutil/internal/MDSALUtilProvider.java | 15 +-- .../vpnservice/test/MdSalUtilTest.java | 13 ++- .../src/main/yang/l3nexthop.yang | 100 +++++++++--------- .../vpnservice/nexthopmgr/NexthopManager.java | 38 +++---- .../OdlInterfaceChangeListener.java | 17 ++- .../nexthopmgr/test/NexthopManagerTest.java | 5 +- .../vpnmanager/api/IVpnManager.java | 5 +- .../vpnservice/VpnInterfaceManager.java | 36 +++---- .../vpnservice/VpnserviceProvider.java | 2 +- 25 files changed, 237 insertions(+), 218 deletions(-) diff --git a/fibmanager/fibmanager-api/src/main/java/org/opendaylight/fibmanager/api/IFibManager.java b/fibmanager/fibmanager-api/src/main/java/org/opendaylight/fibmanager/api/IFibManager.java index 4c16d2fe..ab97db77 100644 --- a/fibmanager/fibmanager-api/src/main/java/org/opendaylight/fibmanager/api/IFibManager.java +++ b/fibmanager/fibmanager-api/src/main/java/org/opendaylight/fibmanager/api/IFibManager.java @@ -1,6 +1,8 @@ package org.opendaylight.fibmanager.api; +import java.math.BigInteger; + public interface IFibManager { - void populateFibOnNewDpn(long dpnId, long vpnId, String rd); - void cleanUpDpnForVpn(long dpnId, long vpnId, String rd); + void populateFibOnNewDpn(BigInteger dpnId, long vpnId, String rd); + void cleanUpDpnForVpn(BigInteger dpnId, long vpnId, String rd); } diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java index bfb69d63..363536b4 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java @@ -7,15 +7,26 @@ */ package org.opendaylight.vpnservice.fibmanager; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import com.google.common.util.concurrent.FutureCallback; - +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.vpnmanager.api.IVpnManager; import org.opendaylight.vpnservice.AbstractDataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.vpnservice.mdsalutil.ActionInfo; import org.opendaylight.vpnservice.mdsalutil.ActionType; import org.opendaylight.vpnservice.mdsalutil.FlowEntity; @@ -30,6 +41,7 @@ import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance; import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.VpnInstance1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntry; @@ -41,25 +53,10 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; import org.opendaylight.yangtools.yang.binding.RpcService; import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Optional; - -import java.math.BigInteger; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; public class FibManager extends AbstractDataChangeListener implements AutoCloseable{ private static final Logger LOG = LoggerFactory.getLogger(FibManager.class); @@ -179,13 +176,13 @@ public class FibManager extends AbstractDataChangeListener implements Long vpnId = getVpnId(vrfTableKey.getRouteDistinguisher()); Preconditions.checkNotNull(vpnId, "Vpn Instance not available!"); - Collection dpns = vpnmanager.getDpnsForVpn(vpnId); - for (Long dpId : dpns) { + Collection dpns = vpnmanager.getDpnsForVpn(vpnId); + for (BigInteger dpId : dpns) { addRouteInternal(dpId, vpnId, vrfTableKey, vrfEntry); } } - private void addRouteInternal(final long dpId, final long vpnId, final VrfTablesKey vrfTableKey, + private void addRouteInternal(final BigInteger dpId, final long vpnId, final VrfTablesKey vrfTableKey, final VrfEntry vrfEntry) { String rd = vrfTableKey.getRouteDistinguisher(); LOG.debug("adding route " + vrfEntry.getDestPrefix() + " " + rd); @@ -223,13 +220,13 @@ public class FibManager extends AbstractDataChangeListener implements Long vpnId = getVpnId(vrfTableKey.getRouteDistinguisher()); Preconditions.checkNotNull(vpnId, "Vpn Instance not available!"); - Collection dpns = vpnmanager.getDpnsForVpn(vpnId); - for (Long dpId : dpns) { + Collection dpns = vpnmanager.getDpnsForVpn(vpnId); + for (BigInteger dpId : dpns) { deleteRoute(dpId, vpnId, vrfTableKey, vrfEntry); } } - public void deleteRoute(final long dpId, final long vpnId, final VrfTablesKey vrfTableKey, + public void deleteRoute(final BigInteger dpId, final long vpnId, final VrfTablesKey vrfTableKey, final VrfEntry vrfEntry) { LOG.debug("deleting route "+ vrfEntry.getDestPrefix() + " "+vpnId); String rd = vrfTableKey.getRouteDistinguisher(); @@ -263,7 +260,7 @@ public class FibManager extends AbstractDataChangeListener implements + ((rawIpAddress[2] & 0xFF) << (1 * 8)) + (rawIpAddress[3] & 0xFF)) & 0xffffffffL; } - private void makeConnectedRoute(long dpId, long vpnId, VrfEntry vrfEntry, String rd, + private void makeConnectedRoute(BigInteger dpId, long vpnId, VrfEntry vrfEntry, String rd, long groupId, int addOrRemove) { LOG.trace("makeConnectedRoute: vrfEntry {}",vrfEntry); String values[] = vrfEntry.getDestPrefix().split("/"); @@ -317,7 +314,7 @@ public class FibManager extends AbstractDataChangeListener implements } } - private void makeLFibTableEntry(long dpId, long label, long groupId, + private void makeLFibTableEntry(BigInteger dpId, long label, long groupId, String nextHop, int addOrRemove) { List matches = new ArrayList(); matches.add(new MatchInfo(MatchFieldType.eth_type, @@ -345,7 +342,7 @@ public class FibManager extends AbstractDataChangeListener implements LOG.debug("LFIB Entry for dpID {} : label : {} group {} modified successfully {}",dpId, label, groupId ); } - private void deleteLocalAdjacency(final long dpId, final long vpnId, final VrfEntry vrfEntry) { + private void deleteLocalAdjacency(final BigInteger dpId, final long vpnId, final VrfEntry vrfEntry) { LOG.trace("deleteLocalAdjacency called with dpid {}, vpnId{}, VrfEntry {}",dpId, vpnId, vrfEntry);; try { Future> result = @@ -365,7 +362,7 @@ public class FibManager extends AbstractDataChangeListener implements } } - public void populateFibOnNewDpn(long dpnId, long vpnId, String rd) { + public void populateFibOnNewDpn(BigInteger dpnId, long vpnId, String rd) { LOG.trace("New dpn {} for vpn {} : populateFibOnNewDpn", dpnId, rd); InstanceIdentifier id = buildVrfId(rd); Optional vrfTable = read(LogicalDatastoreType.CONFIGURATION, id); @@ -376,7 +373,7 @@ public class FibManager extends AbstractDataChangeListener implements } } - public void cleanUpDpnForVpn(long dpnId, long vpnId, String rd) { + public void cleanUpDpnForVpn(BigInteger dpnId, long vpnId, String rd) { LOG.trace("Remove dpn {} for vpn {} : cleanUpDpnForVpn", dpnId, rd); InstanceIdentifier id = buildVrfId(rd); Optional vrfTable = read(LogicalDatastoreType.CONFIGURATION, id); @@ -394,21 +391,21 @@ public class FibManager extends AbstractDataChangeListener implements return id; } - private String getFlowRef(long dpnId, short tableId, long label, String nextHop) { + private String getFlowRef(BigInteger dpnId, short tableId, long label, String nextHop) { return new StringBuilder(64).append(FLOWID_PREFIX).append(dpnId).append(NwConstants.FLOWID_SEPARATOR) .append(tableId).append(NwConstants.FLOWID_SEPARATOR) .append(label).append(NwConstants.FLOWID_SEPARATOR) .append(nextHop).toString(); } - private String getFlowRef(long dpnId, short tableId, String rd, InetAddress destPrefix) { + private String getFlowRef(BigInteger dpnId, short tableId, String rd, InetAddress destPrefix) { return new StringBuilder(64).append(FLOWID_PREFIX).append(dpnId).append(NwConstants.FLOWID_SEPARATOR) .append(tableId).append(NwConstants.FLOWID_SEPARATOR) .append(rd).append(NwConstants.FLOWID_SEPARATOR) .append(destPrefix.getHostAddress()).toString(); } - protected GetEgressPointerOutput resolveAdjacency(final long dpId, final long vpnId, + protected GetEgressPointerOutput resolveAdjacency(final BigInteger dpId, final long vpnId, final VrfEntry vrfEntry) { GetEgressPointerOutput adjacency = null; LOG.trace("resolveAdjacency called with dpid {}, vpnId{}, VrfEntry {}",dpId, vpnId, vrfEntry);; @@ -450,12 +447,12 @@ public class FibManager extends AbstractDataChangeListener implements return vpnId; } - public void processNodeAdd(long dpnId) { + public void processNodeAdd(BigInteger dpnId) { LOG.debug("Received notification to install TableMiss entries for dpn {} ", dpnId); makeTableMissFlow(dpnId, NwConstants.ADD_FLOW); } - private void makeTableMissFlow(long dpnId, int addOrRemove) { + private void makeTableMissFlow(BigInteger dpnId, int addOrRemove) { final BigInteger COOKIE_TABLE_MISS = new BigInteger("1030000", 16); // Instruction to punt to controller List instructions = new ArrayList(); @@ -482,7 +479,7 @@ public class FibManager extends AbstractDataChangeListener implements } } - private String getFlowRef(long dpnId, short tableId, int tableMiss) { + private String getFlowRef(BigInteger dpnId, short tableId, int tableMiss) { return new StringBuffer().append(FLOWID_PREFIX).append(dpnId).append(NwConstants.FLOWID_SEPARATOR) .append(tableId).append(NwConstants.FLOWID_SEPARATOR).append(tableMiss) .append(FLOWID_PREFIX).toString(); diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java index aef8ce5d..e8f469f2 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java @@ -7,6 +7,7 @@ */ package org.opendaylight.vpnservice.fibmanager; +import java.math.BigInteger; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; @@ -59,12 +60,12 @@ public class FibManagerProvider implements BindingAwareProvider, IFibManager, Au } @Override - public void populateFibOnNewDpn(long dpnId, long vpnId, String rd) { + public void populateFibOnNewDpn(BigInteger dpnId, long vpnId, String rd) { fibManager.populateFibOnNewDpn(dpnId, vpnId, rd); } @Override - public void cleanUpDpnForVpn(long dpnId, long vpnId, String rd) { + public void cleanUpDpnForVpn(BigInteger dpnId, long vpnId, String rd) { fibManager.cleanUpDpnForVpn(dpnId, vpnId, rd); } } diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibNodeCapableListener.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibNodeCapableListener.java index 26bc947e..55c3ee27 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibNodeCapableListener.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibNodeCapableListener.java @@ -1,5 +1,7 @@ package org.opendaylight.vpnservice.fibmanager; +import java.math.BigInteger; + import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; @@ -57,7 +59,7 @@ public class FibNodeCapableListener extends AbstractDataChangeListener identifier, FlowCapableNode node) { LOG.trace("FlowCapableNode Added: key: " + identifier + ", value=" + node ); NodeKey nodeKey = identifier.firstKeyOf(Node.class, NodeKey.class); - long dpnId = MDSALUtil.getDpnIdFromNodeName(nodeKey.getId()); + BigInteger dpnId = MDSALUtil.getDpnIdFromNodeName(nodeKey.getId()); fibManager.processNodeAdd(dpnId); } diff --git a/fibmanager/fibmanager-impl/src/test/java/org/opendaylight/vpnservice/fibmanager/test/FibManagerTest.java b/fibmanager/fibmanager-impl/src/test/java/org/opendaylight/vpnservice/fibmanager/test/FibManagerTest.java index 6af4c433..49b0645a 100644 --- a/fibmanager/fibmanager-impl/src/test/java/org/opendaylight/vpnservice/fibmanager/test/FibManagerTest.java +++ b/fibmanager/fibmanager-impl/src/test/java/org/opendaylight/vpnservice/fibmanager/test/FibManagerTest.java @@ -7,27 +7,25 @@ */ package org.opendaylight.vpnservice.fibmanager.test; +import java.math.BigInteger; + import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; - import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; - import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; - import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; - import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -85,19 +83,20 @@ public class FibManagerTest { MockDataChangedEvent dataChangeEvent; FibManager fibmgr; - Long EgressPointer = 11L; + private static final Long EgressPointer = 11L; VrfEntry vrfEntry; InstanceIdentifier identifier; VrfEntryBuilder vrfbuilder; - String rd = "routeDis"; - String prefix = "0.1.2.3"; - String nexthop = "1.1.1.1"; - int label = 10; - List Dpns; + private static final String rd = "routeDis"; + private static final String prefix = "0.1.2.3"; + private static final String nexthop = "1.1.1.1"; + private static final int label = 10; + List Dpns; + private static final long vpnId = 101L; private void SetupMocks() { - Dpns = new ArrayList(); - Dpns.add(100000L); + Dpns = new ArrayList(); + Dpns.add(BigInteger.valueOf(100000L)); identifier = buildVrfEntryId(rd, prefix); vrfEntry = buildVrfEntry(rd, prefix, nexthop, label); fibmgr.setMdsalManager(mdsalManager); @@ -117,13 +116,13 @@ public class FibManagerTest { dataChangeEvent = new MockDataChangedEvent(); vrfbuilder = new VrfEntryBuilder(); fibmgr = new FibManager(dataBroker, l3nexthopService) { - protected GetEgressPointerOutput resolveAdjacency(final long dpId, final long vpnId, + protected GetEgressPointerOutput resolveAdjacency(final BigInteger dpId, final long vpnId, final VrfEntry vrfEntry) { return adjacency; } protected Long getVpnId(String rd) { - return 101L; + return vpnId; } }; SetupMocks(); diff --git a/interfacemgr/interfacemgr-api/src/main/java/org/opendaylight/vpnservice/interfacemgr/interfaces/IInterfaceManager.java b/interfacemgr/interfacemgr-api/src/main/java/org/opendaylight/vpnservice/interfacemgr/interfaces/IInterfaceManager.java index 69be7cfe..a0a26d66 100644 --- a/interfacemgr/interfacemgr-api/src/main/java/org/opendaylight/vpnservice/interfacemgr/interfaces/IInterfaceManager.java +++ b/interfacemgr/interfacemgr-api/src/main/java/org/opendaylight/vpnservice/interfacemgr/interfaces/IInterfaceManager.java @@ -8,6 +8,8 @@ package org.opendaylight.vpnservice.interfacemgr.interfaces; +import java.math.BigInteger; + import java.util.List; import org.opendaylight.vpnservice.mdsalutil.ActionInfo; import org.opendaylight.vpnservice.mdsalutil.MatchInfo; @@ -15,8 +17,8 @@ import org.opendaylight.vpnservice.mdsalutil.MatchInfo; public interface IInterfaceManager { public Long getPortForInterface(String ifName); - public long getDpnForInterface(String ifName); - public String getEndpointIpForDpn(long dpnId); + public BigInteger getDpnForInterface(String ifName); + public String getEndpointIpForDpn(BigInteger dpnId); public List getInterfaceIngressRule(String ifName); public List getInterfaceEgressActions(String ifName); diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java index 2d264739..c36df7f3 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java @@ -7,6 +7,8 @@ */ package org.opendaylight.vpnservice.interfacemgr; +import java.math.BigInteger; + import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; @@ -30,7 +32,7 @@ public class IfmUtil { } - public static NodeId buildDpnNodeId(long dpnId) { + public static NodeId buildDpnNodeId(BigInteger dpnId) { return new NodeId(IfmConstants.OF_URI_PREFIX + dpnId); } diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java index d494ab55..d8f77f42 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java @@ -7,6 +7,8 @@ */ package org.opendaylight.vpnservice.interfacemgr; +import java.math.BigInteger; + import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; @@ -432,19 +434,19 @@ public class InterfaceManager extends AbstractDataChangeListener impl return getPortNumForInterface(iface); } - long getDpnForInterface(String ifName) { + BigInteger getDpnForInterface(String ifName) { Interface iface = getInterfaceByIfName(ifName); try { NodeConnector port = getNodeConnectorFromDataStore(iface); //TODO: This should be an MDSAL Util method - return Long.parseLong(IfmUtil.getDpnFromNodeConnectorId(port.getId())); + return new BigInteger(IfmUtil.getDpnFromNodeConnectorId(port.getId())); } catch (NullPointerException e) { LOG.error("dpn for Interface {} not found", ifName); } - return 0L; + return BigInteger.ZERO; } - String getEndpointIpForDpn(long dpnId) { + String getEndpointIpForDpn(BigInteger dpnId) { //TODO: This should be MDSAL Util function NodeId dpnNodeId = IfmUtil.buildDpnNodeId(dpnId); return dbDpnEndpoints.get(dpnNodeId); @@ -454,9 +456,9 @@ public class InterfaceManager extends AbstractDataChangeListener impl Interface iface = getInterfaceByIfName(ifName); List matches = new ArrayList(); Class ifType = iface.getType(); - long dpn = this.getDpnForInterface(ifName); + BigInteger dpn = this.getDpnForInterface(ifName); long portNo = this.getPortNumForInterface(iface).longValue(); - matches.add(new MatchInfo(MatchFieldType.in_port, new long[] {dpn, portNo})); + matches.add(new MatchInfo(MatchFieldType.in_port, new BigInteger[] {dpn, BigInteger.valueOf(portNo)})); if (ifType.isInstance(L2vlan.class)) { IfL2vlan vlanIface = iface.getAugmentation(IfL2vlan.class); @@ -486,7 +488,7 @@ public class InterfaceManager extends AbstractDataChangeListener impl List listActionInfo = new ArrayList(); Class ifType = iface.getType(); - long dpn = this.getDpnForInterface(ifName); + BigInteger dpn = this.getDpnForInterface(ifName); long portNo = this.getPortNumForInterface(iface).longValue(); if (iface.isEnabled()) { diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java index 9a04dae5..b1b65b72 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java @@ -76,12 +76,12 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable } @Override - public long getDpnForInterface(String ifName) { + public BigInteger getDpnForInterface(String ifName) { return interfaceManager.getDpnForInterface(ifName); } @Override - public String getEndpointIpForDpn(long dpnId) { + public String getEndpointIpForDpn(BigInteger dpnId) { return interfaceManager.getEndpointIpForDpn(dpnId); } diff --git a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/IfmUtilTest.java b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/IfmUtilTest.java index f41b677c..bc30c100 100644 --- a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/IfmUtilTest.java +++ b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/IfmUtilTest.java @@ -11,6 +11,8 @@ package org.opendaylight.vpnservice.interfacemgr.test; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; +import java.math.BigInteger; + import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -30,7 +32,7 @@ public class IfmUtilTest { @Test public void testDpnConversions() { - String NodeId = IfmUtil.buildDpnNodeId(101L).getValue(); + String NodeId = IfmUtil.buildDpnNodeId(BigInteger.valueOf(101)).getValue(); assertEquals("openflow:101", NodeId); when(ncId.getValue()).thenReturn("openflow:101:11"); assertEquals("101",IfmUtil.getDpnFromNodeConnectorId(ncId)); diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractSwitchEntity.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractSwitchEntity.java index b8331807..3310b095 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractSwitchEntity.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractSwitchEntity.java @@ -7,29 +7,30 @@ */ package org.opendaylight.vpnservice.mdsalutil; +import java.math.BigInteger; + public class AbstractSwitchEntity { private static final long serialVersionUID = 1L; - private long m_lDpnId; - + private BigInteger m_dpnId; - public AbstractSwitchEntity(long lDpnId) { - m_lDpnId = lDpnId; + public AbstractSwitchEntity(BigInteger dpnId) { + m_dpnId = dpnId; } @Override public String toString() { - return "AbstractSwitchEntity [m_lDpnId=" + m_lDpnId + " ]"; + return "AbstractSwitchEntity [m_lDpnId=" + m_dpnId + " ]"; } - public long getDpnId() { - return m_lDpnId; + public BigInteger getDpnId() { + return m_dpnId; } - public void setDpnId(long lDpnId) { - m_lDpnId = lDpnId; + public void setDpnId(BigInteger dpnId) { + m_dpnId = dpnId; } } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/FlowEntity.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/FlowEntity.java index 9f15fa3b..aca5f3d5 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/FlowEntity.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/FlowEntity.java @@ -34,8 +34,8 @@ public class FlowEntity extends AbstractSwitchEntity { private transient FlowBuilder m_flowBuilder; - public FlowEntity(long lDpnId) { - super(lDpnId); + public FlowEntity(BigInteger dpnId) { + super(dpnId); } @Override diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java index 345569cb..d51b24bc 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java @@ -7,8 +7,9 @@ */ package org.opendaylight.vpnservice.mdsalutil; -import java.util.List; +import java.math.BigInteger; +import java.util.List; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder; @@ -24,8 +25,8 @@ public class GroupEntity extends AbstractSwitchEntity { private transient GroupBuilder m_groupBuilder; - public GroupEntity(long lDpnId) { - super(lDpnId); + public GroupEntity(BigInteger dpnId) { + super(dpnId); } @Override diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java index 7b99a66a..1f09d8bc 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java @@ -65,7 +65,7 @@ public class MDSALUtil { new ArrayList()).build(); private static final Match EMPTY_Matches = new MatchBuilder().build(); - public static FlowEntity buildFlowEntity(long dpnId, short tableId, String flowId, int priority, String flowName, + public static FlowEntity buildFlowEntity(BigInteger dpnId, short tableId, String flowId, int priority, String flowName, int idleTimeOut, int hardTimeOut, BigInteger cookie, List listMatchInfo, List listInstructionInfo) { @@ -102,7 +102,7 @@ public class MDSALUtil { .setCookie(new FlowCookie(cookie)).build(); } - public static GroupEntity buildGroupEntity(long dpnId, long groupId, String groupName, GroupTypes groupType, + public static GroupEntity buildGroupEntity(BigInteger dpnId, long groupId, String groupName, GroupTypes groupType, List listBucketInfo) { GroupEntity groupEntity = new GroupEntity(dpnId); @@ -115,7 +115,7 @@ public class MDSALUtil { return groupEntity; } - public static TransmitPacketInput getPacketOutDefault(List actionInfos, byte[] payload, long dpnId) { + public static TransmitPacketInput getPacketOutDefault(List actionInfos, byte[] payload, BigInteger dpnId) { return new TransmitPacketInputBuilder() .setAction(buildActions(actionInfos)) .setPayload(payload) @@ -217,11 +217,11 @@ public class MDSALUtil { } // TODO: Check the port const - public static NodeConnectorRef getDefaultNodeConnRef(long nDpId) { + public static NodeConnectorRef getDefaultNodeConnRef(BigInteger nDpId) { return getNodeConnRef(NODE_PREFIX + SEPARATOR + nDpId, "0xfffffffd"); } - public static NodeConnectorRef getNodeConnRef(long nDpId, String port) { + public static NodeConnectorRef getNodeConnRef(BigInteger nDpId, String port) { return getNodeConnRef(NODE_PREFIX + SEPARATOR + nDpId, port); } @@ -260,13 +260,13 @@ public class MDSALUtil { return nodeConnectorRef; } - public static long getDpnIdFromNodeName(NodeId nodeId) { + public static BigInteger getDpnIdFromNodeName(NodeId nodeId) { return getDpnIdFromNodeName(nodeId.getValue()); } - public static long getDpnIdFromNodeName(String sMdsalNodeName) { + public static BigInteger getDpnIdFromNodeName(String sMdsalNodeName) { String sDpId = sMdsalNodeName.substring(sMdsalNodeName.lastIndexOf(":") + 1); - return Long.parseLong(sDpId); + return new BigInteger(sDpId); } public static long getOfPortNumberFromPortName(NodeConnectorId nodeConnectorId) { @@ -277,4 +277,10 @@ public class MDSALUtil { String sPortNumber = sMdsalPortName.substring(sMdsalPortName.lastIndexOf(":") + 1); return Long.parseLong(sPortNumber); } + + public static TransmitPacketInput getPacketOut(List actionInfos, byte[] payload, BigInteger dpnId, + NodeConnectorRef nodeConnRef) { + // TODO Auto-generated method stub + return null; + } } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java index 3c889b96..ec09bbdd 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java @@ -7,6 +7,7 @@ */ package org.opendaylight.vpnservice.mdsalutil.interfaces; +import java.math.BigInteger; import java.util.List; import org.opendaylight.vpnservice.mdsalutil.ActionInfo; import org.opendaylight.vpnservice.mdsalutil.FlowEntity; @@ -24,10 +25,10 @@ public interface IMdsalApiManager { public void removeGroup(GroupEntity groupEntity); - public void sendPacketOut(long lDpnId, int groupId, byte[] payload); + public void sendPacketOut(BigInteger dpnId, int groupId, byte[] payload); - public void sendPacketOutWithActions(long lDpnId, long groupId, byte[] payload, List actionInfos); + public void sendPacketOutWithActions(BigInteger dpnId, long groupId, byte[] payload, List actionInfos); - public void sendARPPacketOutWithActions(long dpid, byte[] payload, List action_info); + public void sendARPPacketOutWithActions(BigInteger dpnId, byte[] payload, List action_info); } diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java index e31ad2d0..8fe95ef1 100644 --- a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java +++ b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java @@ -251,23 +251,23 @@ public class MDSALManager implements AutoCloseable { installGroup(groupEntity); } - public void sendPacketOut(long lDpnId, int groupId, byte[] payload) { + public void sendPacketOut(BigInteger dpnId, int groupId, byte[] payload) { List actionInfos = new ArrayList(); actionInfos.add(new ActionInfo(ActionType.group, new String[] { String.valueOf(groupId) })); - sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos); + sendPacketOutWithActions(dpnId, groupId, payload, actionInfos); } - public void sendPacketOutWithActions(long lDpnId, long groupId, byte[] payload, List actionInfos) { + public void sendPacketOutWithActions(BigInteger dpnId, long groupId, byte[] payload, List actionInfos) { - m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actionInfos, payload, lDpnId, - getNodeConnRef("openflow:" + lDpnId, "0xfffffffd"))); + m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actionInfos, payload, dpnId, + getNodeConnRef("openflow:" + dpnId, "0xfffffffd"))); } - public void sendARPPacketOutWithActions(long lDpnId, byte[] payload, List actions) { - m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actions, payload, lDpnId, - getNodeConnRef("openflow:" + lDpnId, "0xfffffffd"))); + public void sendARPPacketOutWithActions(BigInteger dpnId, byte[] payload, List actions) { + m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actions, payload, dpnId, + getNodeConnRef("openflow:" + dpnId, "0xfffffffd"))); } public InstanceIdentifier nodeToInstanceId(Node node) { @@ -293,8 +293,8 @@ public class MDSALManager implements AutoCloseable { return _nodeConnectorRef; } - private Node buildDpnNode(long lDpnId) { - NodeId nodeId = new NodeId("openflow:" + lDpnId); + private Node buildDpnNode(BigInteger dpnId) { + NodeId nodeId = new NodeId("openflow:" + dpnId); Node nodeDpn = new NodeBuilder().setId(nodeId).setKey(new NodeKey(nodeId)).build(); return nodeDpn; diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java index 10d9b002..398e16f6 100644 --- a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java +++ b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java @@ -7,8 +7,9 @@ */ package org.opendaylight.vpnservice.mdsalutil.internal; -import java.util.List; +import java.math.BigInteger; +import java.util.List; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; @@ -78,22 +79,22 @@ public class MDSALUtilProvider implements BindingAwareConsumer, IMdsalApiManager @Override - public void sendPacketOut(long lDpnId, int groupId, byte[] payload) { - mdSalMgr.sendPacketOut(lDpnId, groupId, payload); + public void sendPacketOut(BigInteger dpnId, int groupId, byte[] payload) { + mdSalMgr.sendPacketOut(dpnId, groupId, payload); } @Override - public void sendPacketOutWithActions(long lDpnId, long groupId, + public void sendPacketOutWithActions(BigInteger dpnId, long groupId, byte[] payload, List actionInfos) { - mdSalMgr.sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos); + mdSalMgr.sendPacketOutWithActions(dpnId, groupId, payload, actionInfos); } @Override - public void sendARPPacketOutWithActions(long dpid, byte[] payload, + public void sendARPPacketOutWithActions(BigInteger dpnId, byte[] payload, List action_info) { - mdSalMgr.sendARPPacketOutWithActions(dpid, payload, action_info); + mdSalMgr.sendARPPacketOutWithActions(dpnId, payload, action_info); } } diff --git a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MdSalUtilTest.java b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MdSalUtilTest.java index d05bb001..6ee10d63 100644 --- a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MdSalUtilTest.java +++ b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MdSalUtilTest.java @@ -63,6 +63,7 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { MDSALManager mdSalMgr = null ; MockFlowForwarder flowFwder = null ; MockGroupForwarder grpFwder = null ; + private static final String Nodeid = "openflow:1"; @Before public void setUp() throws Exception { @@ -110,7 +111,6 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { @Test public void testInstallGroup() { // Install Group 1 - String Nodeid = "1"; String inport = "2" ; int vlanid = 100 ; GroupEntity grpEntity1 = createGroupEntity(Nodeid, inport, vlanid) ; @@ -119,7 +119,6 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { assertEquals(1, grpFwder.getDataChgCount()); // Install Group 2 - Nodeid = "1"; inport = "3" ; vlanid = 100 ; GroupEntity grpEntity2 = createGroupEntity(Nodeid, inport, vlanid) ; @@ -129,7 +128,6 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { @Test public void testRemoveGroup() { - String Nodeid = "1"; String inport = "2" ; int vlanid = 100 ; GroupEntity grpEntity = createGroupEntity(Nodeid, inport, vlanid) ; @@ -162,7 +160,7 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { public FlowEntity createFlowEntity(String dpnId, String tableId) { - long dpId; + BigInteger dpId; int SERVICE_ID = 0; FlowEntity terminatingServiceTableFlowEntity = null; @@ -171,7 +169,7 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { new String[] {})); try { - dpId = Long.parseLong(dpnId.split(":")[1]); + dpId = new BigInteger(dpnId.split(":")[1]); List mkMatches = new ArrayList(); BigInteger COOKIE = new BigInteger("9000000", 16); @@ -218,7 +216,8 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { listBucketInfo.add(new BucketInfo(listActionInfo)); String groupName = "Test Group"; - groupEntity = MDSALUtil.buildGroupEntity(Long.valueOf(Nodeid), id, groupName, GroupTypes.GroupIndirect, + BigInteger dpnId = new BigInteger(Nodeid.split(":")[1]); + groupEntity = MDSALUtil.buildGroupEntity(dpnId, id, groupName, GroupTypes.GroupIndirect, listBucketInfo); return groupEntity; @@ -226,7 +225,7 @@ public class MdSalUtilTest extends AbstractDataBrokerTest { private static long getUniqueValue(String nodeId, String inport) { - Long nodeIdL = Long.valueOf(nodeId); + Long nodeIdL = Long.valueOf(nodeId.split(":")[1]); Long inportL = Long.valueOf(inport); long sd_set; sd_set = nodeIdL * 10 + inportL; diff --git a/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang b/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang index 3090e702..68083d6b 100644 --- a/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang +++ b/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang @@ -1,56 +1,56 @@ module l3nexthop { - namespace "urn:opendaylight:vpnservice:l3nexthop"; - prefix l3nexthop; - - revision "2015-04-09" { - description "L3 NextHop module"; - } + namespace "urn:opendaylight:vpnservice:l3nexthop"; + prefix l3nexthop; - container l3nexthop { - config false; - list vpnNexthops{ - key "vpnId"; - leaf vpnId {type uint32;} - list vpnNexthop{ - key "IpAddress"; - leaf IpAddress {type string;} - leaf egressPointer {type uint32;} - } - } - list tunnelNexthops{ - key "dpnId"; - leaf dpnId {type uint32;} - list tunnelNexthop{ - key "IpAddress"; - leaf IpAddress {type string;} - leaf egressPointer {type uint32;} - } - } - } - - rpc getEgressPointer { - description "returns egress pointer, an OF Group Id"; - input { - leaf dpnId {type uint32;} - leaf vpnId { type uint32;} /* optional */ - leaf ipPrefix {type string;} - leaf nexthopIp {type string;} - } - output { - leaf egressPointer {type uint32;} - leaf localDestination {type boolean;} - } - } + revision "2015-04-09" { + description "L3 NextHop module"; + } - rpc removeLocalNextHop { - description "remove a local next hop"; - input { - leaf dpnId {type uint32;} - leaf vpnId { type uint32;} /* optional */ - leaf ipPrefix {type string;} - leaf nexthopIp {type string;} - } - } + container l3nexthop { + config false; + list vpnNexthops{ + key "vpnId"; + leaf vpnId {type uint32;} + list vpnNexthop{ + key "IpAddress"; + leaf IpAddress {type string;} + leaf egressPointer {type uint32;} + } + } + list tunnelNexthops{ + key "dpnId"; + leaf dpnId {type uint64;} + list tunnelNexthop{ + key "IpAddress"; + leaf IpAddress {type string;} + leaf egressPointer {type uint32;} + } + } + } + + rpc getEgressPointer { + description "returns egress pointer, an OF Group Id"; + input { + leaf dpnId {type uint64;} + leaf vpnId { type uint32;} /* optional */ + leaf ipPrefix {type string;} + leaf nexthopIp {type string;} + } + output { + leaf egressPointer {type uint32;} + leaf localDestination {type boolean;} + } + } + + rpc removeLocalNextHop { + description "remove a local next hop"; + input { + leaf dpnId {type uint64;} + leaf vpnId { type uint32;} /* optional */ + leaf ipPrefix {type string;} + leaf nexthopIp {type string;} + } + } } \ No newline at end of file diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java index 450f59c6..bd767cbe 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java @@ -139,9 +139,9 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } } - private long getDpnId(String ifName) { - String[] fields = ifName.split(":"); - long dpn = Integer.parseInt(fields[1]); + private BigInteger getDpnId(String ofPortId) { + String[] fields = ofPortId.split(":"); + BigInteger dpn = new BigInteger(fields[1]); LOG.debug("DpnId: {}", dpn); return dpn; } @@ -166,7 +166,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { int groupId = createNextHopPointer(nhKey); long vpnId = getVpnId(vpnName); - long dpnId = interfaceManager.getDpnForInterface(ifName); + BigInteger dpnId = interfaceManager.getDpnForInterface(ifName); VpnNexthop nexthop = getVpnNexthop(vpnId, ipAddress, 0); LOG.trace("nexthop: {}", nexthop); if (nexthop == null) { @@ -199,7 +199,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { String nhKey = new String("nexthop." + ifName + ipAddress); int groupId = createNextHopPointer(nhKey); - long dpnId = getDpnId(ofPortId); + BigInteger dpnId = getDpnId(ofPortId); TunnelNexthop nexthop = getTunnelNexthop(dpnId, ipAddress); if (nexthop == null) { List listBucketInfo = new ArrayList(); @@ -219,21 +219,21 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } } - private void makeRemoteFlow(long dpId, String ifName, int addOrRemoveFlow) { + private void makeRemoteFlow(BigInteger dpnId, String ifName, int addOrRemoveFlow) { long portNo = 0; String flowName = ifName; - String flowRef = getTunnelInterfaceFlowRef(dpId, LPORT_INGRESS_TABLE, ifName); + String flowRef = getTunnelInterfaceFlowRef(dpnId, LPORT_INGRESS_TABLE, ifName); List matches = new ArrayList(); List mkInstructions = new ArrayList(); if (NwConstants.ADD_FLOW == addOrRemoveFlow) { portNo = interfaceManager.getPortForInterface(ifName); - matches.add(new MatchInfo(MatchFieldType.in_port, new long[] { - dpId, portNo })); + matches.add(new MatchInfo(MatchFieldType.in_port, new BigInteger[] { + dpnId, BigInteger.valueOf(portNo) })); mkInstructions.add(new InstructionInfo(InstructionType.goto_table, new long[] {LFIB_TABLE})); } BigInteger COOKIE_VM_INGRESS_TABLE = new BigInteger("8000001", 16); - FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, LPORT_INGRESS_TABLE, flowRef, + FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpnId, LPORT_INGRESS_TABLE, flowRef, DEFAULT_FLOW_PRIORITY, flowName, 0, 0, COOKIE_VM_INGRESS_TABLE, matches, mkInstructions); if (NwConstants.ADD_FLOW == addOrRemoveFlow) { @@ -243,8 +243,8 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } } - private String getTunnelInterfaceFlowRef(long dpId, short tableId, String ifName) { - return new StringBuilder().append(dpId).append(tableId).append(ifName).toString(); + private String getTunnelInterfaceFlowRef(BigInteger dpnId, short tableId, String ifName) { + return new StringBuilder().append(dpnId).append(tableId).append(ifName).toString(); } protected void addVpnNexthopToDS(long vpnId, String ipPrefix, long egressPointer) { @@ -266,7 +266,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } - private void addTunnelNexthopToDS(long dpnId, String ipPrefix, long egressPointer) { + private void addTunnelNexthopToDS(BigInteger dpnId, String ipPrefix, long egressPointer) { InstanceIdentifierBuilder idBuilder = InstanceIdentifier.builder(L3nexthop.class) .child(TunnelNexthops.class, new TunnelNexthopsKey(dpnId)); @@ -313,7 +313,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { return null; } - private TunnelNexthop getTunnelNexthop(long dpnId, String ipAddress) { + private TunnelNexthop getTunnelNexthop(BigInteger dpnId, String ipAddress) { InstanceIdentifierBuilder idBuilder = InstanceIdentifier.builder(L3nexthop.class) .child(TunnelNexthops.class, new TunnelNexthopsKey(dpnId)); @@ -333,7 +333,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { return null; } - public long getNextHopPointer(long dpnId, long vpnId, String prefixIp, String nextHopIp) { + public long getNextHopPointer(BigInteger dpnId, long vpnId, String prefixIp, String nextHopIp) { String endpointIp = interfaceManager.getEndpointIpForDpn(dpnId); if (nextHopIp.equals(endpointIp)) { VpnNexthop vpnNextHop = getVpnNexthop(vpnId, prefixIp, 0); @@ -345,7 +345,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } } - private void removeTunnelNexthopFromDS(long dpnId, String ipPrefix) { + private void removeTunnelNexthopFromDS(BigInteger dpnId, String ipPrefix) { InstanceIdentifierBuilder idBuilder = InstanceIdentifier.builder(L3nexthop.class) .child(TunnelNexthops.class, new TunnelNexthopsKey(dpnId)) @@ -368,14 +368,14 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } - public void removeLocalNextHop(Long dpId, Long vpnId, String ipAddress) { + public void removeLocalNextHop(BigInteger dpnId, Long vpnId, String ipAddress) { VpnNexthop nh = getVpnNexthop(vpnId, ipAddress, 0); if (nh != null) { // how to inform and remove dependent FIB entries?? // we need to do it before the group is removed GroupEntity groupEntity = MDSALUtil.buildGroupEntity( - dpId, nh.getEgressPointer(), ipAddress, GroupTypes.GroupIndirect, null); + dpnId, nh.getEgressPointer(), ipAddress, GroupTypes.GroupIndirect, null); // remove Group ... mdsalManager.removeGroup(groupEntity); //update MD-SAL DS @@ -387,7 +387,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } - public void removeRemoteNextHop(long dpnId, String ifName, String ipAddress) { + public void removeRemoteNextHop(BigInteger dpnId, String ifName, String ipAddress) { TunnelNexthop nh = getTunnelNexthop(dpnId, ipAddress); if (nh != null) { diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java index ccb7ea4d..bdfd046b 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java @@ -8,22 +8,21 @@ package org.opendaylight.vpnservice.nexthopmgr; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; - +import java.math.BigInteger; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIds; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.L3tunnel; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL3tunnel; -import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager; -import org.opendaylight.vpnservice.nexthopmgr.AbstractDataChangeListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.L3tunnel; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,7 +91,7 @@ public class OdlInterfaceChangeListener extends AbstractDataChangeListener, DataObject> written = new HashMap<>(); diff --git a/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java b/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java index 56e7c7e4..d3214304 100644 --- a/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java +++ b/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java @@ -1,10 +1,11 @@ package org.opendaylight.vpnmanager.api; -import java.util.Collection; +import java.math.BigInteger; +import java.util.Collection; import org.opendaylight.fibmanager.api.IFibManager; public interface IVpnManager { - Collection getDpnsForVpn(long vpnId); + Collection getDpnsForVpn(long vpnId); void setFibService(IFibManager fibManager); } diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java index d3fdb24b..0f29dea1 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java @@ -78,8 +78,8 @@ public class VpnInterfaceManager extends AbstractDataChangeListener> vpnToDpnsDb; - private Map> dpnToInterfaceDb; + private Map> vpnToDpnsDb; + private Map> dpnToInterfaceDb; private static final FutureCallback DEFAULT_CALLBACK = new FutureCallback() { @@ -181,7 +181,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener dpnIds = vpnToDpnsDb.get(vpnId); + private synchronized void updateMappingDbs(long vpnId, BigInteger dpnId, String intfName, String rd) { + Collection dpnIds = vpnToDpnsDb.get(vpnId); if(dpnIds == null) { dpnIds = new HashSet<>(); } @@ -267,7 +267,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener intfNames = dpnToInterfaceDb.get(dpnId); if(intfNames == null) { return; @@ -276,7 +276,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener dpnIds = vpnToDpnsDb.get(vpnId); + Collection dpnIds = vpnToDpnsDb.get(vpnId); if(dpnIds == null) { return; } @@ -290,8 +290,8 @@ public class VpnInterfaceManager extends AbstractDataChangeListener matches = new ArrayList(); - matches.add(new MatchInfo(MatchFieldType.in_port, new long[] { - dpId, portNo })); + matches.add(new MatchInfo(MatchFieldType.in_port, new BigInteger[] { + dpId, BigInteger.valueOf(portNo) })); FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, VpnConstants.LPORT_INGRESS_TABLE, flowRef, priority, flowName, 0, 0, COOKIE_VM_INGRESS_TABLE, matches, mkInstructions); @@ -327,7 +327,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener matches = new ArrayList(); - matches.add(new MatchInfo(MatchFieldType.in_port, new long[] { - dpId, portNo })); + matches.add(new MatchInfo(MatchFieldType.in_port, new BigInteger[] { + dpId, BigInteger.valueOf(portNo) })); FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, VpnConstants.LPORT_INGRESS_TABLE, flowRef, priority, flowName, 0, 0, null, matches, null); @@ -465,8 +465,8 @@ public class VpnInterfaceManager extends AbstractDataChangeListener getDpnsForVpn(long vpnId) { - Collection dpnIds = vpnToDpnsDb.get(vpnId); + synchronized Collection getDpnsForVpn(long vpnId) { + Collection dpnIds = vpnToDpnsDb.get(vpnId); if(dpnIds != null) { return ImmutableList.copyOf(dpnIds); } else { diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java index e4d6e897..9acdc36c 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java @@ -101,7 +101,7 @@ public class VpnserviceProvider implements BindingAwareProvider, IVpnManager, } @Override - public Collection getDpnsForVpn(long vpnId) { + public Collection getDpnsForVpn(long vpnId) { return vpnInterfaceManager.getDpnsForVpn(vpnId); } -- 2.36.6