Rewrote optical connectivity intent compiler
Change-Id: I5acece3c14bed8a23f7bbe0c5a9bc0932a2a0881
diff --git a/core/api/src/main/java/org/onosproject/net/Device.java b/core/api/src/main/java/org/onosproject/net/Device.java
index ddfa6af..e36d762 100644
--- a/core/api/src/main/java/org/onosproject/net/Device.java
+++ b/core/api/src/main/java/org/onosproject/net/Device.java
@@ -26,7 +26,7 @@
* Coarse classification of the type of the infrastructure device.
*/
public enum Type {
- SWITCH, ROUTER, ROADM, OTN, FIREWALL, BALANCER, IPS, IDS, CONTROLLER, OTHER
+ SWITCH, ROUTER, ROADM, OTN, ROADM_OTN, FIREWALL, BALANCER, IPS, IDS, CONTROLLER, OTHER
}
/**
diff --git a/core/api/src/main/java/org/onosproject/net/OchPort.java b/core/api/src/main/java/org/onosproject/net/OchPort.java
index 8a7836b..eb956f2 100644
--- a/core/api/src/main/java/org/onosproject/net/OchPort.java
+++ b/core/api/src/main/java/org/onosproject/net/OchPort.java
@@ -15,8 +15,6 @@
*/
package org.onosproject.net;
-import org.onlab.util.Frequency;
-
import java.util.Objects;
import static com.google.common.base.MoreObjects.toStringHelper;
@@ -29,9 +27,6 @@
*/
public class OchPort extends DefaultPort {
- public static final Frequency CENTER_FREQUENCY = Frequency.ofTHz(193.1);
- public static final Frequency FLEX_GRID_SLOT = Frequency.ofGHz(12.5);
-
private final OduSignalType signalType;
private final boolean isTunable;
private final OchSignal lambda;
@@ -43,7 +38,7 @@
* @param number port number
* @param isEnabled port enabled state
* @param signalType ODU signal type
- * @param isTunable maximum frequency in MHz
+ * @param isTunable tunable wavelength capability
* @param lambda OCh signal
* @param annotations optional key/value annotations
*/
diff --git a/core/api/src/main/java/org/onosproject/net/OchSignal.java b/core/api/src/main/java/org/onosproject/net/OchSignal.java
index e629b5e..356950c 100644
--- a/core/api/src/main/java/org/onosproject/net/OchSignal.java
+++ b/core/api/src/main/java/org/onosproject/net/OchSignal.java
@@ -30,11 +30,10 @@
* See ITU G.709 "Interfaces for the Optical Transport Network (OTN)".
* </p>
*/
-// TODO: consider which is better, OchSignal or OpticalChannelSignal
public class OchSignal implements Lambda {
- private static final Frequency CENTER_FREQUENCY = Frequency.ofTHz(193.1);
- private static final Frequency FLEX_GRID_SLOT = Frequency.ofGHz(12.5);
+ public static final Frequency CENTER_FREQUENCY = Frequency.ofTHz(193.1);
+ public static final Frequency FLEX_GRID_SLOT = Frequency.ofGHz(12.5);
private final GridType gridType;
private final ChannelSpacing channelSpacing;
@@ -57,10 +56,9 @@
int spacingMultiplier, int slotGranularity) {
this.gridType = checkNotNull(gridType);
this.channelSpacing = checkNotNull(channelSpacing);
- // TODO: check the precondition for spacingMultiplier. Is negative value permitted?
+ // Negative values are permitted for spacingMultiplier
this.spacingMultiplier = spacingMultiplier;
-
- checkArgument(slotGranularity > 0, "slotGranularity must be more than 0, but %s", slotGranularity);
+ checkArgument(slotGranularity > 0, "slotGranularity must be larger than 0, received %s", slotGranularity);
this.slotGranularity = slotGranularity;
}
diff --git a/core/api/src/main/java/org/onosproject/net/device/OchPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/OchPortDescription.java
index 7f3d7f0..c3a7f41 100644
--- a/core/api/src/main/java/org/onosproject/net/device/OchPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/OchPortDescription.java
@@ -40,7 +40,7 @@
* @param isEnabled port enabled state
* @param signalType ODU signal type
* @param isTunable tunable wavelength capability
- * @param lambda Och signal
+ * @param lambda OCh signal
* @param annotations optional key/value annotations map
*/
public OchPortDescription(PortNumber number, boolean isEnabled, OduSignalType signalType,
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
index 6b48b00..c2b84ab 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
@@ -24,8 +24,8 @@
import static com.google.common.base.Preconditions.checkNotNull;
/**
- * An optical layer intent for connectivity from one transponder port to another
- * transponder port. No traffic selector or traffic treatment are needed.
+ * An optical layer intent for connectivity between two OCh ports.
+ * No traffic selector or traffic treatment are needed.
*/
public final class OpticalConnectivityIntent extends Intent {
private final ConnectPoint src;
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java
index 0013c0d..5e1eacc 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java
@@ -15,11 +15,9 @@
*/
package org.onosproject.net.intent;
-import java.util.Collection;
-
import org.onosproject.core.ApplicationId;
import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Link;
+import org.onosproject.net.OchSignal;
import org.onosproject.net.Path;
import com.google.common.base.MoreObjects;
@@ -32,27 +30,27 @@
private final ConnectPoint src;
private final ConnectPoint dst;
private final Path path;
-
+ private final OchSignal lambda;
private OpticalPathIntent(ApplicationId appId,
Key key,
ConnectPoint src,
ConnectPoint dst,
Path path,
+ OchSignal lambda,
int priority) {
- super(appId,
- key,
- ImmutableSet.copyOf(path.links()),
- priority);
+ super(appId, key, ImmutableSet.copyOf(path.links()), priority);
this.src = checkNotNull(src);
this.dst = checkNotNull(dst);
this.path = checkNotNull(path);
+ this.lambda = checkNotNull(lambda);
}
protected OpticalPathIntent() {
this.src = null;
this.dst = null;
this.path = null;
+ this.lambda = null;
}
/**
@@ -72,6 +70,7 @@
private ConnectPoint src;
private ConnectPoint dst;
private Path path;
+ private OchSignal lambda;
Key key;
@Override
@@ -123,6 +122,17 @@
}
/**
+ * Sets the optical channel (lambda) for the intent that will be built.
+ *
+ * @param lambda the optical channel
+ * @return this builder
+ */
+ public Builder lambda(OchSignal lambda) {
+ this.lambda = lambda;
+ return this;
+ }
+
+ /**
* Builds an optical path intent from the accumulated parameters.
*
* @return optical path intent
@@ -135,6 +145,7 @@
src,
dst,
path,
+ lambda,
priority
);
}
@@ -153,6 +164,10 @@
return path;
}
+ public OchSignal lambda() {
+ return lambda;
+ }
+
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
@@ -163,11 +178,7 @@
.add("ingressPort", src)
.add("egressPort", dst)
.add("path", path)
+ .add("lambda", lambda)
.toString();
}
-
-
- public Collection<Link> requiredLinks() {
- return path.links();
- }
}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceService.java b/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceService.java
new file mode 100644
index 0000000..10e5911
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceService.java
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ * 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.net.resource;
+
+import org.onosproject.net.Port;
+import org.onosproject.net.intent.Intent;
+import org.onosproject.net.intent.IntentId;
+
+import java.util.Set;
+
+/**
+ * Service for providing device resources.
+ */
+public interface DeviceResourceService {
+ /**
+ * Request a set of ports needed to satisfy the intent.
+ *
+ * @param intent the intent
+ * @return set of ports
+ */
+ Set<Port> requestPorts(Intent intent);
+
+ /**
+ * Release ports associated with given intent ID.
+ *
+ * @param intentId intent ID
+ */
+ void releasePorts(IntentId intentId);
+}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceStore.java b/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceStore.java
new file mode 100644
index 0000000..5df661c
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceStore.java
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ * 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.net.resource;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Port;
+import org.onosproject.net.intent.IntentId;
+
+import java.util.Set;
+
+public interface DeviceResourceStore {
+ Set<Port> getFreePorts(DeviceId deviceId);
+
+ void allocatePorts(Set<Port> port, IntentId intent);
+
+ void releasePorts(IntentId intent);
+}