[ONOS-3730] Populate portSpeed for ODUCLT and OCH ports.

Also move the enum definition of ODU client port signal type outside of OduCltPort class.

Change-Id: Ibdff21d9707ad3d79587f579ad675f673cf9afeb
diff --git a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
index 3890bb4..d4e6010 100644
--- a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
+++ b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
@@ -26,6 +26,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.mastership.MastershipService;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
 import org.onosproject.net.Host;
@@ -290,7 +291,7 @@
                             .appId(appId)
                             .src(src)
                             .dst(dst)
-                            .signalType(OduCltPort.SignalType.CLT_10GBE)
+                            .signalType(CltSignalType.CLT_10GBE)
                             .bidirectional(true)
                             .build();
                     intents.add(circuitIntent);
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java
index 1049d90..e1ef13f 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java
@@ -18,6 +18,7 @@
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.OchPort;
 import org.onosproject.net.OduCltPort;
@@ -102,7 +103,7 @@
                     .key(key())
                     .src(ingress)
                     .dst(egress)
-                    .signalType(OduCltPort.SignalType.CLT_10GBE)
+                    .signalType(CltSignalType.CLT_10GBE)
                     .bidirectional(bidirectional)
                     .build();
         } else if (srcPort instanceof OchPort && dstPort instanceof OchPort) {
diff --git a/core/api/src/main/java/org/onosproject/net/CltSignalType.java b/core/api/src/main/java/org/onosproject/net/CltSignalType.java
new file mode 100644
index 0000000..5a5843e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/CltSignalType.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 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.
+ * 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;
+
+/**
+ * Represents ODU (Optical channel Data Unit) client port signal type.
+ *
+ * <p>
+ * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)" and
+ * Open Networking Foundation "Optical Transport Protocol Extensions Version 1.0".
+ * </p>
+ */
+public enum CltSignalType {
+    /** bit rate in Mbps. */
+    CLT_1GBE(1_000),
+    CLT_10GBE(10_000),
+    CLT_40GBE(40_000),
+    CLT_100GBE(100_000);
+
+    private final long bitRate;
+
+    CltSignalType(long bitRate) {
+        this.bitRate = bitRate;
+    }
+
+    /**
+     * Return the bit rate in Mbps of the port.
+     * @return bit rate
+     */
+    public long bitRate() {
+        return this.bitRate;
+    }
+}
\ No newline at end of file
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 8f1630b..c63b29d 100644
--- a/core/api/src/main/java/org/onosproject/net/OchPort.java
+++ b/core/api/src/main/java/org/onosproject/net/OchPort.java
@@ -44,8 +44,8 @@
      */
     public OchPort(Element element, PortNumber number, boolean isEnabled, OduSignalType signalType,
                    boolean isTunable, OchSignal lambda, Annotations... annotations) {
-        super(element, number, isEnabled, Type.OCH, 0, annotations);
-        this.signalType = checkNotNull(signalType);
+        super(element, number, isEnabled, Type.OCH, checkNotNull(signalType).bitRate(), annotations);
+        this.signalType = signalType;
         this.isTunable = isTunable;
         this.lambda = checkNotNull(lambda);
     }
diff --git a/core/api/src/main/java/org/onosproject/net/OduCltPort.java b/core/api/src/main/java/org/onosproject/net/OduCltPort.java
index 08bb943..56f0002 100644
--- a/core/api/src/main/java/org/onosproject/net/OduCltPort.java
+++ b/core/api/src/main/java/org/onosproject/net/OduCltPort.java
@@ -28,15 +28,7 @@
 
 public class OduCltPort extends DefaultPort {
 
-    public enum SignalType {
-        CLT_1GBE,
-        CLT_10GBE,
-        CLT_40GBE,
-        CLT_100GBE
-    }
-
-    private final SignalType signalType;
-
+    private final CltSignalType signalType;
 
     /**
      * Creates an ODU client port in the specified network element.
@@ -48,9 +40,9 @@
      * @param annotations       optional key/value annotations
      */
     public OduCltPort(Element element, PortNumber number, boolean isEnabled,
-                      SignalType signalType, Annotations... annotations) {
-        super(element, number, isEnabled, Type.ODUCLT, 0, annotations);
-        this.signalType = checkNotNull(signalType);
+                      CltSignalType signalType, Annotations... annotations) {
+        super(element, number, isEnabled, Type.ODUCLT, checkNotNull(signalType).bitRate(), annotations);
+        this.signalType = signalType;
     }
 
     /**
@@ -58,7 +50,7 @@
      *
      * @return ODU client signal type
      */
-    public SignalType signalType() {
+    public CltSignalType signalType() {
         return signalType;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/OduSignalType.java b/core/api/src/main/java/org/onosproject/net/OduSignalType.java
index 014c893..336d4fc 100644
--- a/core/api/src/main/java/org/onosproject/net/OduSignalType.java
+++ b/core/api/src/main/java/org/onosproject/net/OduSignalType.java
@@ -24,10 +24,25 @@
  * </p>
  */
 public enum OduSignalType {
-    ODU0,
-    ODU1,
-    ODU2,
-    ODU2e,
-    ODU3,
-    ODU4
+    /** bit rate in Mbps. */
+    ODU0(1_250),
+    ODU1(2_500),
+    ODU2(10_000),
+    ODU2e(10_000),
+    ODU3(40_000),
+    ODU4(100_000);
+
+    private final long bitRate;
+
+    OduSignalType(long bitRate) {
+        this.bitRate = bitRate;
+    }
+
+    /**
+     * Return the bit rate in Mbps of the port.
+     * @return bit rate
+     */
+    public long bitRate() {
+        return this.bitRate;
+    }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
index eee7de2..3991e64 100644
--- a/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
@@ -16,7 +16,7 @@
 package org.onosproject.net.device;
 
 import com.google.common.base.MoreObjects;
-import org.onosproject.net.OduCltPort;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
@@ -26,7 +26,7 @@
  */
 public class OduCltPortDescription extends DefaultPortDescription {
 
-    private final OduCltPort.SignalType signalType;
+    private final CltSignalType signalType;
 
     /**
      * Creates ODU client port description based on the supplied information.
@@ -36,7 +36,7 @@
      * @param signalType    ODU client signal type
      * @param annotations   optional key/value annotations map
      */
-    public OduCltPortDescription(PortNumber number, boolean isEnabled, OduCltPort.SignalType signalType,
+    public OduCltPortDescription(PortNumber number, boolean isEnabled, CltSignalType signalType,
                                  SparseAnnotations... annotations) {
         super(number, isEnabled, Port.Type.ODUCLT, 0, annotations);
         this.signalType = signalType;
@@ -49,7 +49,7 @@
      * @param signalType    ODU client signal type
      * @param annotations   optional key/value annotations map
      */
-    public OduCltPortDescription(PortDescription base, OduCltPort.SignalType signalType,
+    public OduCltPortDescription(PortDescription base, CltSignalType signalType,
                                  SparseAnnotations annotations) {
         super(base, annotations);
         this.signalType = signalType;
@@ -60,7 +60,7 @@
      *
      * @return ODU client signal type
      */
-    public OduCltPort.SignalType signalType() {
+    public CltSignalType signalType() {
         return signalType;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
index 1e515c8..2a412f1 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
@@ -18,8 +18,8 @@
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.OduCltPort;
 
 import java.util.Collections;
 
@@ -33,7 +33,7 @@
 public class OpticalCircuitIntent extends Intent {
     private final ConnectPoint src;
     private final ConnectPoint dst;
-    private final OduCltPort.SignalType signalType;
+    private final CltSignalType signalType;
     private final boolean isBidirectional;
 
     /**
@@ -49,7 +49,7 @@
      * @param priority priority to use for flows from this intent
      */
     protected OpticalCircuitIntent(ApplicationId appId, Key key, ConnectPoint src, ConnectPoint dst,
-                                   OduCltPort.SignalType signalType, boolean isBidirectional, int priority) {
+                                   CltSignalType signalType, boolean isBidirectional, int priority) {
         super(appId, key, Collections.emptyList(), priority);
         this.src = checkNotNull(src);
         this.dst = checkNotNull(dst);
@@ -73,7 +73,7 @@
     public static class Builder extends Intent.Builder {
         private ConnectPoint src;
         private ConnectPoint dst;
-        private OduCltPort.SignalType signalType;
+        private CltSignalType signalType;
         private boolean isBidirectional;
 
         @Override
@@ -119,7 +119,7 @@
          * @param signalType signal type to use for built intent
          * @return this builder
          */
-        public Builder signalType(OduCltPort.SignalType signalType) {
+        public Builder signalType(CltSignalType signalType) {
             this.signalType = signalType;
             return this;
         }
@@ -188,7 +188,7 @@
      *
      * @return ODU signal type
      */
-    public OduCltPort.SignalType getSignalType() {
+    public CltSignalType getSignalType() {
         return signalType;
     }
 
diff --git a/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java b/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java
index ba40b2b..7c1aefd 100644
--- a/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java
+++ b/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java
@@ -17,6 +17,7 @@
 
 import org.junit.Before;
 import org.junit.Test;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.config.Config;
 import org.onosproject.net.config.ConfigApplyDelegate;
 import org.onosproject.net.config.basics.OpticalPortConfig;
@@ -24,7 +25,6 @@
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.OduCltPort;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
@@ -50,9 +50,9 @@
                                                     .build();
 
     private static final OduCltPortDescription N_DESC = new OduCltPortDescription(
-            NAMED, true, OduCltPort.SignalType.CLT_100GBE, SA);
+            NAMED, true, CltSignalType.CLT_100GBE, SA);
     private static final OduCltPortDescription FAULTY = new OduCltPortDescription(
-            null, true, OduCltPort.SignalType.CLT_100GBE);
+            null, true, CltSignalType.CLT_100GBE);
 
     private final ConfigApplyDelegate delegate = new MockCfgDelegate();
     private final ObjectMapper mapper = new ObjectMapper();
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
index de72fd2..7223d57 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
@@ -49,6 +49,7 @@
 import org.onosproject.mastership.MastershipTerm;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DefaultDevice;
@@ -483,7 +484,7 @@
             .register(GridType.class)
             .register(ChannelSpacing.class)
             .register(OduCltPort.class)
-            .register(OduCltPort.SignalType.class)
+            .register(CltSignalType.class)
             .register(IndexedLambda.class)
             .register(OchSignal.class)
             .register(OduSignalId.class)
diff --git a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
index a318068..aca0acc 100644
--- a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
+++ b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
@@ -34,6 +34,7 @@
 import org.onosproject.mastership.MastershipTerm;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DefaultDevice;
@@ -208,8 +209,8 @@
 
     @Test
     public void testOduCltPort() {
-        testSerializedEquals(new OduCltPort(DEV1, P1, true, OduCltPort.SignalType.CLT_10GBE));
-        testSerializedEquals(new OduCltPort(DEV1, P1, true, OduCltPort.SignalType.CLT_10GBE, A1_2));
+        testSerializedEquals(new OduCltPort(DEV1, P1, true, CltSignalType.CLT_10GBE));
+        testSerializedEquals(new OduCltPort(DEV1, P1, true, CltSignalType.CLT_10GBE, A1_2));
     }
 
     @Test
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index fe7f702..346ddb7 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -46,13 +46,13 @@
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.GridType;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.OchSignal;
-import org.onosproject.net.OduCltPort;
 import org.onosproject.net.OduSignalType;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
@@ -537,20 +537,20 @@
             boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) &&
                               !port.getConfig().contains(OFPortConfig.PORT_DOWN);
             Long portSpeedInMbps = portSpeed(port);
-            OduCltPort.SignalType sigType = null;
+            CltSignalType sigType = null;
 
             switch (portSpeedInMbps.toString()) {
                 case "1000":
-                    sigType = OduCltPort.SignalType.CLT_1GBE;
+                    sigType = CltSignalType.CLT_1GBE;
                     break;
                 case "10000":
-                    sigType = OduCltPort.SignalType.CLT_10GBE;
+                    sigType = CltSignalType.CLT_10GBE;
                     break;
                 case "40000":
-                    sigType = OduCltPort.SignalType.CLT_40GBE;
+                    sigType = CltSignalType.CLT_40GBE;
                     break;
                 case "100000":
-                    sigType = OduCltPort.SignalType.CLT_100GBE;
+                    sigType = CltSignalType.CLT_100GBE;
                     break;
                 default:
                     throw new RuntimeException("Un recognize OduClt speed: " + portSpeedInMbps.toString());