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 java.net.InetAddress;
15 import org.apache.commons.lang3.tuple.ImmutablePair;
16 import org.apache.commons.lang3.tuple.Pair;
17 import org.opendaylight.ovsdb.lib.notation.Row;
18 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
19 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
20 import org.opendaylight.ovsdb.openstack.netvirt.api.MdsalConsumer;
21 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbConfigurationService;
22 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
23 import org.opendaylight.ovsdb.utils.config.ConfigProperties;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
28 import com.google.common.collect.Maps;
30 public class ConfigurationServiceImpl implements ConfigurationService {
31 static final Logger logger = LoggerFactory.getLogger(ConfigurationServiceImpl.class);
33 // Values set with dependency injection from OSGi
34 /* TODO SB_MIGRATION */
35 private volatile OvsdbConfigurationService ovsdbConfigurationService;
36 //private volatile MdsalConsumer mdsalConsumer;
38 private String integrationBridgeName;
39 private String networkBridgeName;
40 private String externalBridgeName;
41 private String tunnelEndpointKey;
43 private Map<Pair<String, String>, String> patchPortNames = Maps.newHashMap();
44 private String providerMappingsKey;
45 private String providerMapping;
47 public ConfigurationServiceImpl() {
48 tunnelEndpointKey = Constants.TUNNEL_ENDPOINT_KEY;
49 integrationBridgeName = Constants.INTEGRATION_BRIDGE;
50 networkBridgeName = Constants.NETWORK_BRIDGE;
51 externalBridgeName = Constants.EXTERNAL_BRIDGE;
52 patchPortNames.put(new ImmutablePair<>(integrationBridgeName, networkBridgeName),
53 Constants.PATCH_PORT_TO_NETWORK_BRIDGE_NAME);
54 patchPortNames.put(new ImmutablePair<>(networkBridgeName, integrationBridgeName),
55 Constants.PATCH_PORT_TO_INTEGRATION_BRIDGE_NAME);
56 providerMappingsKey = Constants.PROVIDER_MAPPINGS_KEY;
57 providerMapping = Constants.PROVIDER_MAPPING;
61 public String getIntegrationBridgeName() {
62 return integrationBridgeName;
66 public void setIntegrationBridgeName(String integrationBridgeName) {
67 this.integrationBridgeName = integrationBridgeName;
71 public String getNetworkBridgeName() {
72 return networkBridgeName;
76 public void setNetworkBridgeName(String networkBridgeName) {
77 this.networkBridgeName = networkBridgeName;
81 public String getExternalBridgeName() {
82 return externalBridgeName;
86 public void setExternalBridgeName(String externalBridgeName) {
87 this.externalBridgeName = externalBridgeName;
91 public String getTunnelEndpointKey() {
92 return tunnelEndpointKey;
96 public void setTunnelEndpointKey(String tunnelEndpointKey) {
97 this.tunnelEndpointKey = tunnelEndpointKey;
101 public String getProviderMappingsKey() {
102 return providerMappingsKey;
106 public void setProviderMappingsKey(String providerMappingsKey) {
107 this.providerMappingsKey = providerMappingsKey;
111 public Map<Pair<String, String>, String> getPatchPortNames() {
112 return patchPortNames;
116 public void setPatchPortNames(Map<Pair<String, String>, String> patchPortNames) {
117 this.patchPortNames = patchPortNames;
121 public String getPatchPortName(Pair portTuple){
122 return this.patchPortNames.get(portTuple);
126 public String getDefaultProviderMapping() {
127 return providerMapping;
131 public void setDefaultProviderMapping(String providerMapping) {
132 this.providerMapping = providerMapping;
136 public InetAddress getTunnelEndPoint(Node node) {
137 //InetAddress address = mdsalConsumer.getTunnelEndPoint(node);
138 /* TODO SB_MIGRATION */
139 InetAddress address = null;
141 Map<String, Row> ovsTable = ovsdbConfigurationService.getRows(node,
142 ovsdbConfigurationService.getTableName(node, OpenVSwitch.class));
144 if (ovsTable == null) {
145 logger.error("OpenVSwitch table is null for Node {} ", node);
149 // While there is only one entry in the HashMap, we can't access it by index...
150 for (Row row : ovsTable.values()) {
151 OpenVSwitch ovsRow = ovsdbConfigurationService.getTypedRow(node, OpenVSwitch.class, row);
152 Map<String, String> configs = ovsRow.getOtherConfigColumn().getData();
154 if (configs == null) {
155 logger.debug("OpenVSwitch table is null for Node {} ", node);
159 String tunnelEndpoint = configs.get(tunnelEndpointKey);
161 if (tunnelEndpoint == null) {
165 address = InetAddress.getByName(tunnelEndpoint);
166 logger.debug("Tunnel Endpoint for Node {} {}", node, address.getHostAddress());
170 catch (Exception e) {
171 logger.error("Error populating Tunnel Endpoint for Node {} ", node, e);
178 public String getOpenflowVersion(Node node) {
179 return Constants.OPENFLOW13;
183 public String getDefaultGatewayMacAddress(Node node) {
184 /* TODO SB_MIGRATION */
185 final String l3gatewayForNode =
187 ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac." + node.getNodeId().getValue()) : null;
188 return l3gatewayForNode != null ?
189 l3gatewayForNode : ConfigProperties.getProperty(this.getClass(), "ovsdb.l3gateway.mac");