[ONOS-4213] Creates a OpenstackNetworking Config for common use
Change-Id: I241db20fc32788a405b260372eedc3dce2de73fd
diff --git a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackIcmpHandler.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackIcmpHandler.java
index c971b99..4c5dc38 100644
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackIcmpHandler.java
+++ b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackIcmpHandler.java
@@ -37,6 +37,7 @@
import org.onosproject.net.packet.PacketService;
import org.onosproject.openstackinterface.OpenstackInterfaceService;
import org.onosproject.openstackinterface.OpenstackPort;
+import org.onosproject.openstacknetworking.OpenstackNetworkingConfig;
import org.onosproject.openstacknetworking.OpenstackPortInfo;
import org.onosproject.openstacknetworking.OpenstackSwitchingService;
import org.slf4j.Logger;
@@ -61,7 +62,7 @@
private final Map<String, OpenstackPortInfo> icmpInfoMap = Maps.newHashMap();
private final OpenstackSwitchingService openstackSwitchingService;
private final OpenstackInterfaceService openstackService;
- private final OpenstackRoutingConfig config;
+ private final OpenstackNetworkingConfig config;
private static final MacAddress GATEWAY_MAC = MacAddress.valueOf("1f:1f:1f:1f:1f:1f");
private static final String NETWORK_ROUTER_INTERFACE = "network:router_interface";
private static final String PORTNAME = "portName";
@@ -76,7 +77,7 @@
* @param openstackSwitchingService openstackSwitching service
*/
OpenstackIcmpHandler(PacketService packetService, DeviceService deviceService,
- OpenstackInterfaceService openstackService, OpenstackRoutingConfig config,
+ OpenstackInterfaceService openstackService, OpenstackNetworkingConfig config,
OpenstackSwitchingService openstackSwitchingService) {
this.packetService = packetService;
this.deviceService = deviceService;
diff --git a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackPnatHandler.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackPnatHandler.java
index 25ee9a5..f144e88 100644
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackPnatHandler.java
+++ b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackPnatHandler.java
@@ -33,6 +33,7 @@
import org.onosproject.openstackinterface.OpenstackNetwork;
import org.onosproject.openstackinterface.OpenstackPort;
import org.onosproject.openstackinterface.OpenstackRouter;
+import org.onosproject.openstacknetworking.OpenstackNetworkingConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -56,12 +57,12 @@
private final int portNum;
private final OpenstackPort openstackPort;
private final Port port;
- private OpenstackRoutingConfig config;
+ private OpenstackNetworkingConfig config;
private static final String DEVICE_OWNER_ROUTER_INTERFACE = "network:router_interface";
OpenstackPnatHandler(OpenstackRoutingRulePopulator rulePopulator, PacketContext context,
- int portNum, OpenstackPort openstackPort, Port port, OpenstackRoutingConfig config) {
+ int portNum, OpenstackPort openstackPort, Port port, OpenstackNetworkingConfig config) {
this.rulePopulator = checkNotNull(rulePopulator);
this.context = checkNotNull(context);
this.portNum = checkNotNull(portNum);
diff --git a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java
index ff0a4ef..7dee2c1 100644
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java
+++ b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java
@@ -33,6 +33,7 @@
import org.onosproject.net.packet.PacketService;
import org.onosproject.openstackinterface.OpenstackInterfaceService;
import org.onosproject.openstackinterface.OpenstackPort;
+import org.onosproject.openstacknetworking.OpenstackNetworkingConfig;
import org.slf4j.Logger;
import java.nio.ByteBuffer;
@@ -49,7 +50,7 @@
private final PacketService packetService;
private final OpenstackInterfaceService openstackService;
- private final OpenstackRoutingConfig config;
+ private final OpenstackNetworkingConfig config;
private static final String NETWORK_ROUTER_GATEWAY = "network:router_gateway";
/**
@@ -60,7 +61,7 @@
* @param config openstackRoutingConfig
*/
OpenstackRoutingArpHandler(PacketService packetService, OpenstackInterfaceService openstackService,
- OpenstackRoutingConfig config) {
+ OpenstackNetworkingConfig config) {
this.packetService = packetService;
this.openstackService = checkNotNull(openstackService);
this.config = checkNotNull(config);
diff --git a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingConfig.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingConfig.java
deleted file mode 100644
index 7c9f126..0000000
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingConfig.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.openstacknetworking.routing;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.collect.Maps;
-import org.onlab.packet.Ip4Address;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.config.Config;
-import org.slf4j.Logger;
-
-import java.util.Map;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Configuration object for OpenstackRouting service.
- */
-public class OpenstackRoutingConfig extends Config<ApplicationId> {
- protected final Logger log = getLogger(getClass());
-
- public static final String PHYSICAL_ROUTER_MAC = "physicalRouterMac";
- public static final String GATEWAY_BRIDGE_ID = "gatewayBridgeId";
- public static final String GATEWAY_EXTERNAL_INTERFACE_NAME = "gatewayExternalInterfaceName";
- public static final String GATEWAY_EXTERNAL_INTERFACE_MAC = "gatewayExternalInterfaceMac";
- public static final String NODES = "nodes";
- public static final String DATAPLANE_IP = "dataPlaneIp";
- public static final String BRIDGE_ID = "bridgeId";
-
-
- /**
- * Returns the data plane IP map of nodes read from network config.
- *
- * @return data plane IP map
- */
- public Map<DeviceId, Ip4Address> nodes() {
- Map<DeviceId, Ip4Address> nodeMap = Maps.newHashMap();
-
- JsonNode jsonNodes = object.get(NODES);
- if (jsonNodes == null) {
- log.error("There's no node information");
- return null;
- }
-
- jsonNodes.forEach(jsonNode -> {
- try {
- nodeMap.putIfAbsent(DeviceId.deviceId(jsonNode.path(BRIDGE_ID).asText()),
- Ip4Address.valueOf(jsonNode.path(DATAPLANE_IP).asText()));
- } catch (IllegalArgumentException | NullPointerException e) {
- log.error("Failed to read {}", e.toString());
- }
- });
- return nodeMap;
- }
-
- /**
- * Returns physical router mac.
- *
- * @return physical router mac
- */
- public String physicalRouterMac() {
- return this.get(PHYSICAL_ROUTER_MAC, "");
- }
-
- /**
- * Returns gateway's bridge id.
- *
- * @return bridge id
- */
- public String gatewayBridgeId() {
- return this.get(GATEWAY_BRIDGE_ID, "");
- }
-
- /**
- * Returns gateway's external interface name.
- *
- * @return external interface name
- */
- public String gatewayExternalInterfaceName() {
- return this.get(GATEWAY_EXTERNAL_INTERFACE_NAME, "");
- }
-
- /**
- * Returns gateway's external interface mac.
- *
- * @return external interface mac
- */
- public String gatewayExternalInterfaceMac() {
- return this.get(GATEWAY_EXTERNAL_INTERFACE_MAC, "");
- }
-}
diff --git a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
index 891b622..62e8cdf 100644
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
+++ b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
@@ -37,7 +37,6 @@
import org.onosproject.net.config.NetworkConfigListener;
import org.onosproject.net.config.NetworkConfigRegistry;
import org.onosproject.net.config.NetworkConfigService;
-import org.onosproject.net.config.basics.SubjectFactories;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.driver.DriverService;
import org.onosproject.net.flowobjective.FlowObjectiveService;
@@ -50,8 +49,10 @@
import org.onosproject.openstackinterface.OpenstackPort;
import org.onosproject.openstackinterface.OpenstackRouter;
import org.onosproject.openstackinterface.OpenstackRouterInterface;
+import org.onosproject.openstacknetworking.OpenstackNetworkingConfig;
import org.onosproject.openstacknetworking.OpenstackPortInfo;
import org.onosproject.openstacknetworking.OpenstackRoutingService;
+import org.onosproject.openstacknetworking.OpenstackSubjectFactories;
import org.onosproject.openstacknetworking.OpenstackSwitchingService;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.ConsistentMap;
@@ -124,16 +125,19 @@
private static final int PNAT_PORT_EXPIRE_TIME = 1200 * 1000;
private static final int TP_PORT_MINIMUM_NUM = 1024;
private static final int TP_PORT_MAXIMUM_NUM = 65535;
+
private final ConfigFactory configFactory =
- new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, OpenstackRoutingConfig.class, "openstackrouting") {
+ new ConfigFactory(OpenstackSubjectFactories.USER_DEFINED_SUBJECT_FACTORY, OpenstackNetworkingConfig.class,
+ "config") {
@Override
- public OpenstackRoutingConfig createConfig() {
- return new OpenstackRoutingConfig();
+ public OpenstackNetworkingConfig createConfig() {
+ return new OpenstackNetworkingConfig();
}
};
+
private final NetworkConfigListener configListener = new InternalConfigListener();
- private OpenstackRoutingConfig config;
+ private OpenstackNetworkingConfig config;
private static final KryoNamespace.Builder FLOATING_IP_SERIALIZER = KryoNamespace.newBuilder()
.register(KryoNamespaces.API)
.register(KryoNamespaces.MISC)
@@ -167,8 +171,6 @@
configRegistry.registerConfigFactory(configFactory);
configService.addListener(configListener);
- readConfiguration();
-
floatingIpMap = storageService.<String, OpenstackFloatingIP>consistentMapBuilder()
.withSerializer(Serializer.using(FLOATING_IP_SERIALIZER.build()))
.withName(FLOATING_IP_MAP_NAME)
@@ -180,6 +182,8 @@
.withApplicationId(appId)
.build();
+ readConfiguration();
+
log.info("onos-openstackrouting started");
}
@@ -488,7 +492,7 @@
}
private void readConfiguration() {
- config = configService.getConfig(appId, OpenstackRoutingConfig.class);
+ config = configService.getConfig("openstacknetworking", OpenstackNetworkingConfig.class);
if (config == null) {
log.error("No configuration found");
return;
@@ -499,7 +503,7 @@
checkNotNull(config.gatewayExternalInterfaceMac());
checkNotNull(config.gatewayExternalInterfaceName());
- log.debug("Configured info: {}, {}, {}, {}", config.physicalRouterMac(), config.gatewayBridgeId(),
+ log.warn("Configured info: {}, {}, {}, {}", config.physicalRouterMac(), config.gatewayBridgeId(),
config.gatewayExternalInterfaceMac(), config.gatewayExternalInterfaceName());
rulePopulator = new OpenstackRoutingRulePopulator(appId,
@@ -512,6 +516,7 @@
openstackIcmpHandler.requestPacket(appId);
openstackArpHandler.requestPacket(appId);
reloadInitL3Rules();
+
log.info("OpenstackRouting configured");
}
@@ -519,7 +524,7 @@
@Override
public void event(NetworkConfigEvent event) {
- if (!event.configClass().equals(OpenstackRoutingConfig.class)) {
+ if (!event.configClass().equals(OpenstackNetworkingConfig.class)) {
return;
}
diff --git a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingRulePopulator.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingRulePopulator.java
index d8d56e6..5616e0a 100644
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingRulePopulator.java
+++ b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingRulePopulator.java
@@ -52,6 +52,7 @@
import org.onosproject.openstackinterface.OpenstackRouterInterface;
import org.onosproject.openstackinterface.OpenstackSubnet;
import org.onosproject.openstackinterface.OpenstackFloatingIP;
+import org.onosproject.openstacknetworking.OpenstackNetworkingConfig;
import org.onosproject.openstacknetworking.OpenstackPortInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,7 +73,7 @@
private final OpenstackInterfaceService openstackService;
private final DeviceService deviceService;
private final DriverService driverService;
- private final OpenstackRoutingConfig config;
+ private final OpenstackNetworkingConfig config;
private static final String PORTNAME_PREFIX_TUNNEL = "vxlan";
private static final String PORTNAME = "portName";
@@ -106,7 +107,7 @@
*/
public OpenstackRoutingRulePopulator(ApplicationId appId, OpenstackInterfaceService openstackService,
FlowObjectiveService flowObjectiveService, DeviceService deviceService,
- DriverService driverService, OpenstackRoutingConfig config) {
+ DriverService driverService, OpenstackNetworkingConfig config) {
this.appId = appId;
this.flowObjectiveService = flowObjectiveService;
this.openstackService = checkNotNull(openstackService);