Remove plugin dependencies
[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.schema.openvswitch.OpenVSwitch;
22 import org.opendaylight.ovsdb.utils.config.ConfigProperties;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
24
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     //private volatile OvsdbConfigurationService ovsdbConfigurationService;
35     private volatile MdsalConsumer mdsalConsumer;
36
37     private String integrationBridgeName;
38     private String networkBridgeName;
39     private String externalBridgeName;
40     private String tunnelEndpointKey;
41
42     private Map<Pair<String, String>, String> patchPortNames = Maps.newHashMap();
43     private String providerMappingsKey;
44     private String providerMapping;
45
46     public ConfigurationServiceImpl() {
47         tunnelEndpointKey = Constants.TUNNEL_ENDPOINT_KEY;
48         integrationBridgeName = Constants.INTEGRATION_BRIDGE;
49         networkBridgeName = Constants.NETWORK_BRIDGE;
50         externalBridgeName = Constants.EXTERNAL_BRIDGE;
51         patchPortNames.put(new ImmutablePair<>(integrationBridgeName, networkBridgeName),
52                            Constants.PATCH_PORT_TO_NETWORK_BRIDGE_NAME);
53         patchPortNames.put(new ImmutablePair<>(networkBridgeName, integrationBridgeName),
54                            Constants.PATCH_PORT_TO_INTEGRATION_BRIDGE_NAME);
55         providerMappingsKey = Constants.PROVIDER_MAPPINGS_KEY;
56         providerMapping = Constants.PROVIDER_MAPPING;
57     }
58
59     @Override
60     public String getIntegrationBridgeName() {
61         return integrationBridgeName;
62     }
63
64     @Override
65     public void setIntegrationBridgeName(String integrationBridgeName) {
66         this.integrationBridgeName = integrationBridgeName;
67     }
68
69     @Override
70     public String getNetworkBridgeName() {
71         return networkBridgeName;
72     }
73
74     @Override
75     public void setNetworkBridgeName(String networkBridgeName) {
76         this.networkBridgeName = networkBridgeName;
77     }
78
79     @Override
80     public String getExternalBridgeName() {
81         return externalBridgeName;
82     }
83
84     @Override
85     public void setExternalBridgeName(String externalBridgeName) {
86         this.externalBridgeName = externalBridgeName;
87     }
88
89     @Override
90     public String getTunnelEndpointKey() {
91         return tunnelEndpointKey;
92     }
93
94     @Override
95     public void setTunnelEndpointKey(String tunnelEndpointKey) {
96         this.tunnelEndpointKey = tunnelEndpointKey;
97     }
98
99     @Override
100     public String getProviderMappingsKey() {
101         return providerMappingsKey;
102     }
103
104     @Override
105     public void setProviderMappingsKey(String providerMappingsKey) {
106         this.providerMappingsKey = providerMappingsKey;
107     }
108
109     @Override
110     public Map<Pair<String, String>, String> getPatchPortNames() {
111         return patchPortNames;
112     }
113
114     @Override
115     public void setPatchPortNames(Map<Pair<String, String>, String> patchPortNames) {
116         this.patchPortNames = patchPortNames;
117     }
118
119     @Override
120     public String getPatchPortName(Pair portTuple){
121         return this.patchPortNames.get(portTuple);
122     }
123
124     @Override
125     public String getDefaultProviderMapping() {
126         return providerMapping;
127     }
128
129     @Override
130     public void setDefaultProviderMapping(String providerMapping) {
131         this.providerMapping = providerMapping;
132     }
133
134     @Override
135     public InetAddress getTunnelEndPoint(Node node) {
136         InetAddress address = mdsalConsumer.getTunnelEndPoint(node);
137         /* TODO SB_MIGRATION
138         InetAddress address = null;
139         try {
140             Map<String, Row> ovsTable = ovsdbConfigurationService.getRows(node,
141                     ovsdbConfigurationService.getTableName(node, OpenVSwitch.class));
142
143             if (ovsTable == null) {
144                 logger.error("OpenVSwitch table is null for Node {} ", node);
145                 return null;
146             }
147
148             // While there is only one entry in the HashMap, we can't access it by index...
149             for (Row row : ovsTable.values()) {
150                 OpenVSwitch ovsRow = ovsdbConfigurationService.getTypedRow(node, OpenVSwitch.class, row);
151                 Map<String, String> configs = ovsRow.getOtherConfigColumn().getData();
152
153                 if (configs == null) {
154                     logger.debug("OpenVSwitch table is null for Node {} ", node);
155                     continue;
156                 }
157
158                 String tunnelEndpoint = configs.get(tunnelEndpointKey);
159
160                 if (tunnelEndpoint == null) {
161                     continue;
162                 }
163
164                 address = InetAddress.getByName(tunnelEndpoint);
165                 logger.debug("Tunnel Endpoint for Node {} {}", node, address.getHostAddress());
166                 break;
167             }
168         }
169         catch (Exception e) {
170             logger.error("Error populating Tunnel Endpoint for Node {} ", node, e);
171         }*/
172
173         return address;
174     }
175
176     @Override
177     public String getOpenflowVersion(Node node) {
178         return Constants.OPENFLOW13;
179     }
180
181     @Override
182     public String getDefaultGatewayMacAddress(Node node) {
183         final String l3gatewayForNode =
184             node != null ?
185             ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac." + node.getId().getValue()) : null;
186         return l3gatewayForNode != null ?
187                l3gatewayForNode : ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac");
188     }
189 }