Remove SouthboundMapper and SouthboundConstants dependencies
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / MdsalHelper.java
1 /*
2  * Copyright (c) 2015 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.ovsdb.openstack.netvirt;
10
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;
56
57 import com.google.common.collect.ImmutableBiMap;
58
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";
65
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")
74             .build();
75
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")
80             .build();
81
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)
99         .build();
100
101
102     public static NodeId createManagedNodeId(InstanceIdentifier<Node> iid) {
103         NodeKey nodeKey = iid.firstKeyOf(Node.class, NodeKey.class);
104         return nodeKey.getNodeId();
105     }
106
107     public static NodeId createManagedNodeId(ConnectionInfo key, String bridgeName) {
108         return createManagedNodeId(key.getRemoteIp(), key.getRemotePort(), bridgeName);
109     }
110
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));
116         return nodePath;
117     }
118
119     public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key) {
120         return createInstanceIdentifier(key.getRemoteIp(), key.getRemotePort());
121     }
122
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);
129         return path;
130     }
131
132     public static NodeKey createNodeKey(IpAddress ip, PortNumber port) {
133         return new NodeKey(createNodeId(ip,port));
134     }
135
136     public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key, String bridgeName) {
137         return createInstanceIdentifier(createManagedNodeId(key, bridgeName));
138     }
139
140     public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key,OvsdbBridgeName bridgeName) {
141         return createInstanceIdentifier(createManagedNodeId(key, bridgeName));
142     }
143
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());
147     }
148
149     public static NodeId createManagedNodeId(ConnectionInfo key, OvsdbBridgeName bridgeName) {
150         return createManagedNodeId(key.getRemoteIp(), key.getRemotePort(), bridgeName);
151     }
152
153     public static NodeId createManagedNodeId(IpAddress ip, PortNumber port, String bridgeName) {
154         return new NodeId(createNodeId(ip,port).getValue()
155                 + "/" + BRIDGE_URI_PREFIX + "/" + bridgeName);
156     }
157
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);
163         return nodeId;
164     }
165
166     public static NodeId createNodeId(ConnectionInfo connectionInfo) {
167         return createNodeId(connectionInfo.getRemoteIp(), connectionInfo.getRemotePort());
168     }
169
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);
179         return nodePath;
180     }
181
182     public static InstanceIdentifier<TerminationPoint> createTerminationPointInstanceIdentifier(ConnectionInfo connectionInfo , String bridgeName, String portName){
183         return createTerminationPointInstanceIdentifier(connectionInfo.getRemoteIp(), connectionInfo.getRemotePort(),bridgeName, portName);
184     }
185
186     public static InstanceIdentifier<TerminationPoint> createTerminationPointInstanceIdentifier(Node node, String portName){
187         String tpUri = node.getNodeId().getValue() + "/" + TP_URI_PREFIX + "/" + portName;
188
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)));
194
195         LOG.debug("Termination point InstanceIdentigier generated : {}",nodePath);
196         return nodePath;
197     }
198
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);
204     }
205 }