From: Michal Rehak Date: Fri, 27 Jun 2014 20:35:50 +0000 (+0200) Subject: BUG-835 + BUG-1234 logical nodeConnection names X-Git-Tag: release/helium~591 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=9db5a5819a8ee93f2fd7be9db554584e672228e8 BUG-835 + BUG-1234 logical nodeConnection names - fixed logical nodeConnection names - added description property to adNode - added error logging Change-Id: Idfe5db5f50315f9d4cfde4b9d33e5d559a879b95 Signed-off-by: Michal Rehak Signed-off-by: Ed Warnicke --- diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.java index fa25122bba..a700c86b9c 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.java @@ -7,8 +7,10 @@ */ package org.opendaylight.controller.sal.compatibility; -import com.google.common.base.Objects; -import com.google.common.base.Preconditions; +import java.math.BigInteger; +import java.util.Date; +import java.util.HashSet; +import java.util.List; import org.opendaylight.controller.sal.common.util.Arguments; import org.opendaylight.controller.sal.core.AdvertisedBandwidth; import org.opendaylight.controller.sal.core.Bandwidth; @@ -16,6 +18,7 @@ import org.opendaylight.controller.sal.core.Buffers; import org.opendaylight.controller.sal.core.Capabilities; import org.opendaylight.controller.sal.core.Config; import org.opendaylight.controller.sal.core.ConstructionException; +import org.opendaylight.controller.sal.core.Description; import org.opendaylight.controller.sal.core.MacAddress; import org.opendaylight.controller.sal.core.Name; import org.opendaylight.controller.sal.core.Node.NodeIDType; @@ -55,14 +58,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.No import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.math.BigInteger; -import java.util.Date; -import java.util.HashSet; -import java.util.List; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; public final class NodeMapping { + private static final Logger LOG = LoggerFactory + .getLogger(NodeMapping.class); + /** openflow id prefix */ public static final String OPENFLOW_ID_PREFIX = "openflow:"; @@ -103,6 +109,10 @@ public final class NodeMapping { return key.getId(); } + /** + * @param nodeId containing "<NodeTypeString>:<plainIntegerId>" + * @return adNodeId form + */ public static String toADNodeId(final NodeId nodeId) { if (nodeId == null) { return null; @@ -123,6 +133,28 @@ public final class NodeMapping { return new org.opendaylight.controller.sal.core.NodeConnector(nodeConnectorType, aDNodeConnectorId, aDNode); } + /** + * @param ncid nodeConnector identifier, e.g.: OF:21 or CTRL + * @param node + * @return nodeConnector attached to given node + * @throws ConstructionException + */ + public static org.opendaylight.controller.sal.core.NodeConnector toADNodeConnector( + final NodeConnectorId ncid, final org.opendaylight.controller.sal.core.Node aDNode) throws ConstructionException { + NodeId nid = NodeMapping.toNodeId(aDNode); + String nodeConnectorType = NodeMapping.toNodeConnectorType(ncid, nid); + Object aDNodeConnectorId = NodeMapping.toADNodeConnectorId(ncid, nid); + return new org.opendaylight.controller.sal.core.NodeConnector(nodeConnectorType, aDNodeConnectorId, aDNode); + } + + /** + * @param aDNode + * @return + */ + private static NodeId toNodeId(org.opendaylight.controller.sal.core.Node aDNode) { + return new NodeId(aDNode.getType() + ":" +String.valueOf(aDNode.getID())); + } + public static String toNodeConnectorType(final NodeConnectorId ncId, final NodeId nodeId) { if (ncId.equals(toLocalNodeConnectorId(nodeId))) { return NodeConnectorIDType.SWSTACK; @@ -141,7 +173,17 @@ public final class NodeMapping { return org.opendaylight.controller.sal.core.NodeConnector.SPECIALNODECONNECTORID; } - return (short) Long.valueOf(nodeConnectorId.getValue().replaceFirst("^.*:", "")).longValue(); + String nodeConnectorIdStripped = nodeConnectorId.getValue().replaceFirst("^.*:", ""); + if (nodeConnectorIdStripped.matches("[0-9]+")) { + Short nodeConnectorIdVal = null; + try { + nodeConnectorIdVal = Short.valueOf(nodeConnectorIdStripped); + } catch (NumberFormatException e) { + LOG.warn("nodeConnectorId not supported (short): {}", nodeConnectorIdStripped, e); + } + return nodeConnectorIdVal; + } + return nodeConnectorIdStripped; } public static NodeId toAdNodeId(final NodeConnectorId nodeConnectorId) { @@ -205,11 +247,27 @@ public final class NodeMapping { public static HashSet toADNodeConnectorProperties(final NodeConnectorUpdated nc) { final FlowCapableNodeConnectorUpdated fcncu = nc.getAugmentation(FlowCapableNodeConnectorUpdated.class); if (!Objects.equal(fcncu, null)) { - return NodeMapping.toADNodeConnectorProperties(fcncu); + HashSet adNodeConnectorProperties = NodeMapping.toADNodeConnectorProperties(fcncu); + return adNodeConnectorProperties; } return new HashSet(); } + /** + * @param id + * @return node description in AD form, e.g.: OF|00:00:00:...:01 + */ + private static Description toADDescription(NodeRef nodeRef) { + Description desc; + try { + desc = new Description(toADNode(nodeRef).toString()); + } catch (ConstructionException e) { + desc = new Description("none"); + LOG.warn("node description extraction failed: {}", nodeRef); + } + return desc; + } + public static HashSet toADNodeConnectorProperties(final NodeConnector nc) { final FlowCapableNodeConnector fcnc = nc.getAugmentation(FlowCapableNodeConnector.class); if (!Objects.equal(fcnc, null)) { @@ -324,7 +382,9 @@ public final class NodeMapping { public static HashSet toADNodeProperties(final NodeUpdated nu) { final FlowCapableNodeUpdated fcnu = nu.getAugmentation(FlowCapableNodeUpdated.class); if (fcnu != null) { - return toADNodeProperties(fcnu, nu.getId()); + HashSet adNodeProperties = toADNodeProperties(fcnu, nu.getId()); + adNodeProperties.add(toADDescription(nu.getNodeRef())); + return adNodeProperties; } return new HashSet(); } diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java index d2243a4704..7bbf7f10e0 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ToSalConversionsUtils.java @@ -53,7 +53,6 @@ import org.opendaylight.controller.sal.action.SwPath; import org.opendaylight.controller.sal.core.ConstructionException; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; -import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType; import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.match.Match; import org.opendaylight.controller.sal.match.MatchType; @@ -209,7 +208,8 @@ public class ToSalConversionsUtils { Uri nodeConnector = ((OutputActionCase) sourceAction).getOutputAction().getOutputNodeConnector(); if (nodeConnector != null) { //for (Uri uri : nodeConnectors) { - targetAction.add(new Output(fromNodeConnectorRef(nodeConnector, node))); + Uri fullNodeConnector = new Uri(node.getType()+":"+node.getID()+":"+nodeConnector.getValue()); + targetAction.add(new Output(fromNodeConnectorRef(fullNodeConnector, node))); //} } } else if (sourceAction instanceof PopMplsActionCase) { @@ -385,10 +385,11 @@ public class ToSalConversionsUtils { public static NodeConnector fromNodeConnectorRef(Uri uri, Node node) { NodeConnector nodeConnector = null; try { - nodeConnector = new NodeConnector(NodeConnectorIDType.OPENFLOW, - Short.valueOf(uri.getValue()), node); + NodeConnectorId nodeConnectorId = new NodeConnectorId(uri.getValue()); + nodeConnector = NodeMapping.toADNodeConnector(nodeConnectorId, node); } catch (ConstructionException e) { - e.printStackTrace(); + LOG.warn("nodeConnector creation failed at node: {} with nodeConnectorUri: {}", + node, uri.getValue()); } return nodeConnector; }