2 * Copyright (c) 2015 Brocade Communications Systems, Inc. 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
9 package org.opendaylight.ovsdb.openstack.netvirt;
11 import com.google.common.base.Preconditions;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdk;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdkr;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdkvhost;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdkvhostuser;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeGeneve;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeGre;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeGre64;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeIpsecGre;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeIpsecGre64;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeLisp;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypePatch;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeSystem;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeTap;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeVxlan;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow10;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow11;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow12;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow13;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow14;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow15;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbFailModeBase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbFailModeSecure;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbFailModeStandalone;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
45 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
52 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
53 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
57 import com.google.common.collect.ImmutableBiMap;
59 public class MdsalHelper {
60 private static final Logger LOG = LoggerFactory.getLogger(MdsalUtils.class);
61 public static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
62 public static final String OVSDB_URI_PREFIX = "ovsdb";
63 public static final String BRIDGE_URI_PREFIX = "bridge";
64 public static final String TP_URI_PREFIX = "termination-point";
66 public static final ImmutableBiMap<Class<? extends OvsdbBridgeProtocolBase>,String> OVSDB_PROTOCOL_MAP
67 = new ImmutableBiMap.Builder<Class<? extends OvsdbBridgeProtocolBase>,String>()
68 .put(OvsdbBridgeProtocolOpenflow10.class,"OpenFlow10")
69 .put(OvsdbBridgeProtocolOpenflow11.class,"OpenFlow11")
70 .put(OvsdbBridgeProtocolOpenflow12.class,"OpenFlow12")
71 .put(OvsdbBridgeProtocolOpenflow13.class,"OpenFlow13")
72 .put(OvsdbBridgeProtocolOpenflow14.class,"OpenFlow14")
73 .put(OvsdbBridgeProtocolOpenflow15.class,"OpenFlow15")
76 public static final ImmutableBiMap<Class<? extends OvsdbFailModeBase>,String> OVSDB_FAIL_MODE_MAP
77 = new ImmutableBiMap.Builder<Class<? extends OvsdbFailModeBase>,String>()
78 .put(OvsdbFailModeStandalone.class,"standalone")
79 .put(OvsdbFailModeSecure.class,"secure")
82 public static final ImmutableBiMap<String, Class<? extends InterfaceTypeBase>> OVSDB_INTERFACE_TYPE_MAP
83 = new ImmutableBiMap.Builder<String, Class<? extends InterfaceTypeBase>>()
84 .put("internal", InterfaceTypeInternal.class)
85 .put("vxlan", InterfaceTypeVxlan.class)
86 .put("patch", InterfaceTypePatch.class)
87 .put("system", InterfaceTypeSystem.class)
88 .put("tap", InterfaceTypeTap.class)
89 .put("geneve", InterfaceTypeGeneve.class)
90 .put("gre", InterfaceTypeGre.class)
91 .put("ipsec_gre", InterfaceTypeIpsecGre.class)
92 .put("gre64", InterfaceTypeGre64.class)
93 .put("ipsec_gre64", InterfaceTypeIpsecGre64.class)
94 .put("lisp", InterfaceTypeLisp.class)
95 .put("dpdk", InterfaceTypeDpdk.class)
96 .put("dpdkr", InterfaceTypeDpdkr.class)
97 .put("dpdkvhost", InterfaceTypeDpdkvhost.class)
98 .put("dpdkvhostuser", InterfaceTypeDpdkvhostuser.class)
102 public static NodeId createManagedNodeId(InstanceIdentifier<Node> iid) {
103 NodeKey nodeKey = iid.firstKeyOf(Node.class, NodeKey.class);
104 return nodeKey.getNodeId();
107 public static NodeId createManagedNodeId(ConnectionInfo key, String bridgeName) {
108 return createManagedNodeId(key.getRemoteIp(), key.getRemotePort(), bridgeName);
111 public static InstanceIdentifier<Node> createInstanceIdentifier(NodeId nodeId) {
112 InstanceIdentifier<Node> nodePath = InstanceIdentifier
113 .create(NetworkTopology.class)
114 .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID))
115 .child(Node.class,new NodeKey(nodeId));
119 public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key) {
120 return createInstanceIdentifier(key.getRemoteIp(), key.getRemotePort());
123 public static InstanceIdentifier<Node> createInstanceIdentifier(IpAddress ip, PortNumber port) {
124 InstanceIdentifier<Node> path = InstanceIdentifier
125 .create(NetworkTopology.class)
126 .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID))
127 .child(Node.class,createNodeKey(ip,port));
128 LOG.debug("Created ovsdb path: {}",path);
132 public static NodeKey createNodeKey(IpAddress ip, PortNumber port) {
133 return new NodeKey(createNodeId(ip,port));
136 public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key, String bridgeName) {
137 return createInstanceIdentifier(createManagedNodeId(key, bridgeName));
140 public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key,OvsdbBridgeName bridgeName) {
141 return createInstanceIdentifier(createManagedNodeId(key, bridgeName));
144 public static NodeId createManagedNodeId(IpAddress ip, PortNumber port, OvsdbBridgeName bridgeName) {
145 return new NodeId(createNodeId(ip,port).getValue()
146 + "/" + BRIDGE_URI_PREFIX + "/" + bridgeName.getValue());
149 public static NodeId createManagedNodeId(ConnectionInfo key, OvsdbBridgeName bridgeName) {
150 return createManagedNodeId(key.getRemoteIp(), key.getRemotePort(), bridgeName);
153 public static NodeId createManagedNodeId(IpAddress ip, PortNumber port, String bridgeName) {
154 return new NodeId(createNodeId(ip,port).getValue()
155 + "/" + BRIDGE_URI_PREFIX + "/" + bridgeName);
158 public static NodeId createNodeId(IpAddress ip, PortNumber port) {
159 String uriString = OVSDB_URI_PREFIX + "://"
160 + new String(ip.getValue()) + ":" + port.getValue();
161 Uri uri = new Uri(uriString);
162 NodeId nodeId = new NodeId(uri);
166 public static NodeId createNodeId(ConnectionInfo connectionInfo) {
167 return createNodeId(connectionInfo.getRemoteIp(), connectionInfo.getRemotePort());
170 public static InstanceIdentifier<TerminationPoint> createTerminationPointInstanceIdentifier(
171 IpAddress ip, PortNumber port, String bridgeName, String portName) {
172 String tpUri = createManagedNodeId(ip, port, bridgeName) + "/" + TP_URI_PREFIX + "/" + portName;
173 InstanceIdentifier<TerminationPoint> nodePath = InstanceIdentifier
174 .create(NetworkTopology.class)
175 .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID))
176 .child(Node.class,new NodeKey(createNodeId(ip,port)))
177 .child(TerminationPoint.class, new TerminationPointKey(new TpId(tpUri)));
178 LOG.debug("Termination point InstanceIdentigier generated : {}",nodePath);
182 public static InstanceIdentifier<TerminationPoint> createTerminationPointInstanceIdentifier(ConnectionInfo connectionInfo , String bridgeName, String portName){
183 return createTerminationPointInstanceIdentifier(connectionInfo.getRemoteIp(), connectionInfo.getRemotePort(),bridgeName, portName);
186 public static InstanceIdentifier<TerminationPoint> createTerminationPointInstanceIdentifier(Node node, String portName){
187 String tpUri = node.getNodeId().getValue() + "/" + TP_URI_PREFIX + "/" + portName;
189 InstanceIdentifier<TerminationPoint> nodePath = InstanceIdentifier
190 .create(NetworkTopology.class)
191 .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID))
192 .child(Node.class,node.getKey())
193 .child(TerminationPoint.class, new TerminationPointKey(new TpId(tpUri)));
195 LOG.debug("Termination point InstanceIdentigier generated : {}",nodePath);
199 public static String createOvsdbInterfaceType(Class<? extends InterfaceTypeBase> mdsaltype) {
200 Preconditions.checkNotNull(mdsaltype);
201 ImmutableBiMap<Class<? extends InterfaceTypeBase>, String> mapper =
202 OVSDB_INTERFACE_TYPE_MAP.inverse();
203 return mapper.get(mdsaltype);