From 3a06c522d841ee31b23771c814cd7e02b7aa07ea Mon Sep 17 00:00:00 2001 From: Daniel Park Date: Thu, 28 Jan 2016 20:51:12 +0900 Subject: [PATCH] [ONOS-3801] Implements L3 REST call json parser - Nullability check for RouterCodec, RoutingInterfaceCodec, RoutingWebResource. - Copyright fixed. - externalFixedIps() method in OpenstackExternalGateway class returns the immutable Map. Change-Id: I841cc1774a074e167ffe327c6e81d3f245cc8ee0 --- .../OpenstackExternalGateway.java | 22 ++- .../OpenstackIcmpHandler.java | 2 +- .../OpenstackPnatHandler.java | 2 +- .../openstackrouting/OpenstackRouter.java | 4 + .../OpenstackRoutingManager.java | 3 +- .../OpenstackRoutingService.java | 6 +- .../OpenstackPortInfo.java | 26 ++- .../OpenstackSwitchingService.java | 74 +++++++- apps/openstackswitching/app/features.xml | 3 +- .../impl/OpenstackArpHandler.java | 24 ++- .../impl/OpenstackRestHandler.java | 27 +++ .../impl/OpenstackSwitchingConfig.java | 11 +- .../impl/OpenstackSwitchingManager.java | 101 ++++++++-- .../impl/OpenstackSwitchingRulePopulator.java | 1 + .../web/OpensatckRouterWebResource.java | 172 ++++++++++++++++++ .../web/OpenstackPortWebResource.java | 2 +- .../web/OpenstackRouterCodec.java | 108 +++++++++++ .../web/OpenstackRouterInterfaceCodec.java | 65 +++++++ .../app/src/main/webapp/WEB-INF/web.xml | 3 +- apps/openstackswitching/pom.xml | 5 + 20 files changed, 618 insertions(+), 43 deletions(-) rename apps/openstackswitching/{app/src/main/java/org/onosproject/openstackswitching/impl => api/src/main/java/org/onosproject/openstackswitching}/OpenstackPortInfo.java (81%) create mode 100644 apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/web/OpensatckRouterWebResource.java create mode 100644 apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/web/OpenstackRouterCodec.java create mode 100644 apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/web/OpenstackRouterInterfaceCodec.java diff --git a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackExternalGateway.java b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackExternalGateway.java index c435ab771b..ac7070119a 100644 --- a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackExternalGateway.java +++ b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackExternalGateway.java @@ -15,9 +15,11 @@ */ package org.onosproject.openstackrouting; +import com.google.common.collect.ImmutableMap; import org.onlab.packet.Ip4Address; import java.util.HashMap; +import java.util.Map; /** * A configurable external gateway modes extension model in openstack router. @@ -26,15 +28,18 @@ public final class OpenstackExternalGateway { private String networkId; private boolean enablePnat; - private HashMap externalFixedIps; + private Map externalFixedIps; private OpenstackExternalGateway(String networkId, boolean enablePnat, - HashMap externalFixedIps) { + Map externalFixedIps) { this.networkId = networkId; this.enablePnat = enablePnat; this.externalFixedIps = externalFixedIps; } + public static OpenstackExternalGateway.Builder builder() { + return new Builder(); + } /** * Returns network ID. * @@ -53,13 +58,17 @@ public final class OpenstackExternalGateway { return enablePnat; } + public Map externalFixedIps() { + return ImmutableMap.copyOf(externalFixedIps); + } + /** * An Openstack External Gateway Builder class. */ public static final class Builder { private String networkId; private boolean enablePnat; - private HashMap externalFixedIps; + private Map externalFixedIps; Builder() { externalFixedIps = new HashMap<>(); @@ -90,11 +99,12 @@ public final class OpenstackExternalGateway { /** * Sets external fixed IP address information. * - * @param externalFixedIPs External fixed IP information + * @param externalFixedIps External fixed IP information * @return Builder object */ - public Builder externalFixedIps(HashMap externalFixedIPs) { - this.externalFixedIps.putAll(externalFixedIPs); + + public Builder externalFixedIps(Map externalFixedIps) { + this.externalFixedIps.putAll(externalFixedIps); return this; } diff --git a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackIcmpHandler.java b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackIcmpHandler.java index 7186903bd9..67c6724544 100644 --- a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackIcmpHandler.java +++ b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackIcmpHandler.java @@ -31,4 +31,4 @@ public class OpenstackIcmpHandler implements Runnable { public void run() { } -} +} \ No newline at end of file diff --git a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackPnatHandler.java b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackPnatHandler.java index 60ec31bea1..e1c9df824c 100644 --- a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackPnatHandler.java +++ b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackPnatHandler.java @@ -31,4 +31,4 @@ public class OpenstackPnatHandler implements Runnable { public void run() { } -} +} \ No newline at end of file diff --git a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRouter.java b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRouter.java index 213ca28fb5..fc858fcc3d 100644 --- a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRouter.java +++ b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRouter.java @@ -44,6 +44,10 @@ public final class OpenstackRouter { } + public static OpenstackRouter.Builder builder() { + return new Builder(); + } + /** * Returns tenant ID. * diff --git a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingManager.java b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingManager.java index ae41bf286c..5bfc5ea47b 100644 --- a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingManager.java +++ b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingManager.java @@ -124,10 +124,9 @@ public class OpenstackRoutingManager implements OpenstackRoutingService { } @Override - public void deleteRouterInterface(String id) { + public void removeRouterInterface(OpenstackRouterInterface openstackRouterInterface) { } - private class InternalPacketProcessor implements PacketProcessor { @Override diff --git a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingService.java b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingService.java index aca25fb229..3840cb2442 100644 --- a/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingService.java +++ b/apps/openstackrouting/src/main/java/org/onosproject/openstackrouting/OpenstackRoutingService.java @@ -77,11 +77,11 @@ public interface OpenstackRoutingService { void updateRouterInterface(OpenstackRouterInterface openstackRouterInterface); /** - * Removes flow rules corresponding to the router information deleted by Openstack. + * Removes flow rules corresponding to the router information removed by Openstack. * - * @param id Deleted router`s ID + * @param openstackRouterInterface Router information */ - void deleteRouterInterface(String id); + void removeRouterInterface(OpenstackRouterInterface openstackRouterInterface); } diff --git a/apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/impl/OpenstackPortInfo.java b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackPortInfo.java similarity index 81% rename from apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/impl/OpenstackPortInfo.java rename to apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackPortInfo.java index 1b6250e025..45b6f59ce5 100644 --- a/apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/impl/OpenstackPortInfo.java +++ b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackPortInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2015 Open Networking Laboratory + * Copyright 2015 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. @@ -13,30 +13,29 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.openstackswitching.impl; +package org.onosproject.openstackswitching; import org.onlab.packet.Ip4Address; import org.onlab.packet.MacAddress; import org.onosproject.net.DeviceId; - import static com.google.common.base.Preconditions.checkNotNull; /** * Contains OpenstackPort Information. */ -public final class OpenstackPortInfo { - +public class OpenstackPortInfo { private final Ip4Address hostIp; - private final DeviceId deviceId; private final MacAddress hostMac; + private final DeviceId deviceId; private final long vni; + private final Ip4Address gatewayIP; - public OpenstackPortInfo(Ip4Address hostIp, MacAddress hostMac, DeviceId deviceId, - long vni) { + public OpenstackPortInfo(Ip4Address hostIp, MacAddress hostMac, DeviceId deviceId, long vni, Ip4Address gatewayIP) { this.hostIp = hostIp; this.hostMac = hostMac; this.deviceId = deviceId; this.vni = vni; + this.gatewayIP = gatewayIP; } public Ip4Address ip() { @@ -55,6 +54,10 @@ public final class OpenstackPortInfo { return vni; } + public Ip4Address gatewayIP() { + return gatewayIP; + } + public static OpenstackPortInfo.Builder builder() { return new Builder(); } @@ -64,6 +67,12 @@ public final class OpenstackPortInfo { private MacAddress hostMac; private DeviceId deviceId; private long vni; + private Ip4Address gatewayIP; + + public Builder setGatewayIP(Ip4Address gatewayIP) { + this.gatewayIP = checkNotNull(gatewayIP, "gatewayIP cannot be null"); + return this; + } public Builder setHostIp(Ip4Address hostIp) { this.hostIp = checkNotNull(hostIp, "hostIp cannot be null"); @@ -94,5 +103,6 @@ public final class OpenstackPortInfo { hostMac = builder.hostMac; deviceId = builder.deviceId; vni = builder.vni; + gatewayIP = builder.gatewayIP; } } diff --git a/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingService.java b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingService.java index 8960dcdb7a..f81ddaef91 100644 --- a/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingService.java +++ b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingService.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Open Networking Laboratory + * Copyright 2015-2016 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. @@ -16,6 +16,8 @@ package org.onosproject.openstackswitching; import org.onosproject.net.Port; +import org.onosproject.openstackrouting.OpenstackRouter; +import org.onosproject.openstackrouting.OpenstackRouterInterface; import java.util.Collection; @@ -67,6 +69,12 @@ public interface OpenstackSwitchingService { */ Collection ports(String networkId); + /** + * Returns port information list. + * + * @return port information list + */ + Collection ports(); /** * Returns port information for the port given. * @@ -99,4 +107,68 @@ public interface OpenstackSwitchingService { * @return subnet information, or null if not present */ OpenstackSubnet subnet(String subnetId); + + /** + * Sends the created router information to OpenstackRouting service. + * + * @param openstackRouter Router Information + */ + void createRouter(OpenstackRouter openstackRouter); + /** + * Sends the updated router information to OpenstackRouting service. + * + * @param routerId Router ID + */ + void updateRouter(String routerId); + /** + * Sends the removed router information to OpenstackRouting service. + * + * @param routerId Router ID + */ + void deleteRouter(String routerId); + + /** + * Sends the updated router interface information to OpenstackRouting service. + * + * @param openstackRouterInterface Router interface information + */ + void updateRouterInterface(OpenstackRouterInterface openstackRouterInterface); + + /** + * Sends the removed router interface information to OpenstackRouting service. + * + * @param openstackRouterInterface Router interface information + */ + void removeRouterInterface(OpenstackRouterInterface openstackRouterInterface); + + /** + * Returns the router information list. + * + * @return router information list + */ + Collection routers(); + + /** + * Returns the router information for the router ID given. + * + * @param routerId router ID + * @return router information + */ + OpenstackRouter router(String routerId); + + /** + * Returns the OpensatckPortInfo list. + * + * @return OpensatckPortInfo list + */ + Collection portInfos(); + + /** + * Returns the MacAddress for physical router. + * + * @return physical router mac + */ + String physicalRouterMac(); + + } diff --git a/apps/openstackswitching/app/features.xml b/apps/openstackswitching/app/features.xml index 1a9c9a43b2..a4e2639355 100644 --- a/apps/openstackswitching/app/features.xml +++ b/apps/openstackswitching/app/features.xml @@ -1,6 +1,6 @@