2 * Copyright (C) 2013 Red Hat, Inc.
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
8 * Authors : Madhu Venugopal, Brent Salisbury, Sam Hague, Dave Tucker
10 package org.opendaylight.ovsdb.openstack.netvirt.impl;
12 import com.google.common.collect.Maps;
13 import java.net.InetAddress;
14 import java.net.UnknownHostException;
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;
32 public class ConfigurationServiceImpl implements ConfigurationService, ConfigInterface {
33 private static final Logger LOG = LoggerFactory.getLogger(ConfigurationServiceImpl.class);
35 private String integrationBridgeName;
36 private String networkBridgeName;
37 private String externalBridgeName;
38 private String tunnelEndpointKey;
40 private Map<Pair<String, String>, String> patchPortNames = Maps.newHashMap();
41 private String providerMappingsKey;
42 private String providerMapping;
43 private Southbound southbound;
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;
63 public String getIntegrationBridgeName() {
64 return integrationBridgeName;
68 public void setIntegrationBridgeName(String integrationBridgeName) {
69 this.integrationBridgeName = integrationBridgeName;
73 public String getNetworkBridgeName() {
74 return networkBridgeName;
78 public void setNetworkBridgeName(String networkBridgeName) {
79 this.networkBridgeName = networkBridgeName;
83 public String getExternalBridgeName() {
84 return externalBridgeName;
88 public void setExternalBridgeName(String externalBridgeName) {
89 this.externalBridgeName = externalBridgeName;
93 public String getTunnelEndpointKey() {
94 return tunnelEndpointKey;
98 public void setTunnelEndpointKey(String tunnelEndpointKey) {
99 this.tunnelEndpointKey = tunnelEndpointKey;
103 public String getProviderMappingsKey() {
104 return providerMappingsKey;
108 public void setProviderMappingsKey(String providerMappingsKey) {
109 this.providerMappingsKey = providerMappingsKey;
113 public Map<Pair<String, String>, String> getPatchPortNames() {
114 return patchPortNames;
118 public void setPatchPortNames(Map<Pair<String, String>, String> patchPortNames) {
119 this.patchPortNames = patchPortNames;
123 public String getPatchPortName(Pair portTuple){
124 return this.patchPortNames.get(portTuple);
128 public String getDefaultProviderMapping() {
129 return providerMapping;
133 public void setDefaultProviderMapping(String providerMapping) {
134 this.providerMapping = providerMapping;
138 public InetAddress getTunnelEndPoint(Node node) {
139 InetAddress address = null;
140 String tunnelEndpoint = southbound.getOtherConfig(node, OvsdbTables.OPENVSWITCH, tunnelEndpointKey);
141 if (tunnelEndpoint != null) {
143 address = InetAddress.getByName(tunnelEndpoint);
144 LOG.debug("Tunnel Endpoint for Node {} {}", node, address.getHostAddress());
145 } catch (UnknownHostException e) {
146 LOG.error("Error populating Tunnel Endpoint for Node {} ", node, e);
153 public String getOpenflowVersion(Node node) {
154 return Constants.OPENFLOW13;
158 public boolean isL3ForwardingEnabled() {
159 final String enabledPropertyStr = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.fwd.enabled");
160 return enabledPropertyStr != null && enabledPropertyStr.equalsIgnoreCase("yes");
164 public boolean isDistributedArpDisabled() {
165 final String strARPDisabled = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3.arp.responder.disabled");
166 return strARPDisabled != null && strARPDisabled.equalsIgnoreCase("yes");
170 public String getDefaultGatewayMacAddress(Node node) {
171 String l3gatewayForNode = null;
173 l3gatewayForNode = ConfigProperties.getProperty(this.getClass(),
174 "ovsdb.l3gateway.mac." + node.getNodeId().getValue());
176 if (l3gatewayForNode == null) {
177 l3gatewayForNode = ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac");
179 return l3gatewayForNode;
183 public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
185 (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
189 public void setDependencies(Object impl) {