Use Topology Node in place of Inventory Node
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / impl / ConfigurationServiceImpl.java
1 /*
2  * Copyright (C) 2013 Red Hat, Inc.
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  * Authors : Madhu Venugopal, Brent Salisbury, Sam Hague, Dave Tucker
9  */
10 package org.opendaylight.ovsdb.openstack.netvirt.impl;
11
12 import java.net.InetAddress;
13 import java.util.Map;
14
15 import org.apache.commons.lang3.tuple.ImmutablePair;
16 import org.apache.commons.lang3.tuple.Pair;
17 import org.opendaylight.ovsdb.lib.notation.Row;
18 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
19 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
20 import org.opendaylight.ovsdb.openstack.netvirt.api.MdsalConsumer;
21 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbConfigurationService;
22 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
23 import org.opendaylight.ovsdb.utils.config.ConfigProperties;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 import com.google.common.collect.Maps;
29
30 public class ConfigurationServiceImpl implements ConfigurationService {
31     static final Logger logger = LoggerFactory.getLogger(ConfigurationServiceImpl.class);
32
33     // Values set with dependency injection from OSGi
34     /* TODO SB_MIGRATION */
35     private volatile OvsdbConfigurationService ovsdbConfigurationService;
36     //private volatile MdsalConsumer mdsalConsumer;
37
38     private String integrationBridgeName;
39     private String networkBridgeName;
40     private String externalBridgeName;
41     private String tunnelEndpointKey;
42
43     private Map<Pair<String, String>, String> patchPortNames = Maps.newHashMap();
44     private String providerMappingsKey;
45     private String providerMapping;
46
47     public ConfigurationServiceImpl() {
48         tunnelEndpointKey = Constants.TUNNEL_ENDPOINT_KEY;
49         integrationBridgeName = Constants.INTEGRATION_BRIDGE;
50         networkBridgeName = Constants.NETWORK_BRIDGE;
51         externalBridgeName = Constants.EXTERNAL_BRIDGE;
52         patchPortNames.put(new ImmutablePair<>(integrationBridgeName, networkBridgeName),
53                            Constants.PATCH_PORT_TO_NETWORK_BRIDGE_NAME);
54         patchPortNames.put(new ImmutablePair<>(networkBridgeName, integrationBridgeName),
55                            Constants.PATCH_PORT_TO_INTEGRATION_BRIDGE_NAME);
56         providerMappingsKey = Constants.PROVIDER_MAPPINGS_KEY;
57         providerMapping = Constants.PROVIDER_MAPPING;
58     }
59
60     @Override
61     public String getIntegrationBridgeName() {
62         return integrationBridgeName;
63     }
64
65     @Override
66     public void setIntegrationBridgeName(String integrationBridgeName) {
67         this.integrationBridgeName = integrationBridgeName;
68     }
69
70     @Override
71     public String getNetworkBridgeName() {
72         return networkBridgeName;
73     }
74
75     @Override
76     public void setNetworkBridgeName(String networkBridgeName) {
77         this.networkBridgeName = networkBridgeName;
78     }
79
80     @Override
81     public String getExternalBridgeName() {
82         return externalBridgeName;
83     }
84
85     @Override
86     public void setExternalBridgeName(String externalBridgeName) {
87         this.externalBridgeName = externalBridgeName;
88     }
89
90     @Override
91     public String getTunnelEndpointKey() {
92         return tunnelEndpointKey;
93     }
94
95     @Override
96     public void setTunnelEndpointKey(String tunnelEndpointKey) {
97         this.tunnelEndpointKey = tunnelEndpointKey;
98     }
99
100     @Override
101     public String getProviderMappingsKey() {
102         return providerMappingsKey;
103     }
104
105     @Override
106     public void setProviderMappingsKey(String providerMappingsKey) {
107         this.providerMappingsKey = providerMappingsKey;
108     }
109
110     @Override
111     public Map<Pair<String, String>, String> getPatchPortNames() {
112         return patchPortNames;
113     }
114
115     @Override
116     public void setPatchPortNames(Map<Pair<String, String>, String> patchPortNames) {
117         this.patchPortNames = patchPortNames;
118     }
119
120     @Override
121     public String getPatchPortName(Pair portTuple){
122         return this.patchPortNames.get(portTuple);
123     }
124
125     @Override
126     public String getDefaultProviderMapping() {
127         return providerMapping;
128     }
129
130     @Override
131     public void setDefaultProviderMapping(String providerMapping) {
132         this.providerMapping = providerMapping;
133     }
134
135     @Override
136     public InetAddress getTunnelEndPoint(Node node) {
137         //InetAddress address = mdsalConsumer.getTunnelEndPoint(node);
138         /* TODO SB_MIGRATION */
139         InetAddress address = null;
140         try {
141             Map<String, Row> ovsTable = ovsdbConfigurationService.getRows(node,
142                     ovsdbConfigurationService.getTableName(node, OpenVSwitch.class));
143
144             if (ovsTable == null) {
145                 logger.error("OpenVSwitch table is null for Node {} ", node);
146                 return null;
147             }
148
149             // While there is only one entry in the HashMap, we can't access it by index...
150             for (Row row : ovsTable.values()) {
151                 OpenVSwitch ovsRow = ovsdbConfigurationService.getTypedRow(node, OpenVSwitch.class, row);
152                 Map<String, String> configs = ovsRow.getOtherConfigColumn().getData();
153
154                 if (configs == null) {
155                     logger.debug("OpenVSwitch table is null for Node {} ", node);
156                     continue;
157                 }
158
159                 String tunnelEndpoint = configs.get(tunnelEndpointKey);
160
161                 if (tunnelEndpoint == null) {
162                     continue;
163                 }
164
165                 address = InetAddress.getByName(tunnelEndpoint);
166                 logger.debug("Tunnel Endpoint for Node {} {}", node, address.getHostAddress());
167                 break;
168             }
169         }
170         catch (Exception e) {
171             logger.error("Error populating Tunnel Endpoint for Node {} ", node, e);
172         }
173
174         return address;
175     }
176
177     @Override
178     public String getOpenflowVersion(Node node) {
179         return Constants.OPENFLOW13;
180     }
181
182     @Override
183     public String getDefaultGatewayMacAddress(Node node) {
184         /* TODO SB_MIGRATION */
185         final String l3gatewayForNode =
186             node != null ?
187             ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac." + node.getNodeId().getValue()) : null;
188         return l3gatewayForNode != null ?
189                l3gatewayForNode : ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac");
190     }
191 }