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 a94f597..b69e321 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
@@ -15,8 +15,10 @@
  */
 package org.onosproject.odtn.behaviour;
 
+import java.util.Collections;
 import java.util.List;
 
+import org.onosproject.net.PortNumber;
 import org.onosproject.net.driver.HandlerBehaviour;
 
 import com.google.common.annotations.Beta;
@@ -30,11 +32,18 @@
     /**
      * Generate configuration to enable/disable transceiver.
      *
-     * @param componentName to enable/disable
+     * @param port 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(String componentName, boolean enable);
+    List<CharSequence> enable(PortNumber port, boolean enable);
+
+    // defined only for the purpose of test command without device.
+    @Deprecated
+    default List<CharSequence> enable(String name, boolean enable) {
+        return Collections.emptyList();
+    }
+
 }
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 ae14e07..1379351 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
@@ -15,18 +15,27 @@
  */
 package org.onosproject.odtn.behaviour;
 
+import static org.onosproject.odtn.behaviour.OdtnDeviceDescriptionDiscovery.OC_NAME;
 import static org.onosproject.odtn.utils.YangToolUtil.toCharSequence;
 import static org.onosproject.odtn.utils.YangToolUtil.toCompositeData;
 import static org.onosproject.odtn.utils.YangToolUtil.toResourceData;
 import static org.onosproject.odtn.utils.YangToolUtil.toXmlCompositeStream;
+import static org.slf4j.LoggerFactory.getLogger;
 
+import java.util.Collections;
 import java.util.List;
 
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Port;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.odtn.utils.openconfig.Transceiver;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.ResourceId;
+import org.slf4j.Logger;
 
+import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
 /**
@@ -35,9 +44,27 @@
 public class PlainTransceiver extends AbstractHandlerBehaviour
         implements ConfigurableTransceiver {
 
+    private final Logger log = getLogger(getClass());
+
     @Override
-    public List<CharSequence> enable(String componentName, boolean enable) {
-        List<DataNode> nodes = Transceiver.enable(componentName, enable);
+    public List<CharSequence> enable(PortNumber number, boolean enable) {
+        DeviceId did = this.data().deviceId();
+        Port port = handler().get(DeviceService.class).getPort(did, number);
+        if (port == null) {
+            log.warn("{} does not exist on {}", number, 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);
+            return Collections.emptyList();
+        }
+        return enable(component, enable);
+    }
+
+    @Override
+    public List<CharSequence> enable(String component, boolean enable) {
+        List<DataNode> nodes = Transceiver.enable(component, enable);
 
         ResourceId empty = ResourceId.builder().build();
         return Lists.transform(nodes,
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 b31ee83..c393487 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
@@ -37,8 +37,10 @@
 import org.onlab.util.XmlString;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.cli.net.DeviceIdCompleter;
+import org.onosproject.cli.net.PortNumberCompleter;
 import org.onosproject.config.DynamicConfigService;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.netconf.NetconfController;
 import org.onosproject.netconf.NetconfDevice;
@@ -82,6 +84,14 @@
               required = false)
     String uri = null;
 
+    // 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",
+            required = false)
+    String portNo = null;
+
+
     // TODO add completer for this?
     @Option(name = "--component",
             description = "Component name",
@@ -142,11 +152,19 @@
             break;
 
         case ENABLE_TRANSCEIVER:
-            nodes.addAll(transceiver.enable(componentName, true));
+            if (portNo != null) {
+                nodes.addAll(transceiver.enable(PortNumber.portNumber(portNo), true));
+            } else {
+                nodes.addAll(transceiver.enable(componentName, true));
+            }
             break;
 
         case DISABLE_TRANSCEIVER:
-            nodes.addAll(transceiver.enable(componentName, false));
+            if (portNo != null) {
+                nodes.addAll(transceiver.enable(PortNumber.portNumber(portNo), false));
+            } else {
+                nodes.addAll(transceiver.enable(componentName, false));
+            }
             break;
 
         case PRECONF_OPTICAL_CHANNEL:
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 6611c01..939c9dd 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,12 +25,14 @@
             </completers>
             <optional-completers>
                 <entry key="--deviceId" value-ref="deviceIdCompleter"/>
+                <entry key="--portNo" value-ref="portNumberCompleter"/>
             </optional-completers>
         </command>
 
     </command-bundle>
 
     <bean id="deviceIdCompleter" class="org.onosproject.cli.net.DeviceIdCompleter"/>
+    <bean id="portNumberCompleter" class="org.onosproject.cli.net.PortNumberCompleter"/>
     <bean id="modeCompleter" class="org.onosproject.odtn.cli.impl.ModeCompleter"/>
 
 </blueprint>
\ No newline at end of file
