d43470e87e16950f1b57e2d9690e9d61ac1f60ec
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / netvirt / openstack / netvirt / impl / ConfigurationServiceImpl.java
1 /*
2  * Copyright (c) 2013, 2015 Red Hat, 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.netvirt.openstack.netvirt.impl;
10
11 import java.net.InetAddress;
12 import java.net.UnknownHostException;
13 import java.util.HashMap;
14 import java.util.Map;
15 import org.apache.commons.lang3.tuple.ImmutablePair;
16 import org.apache.commons.lang3.tuple.Pair;
17 import org.opendaylight.netvirt.openstack.netvirt.ConfigInterface;
18 import org.opendaylight.netvirt.openstack.netvirt.api.ConfigurationService;
19 import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
20 import org.opendaylight.netvirt.openstack.netvirt.api.OvsdbTables;
21 import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
22 import org.opendaylight.netvirt.utils.config.ConfigProperties;
23 import org.opendaylight.netvirt.utils.servicehelper.ServiceHelper;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
25 import org.osgi.framework.ServiceReference;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 public class ConfigurationServiceImpl implements ConfigurationService, ConfigInterface {
30     private static final Logger LOG = LoggerFactory.getLogger(ConfigurationServiceImpl.class);
31
32     private String integrationBridgeName;
33     private String networkBridgeName;
34     private String externalBridgeName;
35     private String tunnelEndpointKey;
36
37     private Map<Pair<String, String>, String> patchPortNames = new HashMap<>();
38     private String providerMappingsKey;
39     private String providerMapping;
40     private Southbound southbound;
41
42     public ConfigurationServiceImpl() {
43         tunnelEndpointKey = Constants.TUNNEL_ENDPOINT_KEY;
44         integrationBridgeName = Constants.INTEGRATION_BRIDGE;
45         networkBridgeName = Constants.NETWORK_BRIDGE;
46         externalBridgeName = Constants.EXTERNAL_BRIDGE;
47         patchPortNames.put(new ImmutablePair<>(integrationBridgeName, networkBridgeName),
48                            Constants.PATCH_PORT_TO_NETWORK_BRIDGE_NAME);
49         patchPortNames.put(new ImmutablePair<>(networkBridgeName, integrationBridgeName),
50                            Constants.PATCH_PORT_TO_INTEGRATION_BRIDGE_NAME);
51         patchPortNames.put(new ImmutablePair<>(integrationBridgeName, externalBridgeName),
52                            Constants.PATCH_PORT_TO_EXTERNAL_BRIDGE_NAME);
53         patchPortNames.put(new ImmutablePair<>(externalBridgeName, 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 = null;
137         String tunnelEndpoint = southbound.getOtherConfig(node, OvsdbTables.OPENVSWITCH, tunnelEndpointKey);
138         if (tunnelEndpoint != null) {
139             try {
140                 address = InetAddress.getByName(tunnelEndpoint);
141                 LOG.debug("Tunnel Endpoint for Node {} {}", node, address.getHostAddress());
142             } catch (UnknownHostException e) {
143                 LOG.error("Error populating Tunnel Endpoint for Node {} ", node, e);
144             }
145         }
146         return address;
147     }
148
149     @Override
150     public String getOpenflowVersion(Node node) {
151         return Constants.OPENFLOW13;
152     }
153
154     @Override
155     public boolean isL3ForwardingEnabled() {
156         final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.fwd.enabled");
157         return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
158     }
159
160     @Override
161     public boolean isDistributedArpDisabled() {
162         final String strARPDisabled = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.arp.responder.disabled");
163         return strARPDisabled != null && strARPDisabled.equalsIgnoreCase("yes");
164     }
165
166     @Override
167     public boolean isRemoteMacLearnEnabled() {
168         final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.remotemac.learn.enabled");
169         return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
170     }
171
172     @Override
173     public boolean isL3MultipleExternalNetworkEnabled() {
174         final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.multiple.network.enabled");
175         return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
176     }
177
178     @Override
179     public String getDefaultGatewayMacAddress(Node node) {
180         String l3gatewayForNode = null;
181         if (node != null) {
182             l3gatewayForNode = ConfigProperties.getProperty(this.getClass(),
183                     "ovsdb.l3gateway.mac." + node.getNodeId().getValue());
184         }
185         if (l3gatewayForNode == null) {
186             l3gatewayForNode = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac");
187         }
188         return l3gatewayForNode;
189     }
190
191     @Override
192     public boolean isUserSpaceEnabled() {
193         final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.userspace.enabled");
194         return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
195     }
196
197     @Override
198     public void setDependencies(ServiceReference serviceReference) {
199         southbound =
200                 (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
201     }
202
203     @Override
204     public void setDependencies(Object impl) {
205     }
206 }