diff --git a/android/forwarder_host/src/forwarder_host.rs b/android/forwarder_host/src/forwarder_host.rs
index a32ce20..78f3555 100644
--- a/android/forwarder_host/src/forwarder_host.rs
+++ b/android/forwarder_host/src/forwarder_host.rs
@@ -29,6 +29,7 @@
 
 use forwarder::forwarder::ForwarderSession;
 use jni::objects::{JObject, JValue};
+use jni::sys::jint;
 use jni::JNIEnv;
 use log::{debug, error, info, warn};
 use nix::sys::eventfd::EventFd;
@@ -380,13 +381,14 @@
 fn update_listening_ports(
     update_queue: &Arc<Mutex<VecDeque<TcpForwardTarget>>>,
     update_evt: &EventFd,
+    cid: i32,
 ) -> Result<()> {
     let mut update_queue = update_queue.lock().unwrap();
 
     // TODO(b/340126051): Bring listening ports from the guest.
     update_queue.push_back(TcpForwardTarget {
-        port: 12345,    /* Example value for testing */
-        vsock_cid: 157, /* Placeholder value */
+        port: 12345, /* Example value for testing */
+        vsock_cid: cid as u32,
     });
 
     update_evt.write(1).map_err(Error::UpdateEventWrite)?;
@@ -394,14 +396,13 @@
 }
 
 // TODO(b/340126051): Host can receive opened ports from the guest.
-// TODO(b/340126051): Host can order executing chunnel on the guest.
-fn run_forwarder_host(jni_env: JNIEnv, jni_cb: JObject) -> Result<()> {
+fn run_forwarder_host(cid: i32, jni_env: JNIEnv, jni_cb: JObject) -> Result<()> {
     debug!("Starting forwarder_host");
     let update_evt = EventFd::new().map_err(Error::EventFdNew)?;
     let update_queue = Arc::new(Mutex::new(VecDeque::new()));
 
     // TODO(b/340126051): Instead of one-time execution, bring port info with separated thread.
-    update_listening_ports(&update_queue, &update_evt)?;
+    update_listening_ports(&update_queue, &update_evt, cid)?;
 
     let mut sessions = ForwarderSessions::new(update_evt, update_queue, jni_env, jni_cb)?;
     sessions.run()
@@ -412,9 +413,10 @@
 pub extern "C" fn Java_com_android_virtualization_vmlauncher_DebianServiceImpl_runForwarderHost(
     env: JNIEnv,
     _class: JObject,
+    cid: jint,
     callback: JObject,
 ) {
-    match run_forwarder_host(env, callback) {
+    match run_forwarder_host(cid, env, callback) {
         Ok(_) => {
             info!("forwarder_host is terminated");
         }
diff --git a/guest/forwarder_guest_launcher/Cargo.toml b/guest/forwarder_guest_launcher/Cargo.toml
index bf0c0ed..03d3f7f 100644
--- a/guest/forwarder_guest_launcher/Cargo.toml
+++ b/guest/forwarder_guest_launcher/Cargo.toml
@@ -4,10 +4,12 @@
 edition = "2021"
 
 [dependencies]
+anyhow = "1.0.91"
 clap = { version = "4.5.20", features = ["derive"] }
 prost = "0.13.3"
-tokio = { version = "1.40.0", features = ["rt-multi-thread"] }
+tokio = { version = "1.40.0", features = ["process", "rt-multi-thread"] }
 tonic = "0.12.3"
+vsock = "0.5.1"
 
 [build-dependencies]
 tonic-build = "0.12.3"
diff --git a/guest/forwarder_guest_launcher/src/main.rs b/guest/forwarder_guest_launcher/src/main.rs
index 4042fe5..59ee8c6 100644
--- a/guest/forwarder_guest_launcher/src/main.rs
+++ b/guest/forwarder_guest_launcher/src/main.rs
@@ -14,9 +14,11 @@
 
 //! Launcher of forwarder_guest
 
+use anyhow::Context;
 use clap::Parser;
 use debian_service::debian_service_client::DebianServiceClient;
-use debian_service::Empty;
+use debian_service::QueueOpeningRequest;
+use tokio::process::Command;
 use tonic::transport::Endpoint;
 use tonic::Request;
 
@@ -35,16 +37,34 @@
 
 #[tokio::main]
 async fn main() -> Result<(), Box<dyn std::error::Error>> {
+    println!("Starting forwarder_guest_launcher");
     let args = Args::parse();
     let addr = format!("https://{}:12000", args.host_addr);
 
     let channel = Endpoint::from_shared(addr)?.connect().await?;
     let mut client = DebianServiceClient::new(channel);
-    let mut res_stream =
-        client.open_forwarding_request_queue(Request::new(Empty {})).await?.into_inner();
+    let cid = vsock::get_local_cid().context("Failed to get CID of VM")?;
+    let mut res_stream = client
+        .open_forwarding_request_queue(Request::new(QueueOpeningRequest { cid: cid as i32 }))
+        .await?
+        .into_inner();
 
     while let Some(response) = res_stream.message().await? {
-        println!("Response from the host: {:?}", response);
+        let tcp_port = i16::try_from(response.guest_tcp_port)
+            .context("Failed to convert guest_tcp_port as i16")?;
+        let vsock_port = response.vsock_port as u32;
+
+        println!(
+            "executing forwarder_guest with guest_tcp_port: {:?}, vsock_port: {:?}",
+            &tcp_port, &vsock_port
+        );
+
+        let _ = Command::new("forwarder_guest")
+            .arg("--local")
+            .arg(format!("127.0.0.1:{}", tcp_port))
+            .arg("--remote")
+            .arg(format!("vsock:2:{}", vsock_port))
+            .spawn();
     }
     Ok(())
 }
diff --git a/libs/debian_service/proto/DebianService.proto b/libs/debian_service/proto/DebianService.proto
index 5e3286a..a887bf2 100644
--- a/libs/debian_service/proto/DebianService.proto
+++ b/libs/debian_service/proto/DebianService.proto
@@ -23,10 +23,12 @@
 
 service DebianService {
   rpc ReportVmIpAddr (IpAddr) returns (ReportVmIpAddrResponse) {}
-  rpc OpenForwardingRequestQueue (Empty) returns (stream ForwardingRequestItem) {}
+  rpc OpenForwardingRequestQueue (QueueOpeningRequest) returns (stream ForwardingRequestItem) {}
 }
 
-message Empty {}
+message QueueOpeningRequest {
+  int32 cid = 1;
+}
 
 message IpAddr {
   string addr = 1;
diff --git a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/DebianServiceImpl.java b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/DebianServiceImpl.java
index d62ccfb..dcc8152 100644
--- a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/DebianServiceImpl.java
+++ b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/DebianServiceImpl.java
@@ -21,9 +21,9 @@
 import androidx.annotation.Keep;
 
 import com.android.virtualization.vmlauncher.proto.DebianServiceGrpc;
-import com.android.virtualization.vmlauncher.proto.Empty;
 import com.android.virtualization.vmlauncher.proto.ForwardingRequestItem;
 import com.android.virtualization.vmlauncher.proto.IpAddr;
+import com.android.virtualization.vmlauncher.proto.QueueOpeningRequest;
 import com.android.virtualization.vmlauncher.proto.ReportVmIpAddrResponse;
 
 import io.grpc.stub.StreamObserver;
@@ -53,9 +53,9 @@
 
     @Override
     public void openForwardingRequestQueue(
-            Empty request, StreamObserver<ForwardingRequestItem> responseObserver) {
+            QueueOpeningRequest request, StreamObserver<ForwardingRequestItem> responseObserver) {
         Log.d(DebianServiceImpl.TAG, "OpenForwardingRequestQueue");
-        runForwarderHost(new ForwarderHostCallback(responseObserver));
+        runForwarderHost(request.getCid(), new ForwarderHostCallback(responseObserver));
         responseObserver.onCompleted();
     }
 
@@ -77,7 +77,7 @@
         }
     }
 
-    private static native void runForwarderHost(ForwarderHostCallback callback);
+    private static native void runForwarderHost(int cid, ForwarderHostCallback callback);
 
     protected interface DebianServiceCallback {
         void onIpAddressAvailable(String ipAddr);
