Add UT for SouthboundMapper and SouthboundProvider
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / 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.ovsdb.openstack.netvirt.impl;
10
11 import com.google.common.collect.Maps;
12 import java.net.InetAddress;
13 import java.net.UnknownHostException;
14 import java.util.Map;
15
16 import org.apache.commons.lang3.tuple.ImmutablePair;
17 import org.apache.commons.lang3.tuple.Pair;
18 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
19 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
20 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
21 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables;
22 import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
23 import org.opendaylight.ovsdb.utils.config.ConfigProperties;
24 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
25 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
26 import org.osgi.framework.BundleContext;
27 import org.osgi.framework.ServiceReference;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 public class ConfigurationServiceImpl implements ConfigurationService, ConfigInterface {
32     private static final Logger LOG = LoggerFactory.getLogger(ConfigurationServiceImpl.class);
33
34     private String integrationBridgeName;
35     private String networkBridgeName;
36     private String externalBridgeName;
37     private String tunnelEndpointKey;
38
39     private Map<Pair<String, String>, String> patchPortNames = Maps.newHashMap();
40     private String providerMappingsKey;
41     private String providerMapping;
42     private Southbound southbound;
43
44     public ConfigurationServiceImpl() {
45         tunnelEndpointKey = Constants.TUNNEL_ENDPOINT_KEY;
46         integrationBridgeName = Constants.INTEGRATION_BRIDGE;
47         networkBridgeName = Constants.NETWORK_BRIDGE;
48         externalBridgeName = Constants.EXTERNAL_BRIDGE;
49         patchPortNames.put(new ImmutablePair<>(integrationBridgeName, networkBridgeName),
50                            Constants.PATCH_PORT_TO_NETWORK_BRIDGE_NAME);
51         patchPortNames.put(new ImmutablePair<>(networkBridgeName, integrationBridgeName),
52                            Constants.PATCH_PORT_TO_INTEGRATION_BRIDGE_NAME);
53         patchPortNames.put(new ImmutablePair<>(integrationBridgeName, externalBridgeName),
54                            Constants.PATCH_PORT_TO_EXTERNAL_BRIDGE_NAME);
55         patchPortNames.put(new ImmutablePair<>(externalBridgeName, integrationBridgeName),
56                            Constants.PATCH_PORT_TO_INTEGRATION_BRIDGE_NAME);
57         providerMappingsKey = Constants.PROVIDER_MAPPINGS_KEY;
58         providerMapping = Constants.PROVIDER_MAPPING;
59     }
60
61     @Override
62     public String getIntegrationBridgeName() {
63         return integrationBridgeName;
64     }
65
66     @Override
67     public void setIntegrationBridgeName(String integrationBridgeName) {
68         this.integrationBridgeName = integrationBridgeName;
69     }
70
71     @Override
72     public String getNetworkBridgeName() {
73         return networkBridgeName;
74     }
75
76     @Override
77     public void setNetworkBridgeName(String networkBridgeName) {
78         this.networkBridgeName = networkBridgeName;
79     }
80
81     @Override
82     public String getExternalBridgeName() {
83         return externalBridgeName;
84     }
85
86     @Override
87     public void setExternalBridgeName(String externalBridgeName) {
88         this.externalBridgeName = externalBridgeName;
89     }
90
91     @Override
92     public String getTunnelEndpointKey() {
93         return tunnelEndpointKey;
94     }
95
96     @Override
97     public void setTunnelEndpointKey(String tunnelEndpointKey) {
98         this.tunnelEndpointKey = tunnelEndpointKey;
99     }
100
101     @Override
102     public String getProviderMappingsKey() {
103         return providerMappingsKey;
104     }
105
106     @Override
107     public void setProviderMappingsKey(String providerMappingsKey) {
108         this.providerMappingsKey = providerMappingsKey;
109     }
110
111     @Override
112     public Map<Pair<String, String>, String> getPatchPortNames() {
113         return patchPortNames;
114     }
115
116     @Override
117     public void setPatchPortNames(Map<Pair<String, String>, String> patchPortNames) {
118         this.patchPortNames = patchPortNames;
119     }
120
121     @Override
122     public String getPatchPortName(Pair portTuple){
123         return this.patchPortNames.get(portTuple);
124     }
125
126     @Override
127     public String getDefaultProviderMapping() {
128         return providerMapping;
129     }
130
131     @Override
132     public void setDefaultProviderMapping(String providerMapping) {
133         this.providerMapping = providerMapping;
134     }
135
136     @Override
137     public InetAddress getTunnelEndPoint(Node node) {
138         InetAddress address = null;
139         String tunnelEndpoint = southbound.getOtherConfig(node, OvsdbTables.OPENVSWITCH, tunnelEndpointKey);
140         if (tunnelEndpoint != null) {
141             try {
142                 address = InetAddress.getByName(tunnelEndpoint);
143                 LOG.debug("Tunnel Endpoint for Node {} {}", node, address.getHostAddress());
144             } catch (UnknownHostException e) {
145                 LOG.error("Error populating Tunnel Endpoint for Node {} ", node, e);
146             }
147         }
148         return address;
149     }
150
151     @Override
152     public String getOpenflowVersion(Node node) {
153         return Constants.OPENFLOW13;
154     }
155
156     @Override
157     public boolean isL3ForwardingEnabled() {
158         final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.fwd.enabled");
159         return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
160     }
161
162     @Override
163     public boolean isDistributedArpDisabled() {
164         final String strARPDisabled = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.arp.responder.disabled");
165         return strARPDisabled != null && strARPDisabled.equalsIgnoreCase("yes");
166     }
167
168     @Override
169     public String getDefaultGatewayMacAddress(Node node) {
170         String l3gatewayForNode = null;
171         if (node != null) {
172             l3gatewayForNode = ConfigProperties.getProperty(this.getClass(),
173                     "ovsdb.l3gateway.mac." + node.getNodeId().getValue());
174         }
175         if (l3gatewayForNode == null) {
176             l3gatewayForNode = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac");
177         }
178         return l3gatewayForNode;
179     }
180
181     @Override
182     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
183         southbound =
184                 (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
185     }
186
187     @Override
188     public void setDependencies(Object impl) {
189     }
190 }