diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/ConfigurableTransceiver.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/ConfigurableTransceiver.java
index b69e321..03f2798 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/ConfigurableTransceiver.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/ConfigurableTransceiver.java
@@ -32,13 +32,14 @@
     /**
      * Generate configuration to enable/disable transceiver.
      *
-     * @param port to enable/disable
+     * @param client side port of transceiver to enable/disable
+     * @param line side port of transceiver to enable/disable
      * @param enable or disable
      * @return XML documents (List to handle configuration with multiple-roots)
      */
     // return type and how component get specified are likely to change in future
     @Beta
-    List<CharSequence> enable(PortNumber port, boolean enable);
+    List<CharSequence> enable(PortNumber client, PortNumber line, boolean enable);
 
     // defined only for the purpose of test command without device.
     @Deprecated
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/PlainTransceiver.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/PlainTransceiver.java
index 1379351..111dfee 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/PlainTransceiver.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/behaviour/PlainTransceiver.java
@@ -47,16 +47,16 @@
     private final Logger log = getLogger(getClass());
 
     @Override
-    public List<CharSequence> enable(PortNumber number, boolean enable) {
+    public List<CharSequence> enable(PortNumber client, PortNumber line, boolean enable) {
         DeviceId did = this.data().deviceId();
-        Port port = handler().get(DeviceService.class).getPort(did, number);
+        Port port = handler().get(DeviceService.class).getPort(did, client);
         if (port == null) {
-            log.warn("{} does not exist on {}", number, did);
+            log.warn("{} does not exist on {}", client, did);
             return Collections.emptyList();
         }
         String component = port.annotations().value(OC_NAME);
         if (Strings.isNullOrEmpty(component)) {
-            log.warn("{} annotation not found on {}@{}", OC_NAME, number, did);
+            log.warn("{} annotation not found on {}@{}", OC_NAME, client, did);
             return Collections.emptyList();
         }
         return enable(component, enable);
diff --git a/apps/odtn/service/src/main/java/org/onosproject/odtn/cli/impl/OdtnManualTestCommand.java b/apps/odtn/service/src/main/java/org/onosproject/odtn/cli/impl/OdtnManualTestCommand.java
index c393487..c92fd51 100644
--- a/apps/odtn/service/src/main/java/org/onosproject/odtn/cli/impl/OdtnManualTestCommand.java
+++ b/apps/odtn/service/src/main/java/org/onosproject/odtn/cli/impl/OdtnManualTestCommand.java
@@ -87,9 +87,13 @@
     // injecting dependency for OSGi package import generation purpose
     PortNumberCompleter portNoCompleter;
     // Note: this will required Port information in device subystem
-    @Option(name = "--portNo", description = "PortNumber to send configuration to",
+    @Option(name = "--cltPortNo", description = "Client-side PortNumber to send configuration to",
             required = false)
-    String portNo = null;
+    String cltPortNo = null;
+
+    @Option(name = "--linePortNo", description = "Line-side PortNumber to send configuration to",
+            required = false)
+    String linePortNo = null;
 
 
     // TODO add completer for this?
@@ -152,16 +156,20 @@
             break;
 
         case ENABLE_TRANSCEIVER:
-            if (portNo != null) {
-                nodes.addAll(transceiver.enable(PortNumber.portNumber(portNo), true));
+            if (cltPortNo != null && linePortNo != null) {
+                nodes.addAll(transceiver.enable(PortNumber.portNumber(cltPortNo),
+                                                PortNumber.portNumber(linePortNo),
+                                                true));
             } else {
                 nodes.addAll(transceiver.enable(componentName, true));
             }
             break;
 
         case DISABLE_TRANSCEIVER:
-            if (portNo != null) {
-                nodes.addAll(transceiver.enable(PortNumber.portNumber(portNo), false));
+            if (cltPortNo != null && linePortNo != null) {
+                nodes.addAll(transceiver.enable(PortNumber.portNumber(cltPortNo),
+                                                PortNumber.portNumber(linePortNo),
+                                                false));
             } else {
                 nodes.addAll(transceiver.enable(componentName, false));
             }
diff --git a/apps/odtn/service/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/apps/odtn/service/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 939c9dd..a7f1944 100644
--- a/apps/odtn/service/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/apps/odtn/service/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -25,7 +25,8 @@
             </completers>
             <optional-completers>
                 <entry key="--deviceId" value-ref="deviceIdCompleter"/>
-                <entry key="--portNo" value-ref="portNumberCompleter"/>
+                <entry key="--cltPortNo" value-ref="portNumberCompleter"/>
+                <entry key="--linePortNo" value-ref="portNumberCompleter"/>
             </optional-completers>
         </command>
 
