X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=hwvtepsouthbound%2Fhwvtepsouthbound-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fhwvtepsouthbound%2FHwvtepSouthboundMapper.java;h=b98cc0d400d67a4abbf10123e5bb7b026db4780b;hb=13dd052e59d69d3d4e7c63630ef8a0bde28760dc;hp=e487f25dc2eb5855280e2edde7c531f57946137b;hpb=69218909436886b7a057a7a6d14f53ce3afca203;p=ovsdb.git diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundMapper.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundMapper.java index e487f25dc..b98cc0d40 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundMapper.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundMapper.java @@ -15,40 +15,55 @@ import java.net.UnknownHostException; import org.opendaylight.ovsdb.lib.OvsdbClient; import org.opendaylight.ovsdb.schema.hardwarevtep.Global; +import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch; +import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalLocator; import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalSwitch; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IetfInetUtil; 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.inet.types.rev100924.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ConnectionInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitchesKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.Tunnels; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelsKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.VlanBindings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.VlanBindingsKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.EncapsulationTypeBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.EncapsulationTypeVxlanOverIpv4; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepNodeName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalLocatorRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ConnectionInfoBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.net.InetAddresses; + public class HwvtepSouthboundMapper { private static final Logger LOG = LoggerFactory.getLogger(HwvtepSouthboundMapper.class); private static final String N_CONNECTIONS_STR = "n_connections"; - private static NodeId createNodeId(HwvtepConnectionInstance client) { - NodeKey key = client.getInstanceIdentifier().firstKeyOf(Node.class, NodeKey.class); - return key.getNodeId(); - - } - public static InstanceIdentifier createInstanceIdentifier(NodeId nodeId) { - InstanceIdentifier nodePath = InstanceIdentifier + return InstanceIdentifier .create(NetworkTopology.class) .child(Topology.class, new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID)) .child(Node.class,new NodeKey(nodeId)); - return nodePath; } public static InstanceIdentifier createInstanceIdentifier (OvsdbClient client) { @@ -58,7 +73,7 @@ public class HwvtepSouthboundMapper { private static InstanceIdentifier createInstanceIdentifier(IpAddress ip, PortNumber port) { String uriString = HwvtepSouthboundConstants.HWVTEP_URI_PREFIX + "://" - + new String(ip.getValue()) + ":" + port.getValue(); + + String.valueOf(ip.getValue()) + ":" + port.getValue(); Uri uri = new Uri(uriString); NodeId nodeId = new NodeId(uri); InstanceIdentifier path = InstanceIdentifier.create(NetworkTopology.class) @@ -69,7 +84,7 @@ public class HwvtepSouthboundMapper { } public static NodeId createManagedNodeId(InstanceIdentifier iid) { - NodeKey nodeKey = iid.firstKeyOf(Node.class, NodeKey.class); + NodeKey nodeKey = iid.firstKeyOf(Node.class); return nodeKey.getNodeId(); } @@ -84,8 +99,7 @@ public class HwvtepSouthboundMapper { } public static IpAddress createIpAddress(Inet4Address address) { - Ipv4Address ipv4 = new Ipv4Address(address.getHostAddress()); - return new IpAddress(ipv4); + return IetfInetUtil.INSTANCE.ipAddressFor(address); } public static IpAddress createIpAddress(Inet6Address address) { @@ -111,7 +125,7 @@ public class HwvtepSouthboundMapper { public static InetAddress createInetAddress(IpAddress ip) throws UnknownHostException { if (ip.getIpv4Address() != null) { - return InetAddress.getByName(ip.getIpv4Address().getValue()); + return InetAddresses.forString(ip.getIpv4Address().getValue()); } else if (ip.getIpv6Address() != null) { return InetAddress.getByName(ip.getIpv6Address().getValue()); } else { @@ -120,28 +134,97 @@ public class HwvtepSouthboundMapper { } public static InstanceIdentifier getInstanceIdentifier(Global global) { - InstanceIdentifier iid = null; String nodeString = HwvtepSouthboundConstants.HWVTEP_URI_PREFIX + "://" + - HwvtepSouthboundConstants.UUID + "/" + global.getUuid().toString(); - NodeId nodeId = new NodeId(new Uri(nodeString)); - NodeKey nodeKey = new NodeKey(nodeId); - TopologyKey topoKey = new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID); - iid = InstanceIdentifier.builder(NetworkTopology.class) - .child(Topology.class, topoKey) - .child(Node.class,nodeKey) - .build(); - return iid; + HwvtepSouthboundConstants.UUID + "/" + global.getUuid().toString(); + NodeId nodeId = new NodeId(new Uri(nodeString)); + NodeKey nodeKey = new NodeKey(nodeId); + TopologyKey topoKey = new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID); + return InstanceIdentifier.builder(NetworkTopology.class) + .child(Topology.class, topoKey) + .child(Node.class, nodeKey) + .build(); } public static InstanceIdentifier createInstanceIdentifier(HwvtepConnectionInstance client, PhysicalSwitch pSwitch) { - InstanceIdentifier iid = null; - String nodeString = client.getNodeKey().getNodeId().getValue() + "/physicalswitch/" + pSwitch.getName(); - NodeId nodeId = new NodeId(new Uri(nodeString)); - NodeKey nodeKey = new NodeKey(nodeId); - iid =InstanceIdentifier.builder(NetworkTopology.class) + //TODO: Clean this up + return createInstanceIdentifier(client, new HwvtepNodeName(pSwitch.getName())); + } + + public static InstanceIdentifier createInstanceIdentifier(HwvtepConnectionInstance client, + HwvtepNodeName psName) { + NodeKey nodeKey = new NodeKey(createManagedNodeId(client, psName)); + return InstanceIdentifier.builder(NetworkTopology.class) .child(Topology.class, new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID)) .child(Node.class, nodeKey).build(); + } + + public static NodeId createManagedNodeId(HwvtepConnectionInstance client, HwvtepNodeName psName) { + String nodeString = client.getNodeKey().getNodeId().getValue() + + "/" + HwvtepSouthboundConstants.PSWITCH_URI_PREFIX + "/" + psName.getValue(); + NodeId nodeId = new NodeId(new Uri(nodeString)); + return nodeId; + } + + public static InstanceIdentifier createInstanceIdentifier(HwvtepConnectionInstance client, + LogicalSwitch lSwitch) { + InstanceIdentifier iid = null; + iid = InstanceIdentifier.builder(NetworkTopology.class) + .child(Topology.class, new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID)) + .child(Node.class, client.getNodeKey()).augmentation(HwvtepGlobalAugmentation.class) + .child(LogicalSwitches.class, new LogicalSwitchesKey(new HwvtepNodeName(lSwitch.getName()))) + .build(); + /* TODO: Will this work instead to make it simpler? + iid = client.getInstanceIdentifier().builder() + .child(LogicalSwitches.class, new LogicalSwitchesKey(new HwvtepNodeName(lSwitch.getName())))).build() + */ return iid; } + + public static InstanceIdentifier createInstanceIdentifier( InstanceIdentifier nodeIid, + InstanceIdentifier localTpIid, InstanceIdentifier remoteTpIid) { + + TunnelsKey tunnelsKey = new TunnelsKey(new HwvtepPhysicalLocatorRef(localTpIid), + new HwvtepPhysicalLocatorRef(remoteTpIid)); + InstanceIdentifier tunnelInstanceId = nodeIid.builder().augmentation(PhysicalSwitchAugmentation.class) + .child(Tunnels.class, tunnelsKey).build(); + return tunnelInstanceId; + } + + public static Class createEncapsulationType(String type) { + Preconditions.checkNotNull(type); + if (type.isEmpty()) { + return EncapsulationTypeVxlanOverIpv4.class; + } else { + ImmutableBiMap> mapper = + HwvtepSouthboundConstants.ENCAPS_TYPE_MAP.inverse(); + return mapper.get(type); + } + } + + public static InstanceIdentifier createInstanceIdentifier(InstanceIdentifier nodeIid, + PhysicalLocator physicalLocator) { + return nodeIid.child(TerminationPoint.class, getTerminationPointKey(physicalLocator)); + } + + public static TerminationPointKey getTerminationPointKey(PhysicalLocator pLoc) { + TerminationPointKey tpKey = null; + if(pLoc.getEncapsulationTypeColumn().getData() != null && + pLoc.getDstIpColumn().getData() != null) { + String tpKeyStr = pLoc.getEncapsulationTypeColumn().getData()+':'+pLoc.getDstIpColumn().getData(); + tpKey = new TerminationPointKey(new TpId(tpKeyStr)); + } + return tpKey; + } + + public static String getRandomUUID() { + return "Random_" + java.util.UUID.randomUUID().toString().replace("-", ""); + } + + public static InstanceIdentifier createInstanceIdentifier(HwvtepConnectionInstance client, + InstanceIdentifier tpPath, VlanBindings vBindings) { + return tpPath.augmentation(HwvtepPhysicalPortAugmentation.class) .child(VlanBindings.class, + new VlanBindingsKey(vBindings.getKey())); + + } }