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