2 * Copyright (c) 2013, 2015 Red Hat, Inc. and others. All rights reserved.
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
9 package org.opendaylight.netvirt.openstack.netvirt.impl;
11 import java.net.InetAddress;
12 import java.net.UnknownHostException;
13 import java.util.HashMap;
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;
29 public class ConfigurationServiceImpl implements ConfigurationService, ConfigInterface {
30 private static final Logger LOG = LoggerFactory.getLogger(ConfigurationServiceImpl.class);
32 private String integrationBridgeName;
33 private String networkBridgeName;
34 private String externalBridgeName;
35 private String tunnelEndpointKey;
37 private Map<Pair<String, String>, String> patchPortNames = new HashMap<>();
38 private String providerMappingsKey;
39 private String providerMapping;
40 private Southbound southbound;
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;
60 public String getIntegrationBridgeName() {
61 return integrationBridgeName;
65 public void setIntegrationBridgeName(String integrationBridgeName) {
66 this.integrationBridgeName = integrationBridgeName;
70 public String getNetworkBridgeName() {
71 return networkBridgeName;
75 public void setNetworkBridgeName(String networkBridgeName) {
76 this.networkBridgeName = networkBridgeName;
80 public String getExternalBridgeName() {
81 return externalBridgeName;
85 public void setExternalBridgeName(String externalBridgeName) {
86 this.externalBridgeName = externalBridgeName;
90 public String getTunnelEndpointKey() {
91 return tunnelEndpointKey;
95 public void setTunnelEndpointKey(String tunnelEndpointKey) {
96 this.tunnelEndpointKey = tunnelEndpointKey;
100 public String getProviderMappingsKey() {
101 return providerMappingsKey;
105 public void setProviderMappingsKey(String providerMappingsKey) {
106 this.providerMappingsKey = providerMappingsKey;
110 public Map<Pair<String, String>, String> getPatchPortNames() {
111 return patchPortNames;
115 public void setPatchPortNames(Map<Pair<String, String>, String> patchPortNames) {
116 this.patchPortNames = patchPortNames;
120 public String getPatchPortName(Pair portTuple){
121 return this.patchPortNames.get(portTuple);
125 public String getDefaultProviderMapping() {
126 return providerMapping;
130 public void setDefaultProviderMapping(String providerMapping) {
131 this.providerMapping = providerMapping;
135 public InetAddress getTunnelEndPoint(Node node) {
136 InetAddress address = null;
137 String tunnelEndpoint = southbound.getOtherConfig(node, OvsdbTables.OPENVSWITCH, tunnelEndpointKey);
138 if (tunnelEndpoint != null) {
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);
150 public String getOpenflowVersion(Node node) {
151 return Constants.OPENFLOW13;
155 public boolean isL3ForwardingEnabled() {
156 final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.fwd.enabled");
157 return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
161 public boolean isDistributedArpDisabled() {
162 final String strARPDisabled = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.arp.responder.disabled");
163 return strARPDisabled != null && strARPDisabled.equalsIgnoreCase("yes");
167 public boolean isRemoteMacLearnEnabled() {
168 final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.remotemac.learn.enabled");
169 return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
173 public boolean isL3MultipleExternalNetworkEnabled() {
174 final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.multiple.network.enabled");
175 return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
179 public String getDefaultGatewayMacAddress(Node node) {
180 String l3gatewayForNode = null;
182 l3gatewayForNode = ConfigProperties.getProperty(this.getClass(),
183 "ovsdb.l3gateway.mac." + node.getNodeId().getValue());
185 if (l3gatewayForNode == null) {
186 l3gatewayForNode = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac");
188 return l3gatewayForNode;
192 public boolean isUserSpaceEnabled() {
193 final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.userspace.enabled");
194 return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
198 public void setDependencies(ServiceReference serviceReference) {
200 (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
204 public void setDependencies(Object impl) {