You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by ms...@apache.org on 2020/02/06 23:27:54 UTC

[incubator-teaclave] branch develop updated: [binder] Merge ipc into binder

This is an automated email from the ASF dual-hosted git repository.

mssun pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git


The following commit(s) were added to refs/heads/develop by this push:
     new ad2accf  [binder] Merge ipc into binder
ad2accf is described below

commit ad2accf60d04fdd3f6eeb4a59dec9e2a3bb91505
Author: Mingshen Sun <bo...@mssun.me>
AuthorDate: Thu Feb 6 15:20:00 2020 -0800

    [binder] Merge ipc into binder
---
 binder/Cargo.toml                                  | 16 +++++++-
 {ipc => binder}/attribute/Cargo.toml               |  2 +-
 {ipc => binder}/attribute/src/lib.rs               |  0
 binder/src/binder.rs                               |  7 ++--
 .../channel/app_dep.rs => binder/src/ipc/app.rs    |  7 ++--
 .../tee_dep.rs => binder/src/ipc/enclave.rs        | 10 ++---
 ipc/src/lib.rs => binder/src/ipc/mod.rs            | 45 ++++++----------------
 binder/src/lib.rs                                  | 21 +++++++---
 {ipc => binder}/src/macros.rs                      |  8 ++--
 {ipc => binder}/src/proto.rs                       |  0
 ipc/Cargo.toml                                     | 29 --------------
 ipc/src/channel/mod.rs                             | 21 ----------
 services/access_control/app/Cargo.toml             |  3 +-
 services/access_control/app/src/main.rs            |  2 +-
 services/access_control/enclave/Cargo.toml         |  6 +--
 services/access_control/enclave/src/lib.rs         |  4 +-
 services/authentication/app/Cargo.toml             |  3 +-
 services/authentication/app/src/main.rs            |  2 +-
 services/authentication/enclave/Cargo.toml         |  6 +--
 services/authentication/enclave/src/lib.rs         |  6 +--
 services/execution/app/Cargo.toml                  |  3 +-
 services/execution/app/src/main.rs                 |  2 +-
 services/execution/enclave/Cargo.toml              |  6 +--
 services/execution/enclave/src/lib.rs              |  4 +-
 services/frontend/app/Cargo.toml                   |  3 +-
 services/frontend/app/src/main.rs                  |  2 +-
 services/frontend/enclave/Cargo.toml               |  6 +--
 services/frontend/enclave/src/lib.rs               |  6 +--
 services/management/app/Cargo.toml                 |  3 +-
 services/management/app/src/main.rs                |  2 +-
 services/management/enclave/Cargo.toml             |  6 +--
 services/management/enclave/src/lib.rs             |  4 +-
 services/storage/app/Cargo.toml                    |  3 +-
 services/storage/app/src/main.rs                   |  2 +-
 services/storage/enclave/Cargo.toml                |  6 +--
 services/storage/enclave/src/lib.rs                |  4 +-
 tests/functional_tests/app/Cargo.toml              |  3 +-
 tests/functional_tests/app/src/main.rs             |  2 +-
 tests/functional_tests/enclave/Cargo.toml          |  4 +-
 tests/functional_tests/enclave/src/lib.rs          |  4 +-
 tests/integration_tests/app/Cargo.toml             |  3 +-
 tests/integration_tests/app/src/main.rs            |  2 +-
 tests/integration_tests/enclave/Cargo.toml         |  4 +-
 tests/integration_tests/enclave/src/lib.rs         |  4 +-
 tests/unit_tests/app/Cargo.toml                    |  3 +-
 tests/unit_tests/app/src/main.rs                   |  2 +-
 tests/unit_tests/enclave/Cargo.toml                |  4 +-
 tests/unit_tests/enclave/src/lib.rs                |  4 +-
 48 files changed, 118 insertions(+), 181 deletions(-)

diff --git a/binder/Cargo.toml b/binder/Cargo.toml
index 209207c..6dee9db 100644
--- a/binder/Cargo.toml
+++ b/binder/Cargo.toml
@@ -6,7 +6,17 @@ description = "Abstract communication interfaces between TEE untrusted/trusted w
 license = "Apache-2.0"
 edition = "2018"
 
+[features]
+default = []
+app = ["sgx_urts"]
+mesalock_sgx = [
+    "sgx_tstd",
+    "teaclave_binder_attribute"
+]
+enclave_unit_test = []
+
 [dependencies]
+cfg-if     = { version = "0.1.9" }
 anyhow       = { version = "1.0.26" }
 env_logger   = { version = "0.7.1" }
 log          = { version = "0.4.6" }
@@ -14,8 +24,10 @@ serde        = { version = "1.0.92", features = ["derive"] }
 serde_json   = { version = "1.0.39" }
 thiserror    = { version = "1.0.9" }
 
-teaclave_ipc = { path = "../ipc" }
 teaclave_types = { path = "../types" }
+teaclave_config = { path = "../config" }
+teaclave_binder_attribute = { path = "./attribute", optional = true }
 
 sgx_types = { version = "1.1.0" }
-sgx_urts  = { version = "1.1.0", features = ["global_init"] }
+sgx_urts  = { version = "1.1.0", features = ["global_init"], optional = true }
+sgx_tstd  = { version = "1.1.0", features = ["net", "backtrace"], optional = true }
diff --git a/ipc/attribute/Cargo.toml b/binder/attribute/Cargo.toml
similarity index 82%
rename from ipc/attribute/Cargo.toml
rename to binder/attribute/Cargo.toml
index 10901e1..e59c434 100644
--- a/ipc/attribute/Cargo.toml
+++ b/binder/attribute/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-name = "teaclave_ipc_attribute"
+name = "teaclave_binder_attribute"
 version = "0.1.0"
 authors = ["root"]
 edition = "2018"
diff --git a/ipc/attribute/src/lib.rs b/binder/attribute/src/lib.rs
similarity index 100%
rename from ipc/attribute/src/lib.rs
rename to binder/attribute/src/lib.rs
diff --git a/binder/src/binder.rs b/binder/src/binder.rs
index 7c3a70e..867e9be 100644
--- a/binder/src/binder.rs
+++ b/binder/src/binder.rs
@@ -18,13 +18,14 @@
 use sgx_types::*;
 use sgx_urts::SgxEnclave;
 
+use log::{debug, info};
 use serde::{Deserialize, Serialize};
 
-use teaclave_ipc::channel::ECallChannel;
-use teaclave_ipc::proto::{
+use crate::ipc::ECallChannel;
+use crate::ipc::IpcSender;
+use crate::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
 };
-use teaclave_ipc::IpcSender;
 use teaclave_types::TeeServiceResult;
 
 static ENCLAVE_FILE_SUFFIX: &str = "_enclave.signed.so";
diff --git a/ipc/src/channel/app_dep.rs b/binder/src/ipc/app.rs
similarity index 97%
rename from ipc/src/channel/app_dep.rs
rename to binder/src/ipc/app.rs
index 39f79e6..922053a 100644
--- a/ipc/src/channel/app_dep.rs
+++ b/binder/src/ipc/app.rs
@@ -15,16 +15,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// Insert std prelude in the top for the sgx feature
-#[cfg(feature = "mesalock_sgx")]
 use std::prelude::v1::*;
 
 use serde::{Deserialize, Serialize};
 
 use sgx_types::{sgx_enclave_id_t, sgx_status_t};
 
-use crate::IpcError;
-use crate::IpcSender;
+use crate::ipc::IpcError;
+use crate::ipc::IpcSender;
+use log::{debug, error};
 use teaclave_types::EnclaveStatus;
 
 // Delaration of ecall for App, the implementation is in TEE
diff --git a/ipc/src/channel/tee_dep.rs b/binder/src/ipc/enclave.rs
similarity index 84%
rename from ipc/src/channel/tee_dep.rs
rename to binder/src/ipc/enclave.rs
index 2515616..66a0e4d 100644
--- a/ipc/src/channel/tee_dep.rs
+++ b/binder/src/ipc/enclave.rs
@@ -15,23 +15,19 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// Insert std prelude in the top for the sgx feature
-#[cfg(feature = "mesalock_sgx")]
 use std::prelude::v1::*;
 
 use serde;
 use serde_json;
 
-use crate::IpcReceiver;
-use crate::IpcService;
-use anyhow::Result;
+use crate::ipc::{IpcReceiver, IpcService};
 
 // Implementation of Receiver
 // The receiver is TEE, the sender is App
-pub struct ECallReceiver {}
+pub struct ECallReceiver;
 
 impl IpcReceiver for ECallReceiver {
-    fn dispatch<U, V, X>(input_payload: &[u8], x: X) -> Result<Vec<u8>>
+    fn dispatch<U, V, X>(input_payload: &[u8], x: X) -> anyhow::Result<Vec<u8>>
     where
         U: for<'de> serde::Deserialize<'de>,
         V: serde::Serialize,
diff --git a/ipc/src/lib.rs b/binder/src/ipc/mod.rs
similarity index 53%
rename from ipc/src/lib.rs
rename to binder/src/ipc/mod.rs
index 2a9f42a..2669acc 100644
--- a/ipc/src/lib.rs
+++ b/binder/src/ipc/mod.rs
@@ -1,33 +1,5 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-#![cfg_attr(feature = "mesalock_sgx", no_std)]
-#[cfg(feature = "mesalock_sgx")]
-#[macro_use]
-extern crate sgx_tstd as std;
-
-#[macro_use]
-extern crate log;
-
-#[cfg(feature = "mesalock_sgx")]
-use std::prelude::v1::*;
-
-use anyhow::Result;
 use serde::{Deserialize, Serialize};
+use std::prelude::v1::*;
 
 // Intra-Process-Communication
 // Developer should split a process into two partitions, App and TEE.
@@ -59,7 +31,7 @@ where
 // Generic X: Service Instance that serves of <U, V>
 // Dispatch a received input to a specific service instance.
 pub trait IpcReceiver {
-    fn dispatch<U, V, X>(input: &[u8], x: X) -> Result<Vec<u8>>
+    fn dispatch<U, V, X>(input: &[u8], x: X) -> anyhow::Result<Vec<u8>>
     where
         U: for<'de> Deserialize<'de>,
         V: Serialize,
@@ -78,7 +50,12 @@ pub enum IpcError {
     TeeServiceError,
 }
 
-pub mod channel;
-pub mod macros;
-pub mod proto;
-pub use teaclave_ipc_attribute::handle_ecall;
+cfg_if::cfg_if! {
+    if #[cfg(feature = "app")]  {
+        mod app;
+        pub use app::ECallChannel;
+    } else if #[cfg(feature = "mesalock_sgx")] {
+        mod enclave;
+        pub use enclave::ECallReceiver;
+    }
+}
diff --git a/binder/src/lib.rs b/binder/src/lib.rs
index bbde925..ee8ee37 100644
--- a/binder/src/lib.rs
+++ b/binder/src/lib.rs
@@ -15,9 +15,20 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#[macro_use]
-extern crate log;
+#![cfg_attr(feature = "mesalock_sgx", no_std)]
+#[cfg(feature = "mesalock_sgx")]
+extern crate sgx_tstd as std;
 
-mod binder;
-mod ocall;
-pub use binder::TeeBinder;
+pub mod ipc;
+pub mod proto;
+
+cfg_if::cfg_if! {
+    if #[cfg(feature = "app")]  {
+        mod binder;
+        mod ocall;
+        pub use binder::TeeBinder;
+    } else if #[cfg(feature = "mesalock_sgx")] {
+        mod macros;
+        pub use teaclave_binder_attribute::handle_ecall;
+    }
+}
diff --git a/ipc/src/macros.rs b/binder/src/macros.rs
similarity index 95%
rename from ipc/src/macros.rs
rename to binder/src/macros.rs
index e012d5e..e4b556a 100644
--- a/ipc/src/macros.rs
+++ b/binder/src/macros.rs
@@ -16,6 +16,7 @@
 // under the License.
 
 // ATTN: Must bring `use ipc::IpcReceiver` into scope when use!!
+#[cfg(feature = "mesalock_sgx")]
 #[macro_export]
 macro_rules! register_ecall_handler {
     ( type $cmd_type: ty, $( ($cmd: path, $arg: ty, $ret: ty), )* ) =>
@@ -29,8 +30,7 @@ macro_rules! register_ecall_handler {
                 _ => anyhow::bail!("ECallCommandNotRegistered"),
             }
         }
-        use teaclave_ipc::IpcService;
-        use teaclave_ipc::IpcReceiver;
+        use teaclave_binder::ipc::IpcReceiver;
 
         // Declear a local trait, the [handle_ecall] attribute macro
         // will help implement this trait and call user defined function.
@@ -60,7 +60,7 @@ macro_rules! register_ecall_handler {
             }
         }
 
-        impl<U, V> IpcService<U, V> for ServeInstance<U, V>
+        impl<U, V> teaclave_binder::ipc::IpcService<U, V> for ServeInstance<U, V>
         where
             U: HandleRequest<V> + for<'de> serde::Deserialize<'de>,
             V: serde::Serialize,
@@ -77,7 +77,7 @@ macro_rules! register_ecall_handler {
             V: serde::Serialize,
         {
             let instance = ServeInstance::<U, V>::new();
-            teaclave_ipc::channel::ECallReceiver::dispatch(input, instance)
+            teaclave_binder::ipc::ECallReceiver::dispatch(input, instance)
         }
 
         /// The actual ecall function defined in .edl.
diff --git a/ipc/src/proto.rs b/binder/src/proto.rs
similarity index 100%
rename from ipc/src/proto.rs
rename to binder/src/proto.rs
diff --git a/ipc/Cargo.toml b/ipc/Cargo.toml
deleted file mode 100644
index 89274ef..0000000
--- a/ipc/Cargo.toml
+++ /dev/null
@@ -1,29 +0,0 @@
-[package]
-name = "teaclave_ipc"
-version = "0.1.0"
-authors = ["Teaclave Contributors <de...@teaclave.apache.org>"]
-description = "Teaclave IPC"
-license = "Apache-2.0"
-edition = "2018"
-
-[features]
-default = []
-mesalock_sgx = [
-    "sgx_tstd",
-    "teaclave_types/mesalock_sgx",
-]
-enclave_unit_test = []
-
-[dependencies]
-serde        = { version = "1.0.92", features = ["derive"] }
-anyhow       = { version = "1.0.26" }
-serde_json   = { version = "1.0.39" }
-log          = { version = "0.4.6" }
-thiserror    = { version = "1.0.9" }
-
-teaclave_ipc_attribute = { path = "./attribute" }
-teaclave_types         = { path = "../types" }
-teaclave_config = { path = "../config" }
-
-sgx_tstd  = { version = "1.1.0", features = ["net", "backtrace"], optional = true }
-sgx_types = { version = "1.1.0" }
diff --git a/ipc/src/channel/mod.rs b/ipc/src/channel/mod.rs
deleted file mode 100644
index 48386ec..0000000
--- a/ipc/src/channel/mod.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-mod app_dep;
-mod tee_dep;
-pub use app_dep::ECallChannel;
-pub use tee_dep::ECallReceiver;
diff --git a/services/access_control/app/Cargo.toml b/services/access_control/app/Cargo.toml
index 79b88de..7b93228 100644
--- a/services/access_control/app/Cargo.toml
+++ b/services/access_control/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_config            = { path = "../../../config" }
 teaclave_types             = { path = "../../../types" }
 
diff --git a/services/access_control/app/src/main.rs b/services/access_control/app/src/main.rs
index 5bfbeb3..37b19b8 100644
--- a/services/access_control/app/src/main.rs
+++ b/services/access_control/app/src/main.rs
@@ -19,8 +19,8 @@
 extern crate log;
 
 use anyhow::Result;
+use teaclave_binder::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> Result<()> {
diff --git a/services/access_control/enclave/Cargo.toml b/services/access_control/enclave/Cargo.toml
index 359c862..bbef27a 100644
--- a/services/access_control/enclave/Cargo.toml
+++ b/services/access_control/enclave/Cargo.toml
@@ -16,14 +16,14 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
   "teaclave_types/mesalock_sgx",
   "teaclave_config/mesalock_sgx",
 ]
 cov = ["teaclave_service_enclave_utils/cov"]
-enclave_unit_test = ["teaclave_ipc/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
+enclave_unit_test = ["teaclave_binder/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
 
 [dependencies]
 anyhow    = { version = "1.0.26" }
@@ -38,7 +38,7 @@ rand      = { version = "0.7.0" }
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
 teaclave_proto                 = { path = "../../proto" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/services/access_control/enclave/src/lib.rs b/services/access_control/enclave/src/lib.rs
index 8ac92f7..5086106 100644
--- a/services/access_control/enclave/src/lib.rs
+++ b/services/access_control/enclave/src/lib.rs
@@ -25,11 +25,11 @@ extern crate log;
 
 use std::prelude::v1::*;
 use teaclave_attestation::{AttestationConfig, RemoteAttestation};
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     StartServiceInput, StartServiceOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
 use teaclave_proto::teaclave_access_control_service::{
     TeaclaveAccessControlRequest, TeaclaveAccessControlResponse,
 };
diff --git a/services/authentication/app/Cargo.toml b/services/authentication/app/Cargo.toml
index dd4a2bd..1621a8d 100644
--- a/services/authentication/app/Cargo.toml
+++ b/services/authentication/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_config            = { path = "../../../config" }
 teaclave_types             = { path = "../../../types" }
 
diff --git a/services/authentication/app/src/main.rs b/services/authentication/app/src/main.rs
index 5bfbeb3..37b19b8 100644
--- a/services/authentication/app/src/main.rs
+++ b/services/authentication/app/src/main.rs
@@ -19,8 +19,8 @@
 extern crate log;
 
 use anyhow::Result;
+use teaclave_binder::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> Result<()> {
diff --git a/services/authentication/enclave/Cargo.toml b/services/authentication/enclave/Cargo.toml
index 6e5d8fa..adea3c8 100644
--- a/services/authentication/enclave/Cargo.toml
+++ b/services/authentication/enclave/Cargo.toml
@@ -16,15 +16,15 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
   "teaclave_types/mesalock_sgx",
   "teaclave_config/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "rusty-leveldb/mesalock_sgx",
 ]
 cov = ["teaclave_service_enclave_utils/cov"]
-enclave_unit_test = ["teaclave_ipc/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
+enclave_unit_test = ["teaclave_binder/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
 
 [dependencies]
 anyhow    = { version = "1.0.26" }
@@ -42,8 +42,8 @@ rusty-leveldb                  = { path = "../../../common/rusty_leveldb_sgx" }
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
 teaclave_proto                 = { path = "../../proto" }
-teaclave_ipc                   = { path = "../../../ipc" }
 teaclave_rpc                   = { path = "../../../rpc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
 teaclave_test_utils            = { path = "../../../tests/test_utils", optional = true }
diff --git a/services/authentication/enclave/src/lib.rs b/services/authentication/enclave/src/lib.rs
index 33366da..38a4e0a 100644
--- a/services/authentication/enclave/src/lib.rs
+++ b/services/authentication/enclave/src/lib.rs
@@ -29,12 +29,12 @@ use std::sync::Arc;
 use std::thread;
 use teaclave_attestation::verifier;
 use teaclave_attestation::{AttestationConfig, RemoteAttestation};
-use teaclave_config::BUILD_CONFIG;
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     StartServiceInput, StartServiceOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
+use teaclave_config::BUILD_CONFIG;
 use teaclave_proto::teaclave_authentication_service::{
     TeaclaveAuthenticationApiRequest, TeaclaveAuthenticationApiResponse,
     TeaclaveAuthenticationInternalRequest, TeaclaveAuthenticationInternalResponse,
diff --git a/services/execution/app/Cargo.toml b/services/execution/app/Cargo.toml
index a602063..83bd8d3 100644
--- a/services/execution/app/Cargo.toml
+++ b/services/execution/app/Cargo.toml
@@ -15,8 +15,7 @@ log         = { version = "0.4.6" }
 env_logger  = { version = "0.7.1" }
 anyhow      = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_config            = { path = "../../../config" }
 teaclave_types             = { path = "../../../types" }
 
diff --git a/services/execution/app/src/main.rs b/services/execution/app/src/main.rs
index 5bfbeb3..37b19b8 100644
--- a/services/execution/app/src/main.rs
+++ b/services/execution/app/src/main.rs
@@ -19,8 +19,8 @@
 extern crate log;
 
 use anyhow::Result;
+use teaclave_binder::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> Result<()> {
diff --git a/services/execution/enclave/Cargo.toml b/services/execution/enclave/Cargo.toml
index 58d8e3a..b286f61 100644
--- a/services/execution/enclave/Cargo.toml
+++ b/services/execution/enclave/Cargo.toml
@@ -16,7 +16,7 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
   "teaclave_types/mesalock_sgx",
@@ -24,7 +24,7 @@ mesalock_sgx = [
   "teaclave_worker/mesalock_sgx",
 ]
 cov = ["sgx_cov"]
-enclave_unit_test = ["teaclave_ipc/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
+enclave_unit_test = ["teaclave_binder/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
 
 [dependencies]
 log           = { version = "0.4.6" }
@@ -38,7 +38,7 @@ lazy_static   = { version = "1.0.2", features = ["spin_no_std"] }
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
 teaclave_proto                 = { path = "../../proto" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/services/execution/enclave/src/lib.rs b/services/execution/enclave/src/lib.rs
index 76776af..c4545ba 100644
--- a/services/execution/enclave/src/lib.rs
+++ b/services/execution/enclave/src/lib.rs
@@ -27,11 +27,11 @@ extern crate log;
 
 mod service;
 
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     StartServiceInput, StartServiceOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
 
 use teaclave_service_enclave_utils::ServiceEnclave;
 
diff --git a/services/frontend/app/Cargo.toml b/services/frontend/app/Cargo.toml
index 971b2a3..40b5c21 100644
--- a/services/frontend/app/Cargo.toml
+++ b/services/frontend/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_config            = { path = "../../../config" }
 teaclave_types             = { path = "../../../types" }
 
diff --git a/services/frontend/app/src/main.rs b/services/frontend/app/src/main.rs
index 5bfbeb3..37b19b8 100644
--- a/services/frontend/app/src/main.rs
+++ b/services/frontend/app/src/main.rs
@@ -19,8 +19,8 @@
 extern crate log;
 
 use anyhow::Result;
+use teaclave_binder::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> Result<()> {
diff --git a/services/frontend/enclave/Cargo.toml b/services/frontend/enclave/Cargo.toml
index 67c4b42..06cc6cc 100644
--- a/services/frontend/enclave/Cargo.toml
+++ b/services/frontend/enclave/Cargo.toml
@@ -16,14 +16,14 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
   "teaclave_types/mesalock_sgx",
   "teaclave_config/mesalock_sgx",
 ]
 cov = ["teaclave_service_enclave_utils/cov"]
-enclave_unit_test = ["teaclave_ipc/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
+enclave_unit_test = ["teaclave_binder/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
 
 [dependencies]
 anyhow    = { version = "1.0.26" }
@@ -38,7 +38,7 @@ rand      = { version = "0.7.0" }
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
 teaclave_proto                 = { path = "../../proto" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/services/frontend/enclave/src/lib.rs b/services/frontend/enclave/src/lib.rs
index da27852..7ffd5a1 100644
--- a/services/frontend/enclave/src/lib.rs
+++ b/services/frontend/enclave/src/lib.rs
@@ -26,12 +26,12 @@ extern crate log;
 use std::prelude::v1::*;
 use teaclave_attestation::verifier;
 use teaclave_attestation::{AttestationConfig, RemoteAttestation};
-use teaclave_config::BUILD_CONFIG;
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     StartServiceInput, StartServiceOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
+use teaclave_config::BUILD_CONFIG;
 use teaclave_proto::teaclave_frontend_service::{
     TeaclaveFrontendRequest, TeaclaveFrontendResponse,
 };
diff --git a/services/management/app/Cargo.toml b/services/management/app/Cargo.toml
index af7c251..f9fd7e7 100644
--- a/services/management/app/Cargo.toml
+++ b/services/management/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_config            = { path = "../../../config" }
 teaclave_types             = { path = "../../../types" }
 
diff --git a/services/management/app/src/main.rs b/services/management/app/src/main.rs
index 5bfbeb3..37b19b8 100644
--- a/services/management/app/src/main.rs
+++ b/services/management/app/src/main.rs
@@ -19,8 +19,8 @@
 extern crate log;
 
 use anyhow::Result;
+use teaclave_binder::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> Result<()> {
diff --git a/services/management/enclave/Cargo.toml b/services/management/enclave/Cargo.toml
index 28c598b..5767172 100644
--- a/services/management/enclave/Cargo.toml
+++ b/services/management/enclave/Cargo.toml
@@ -16,14 +16,14 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
   "teaclave_types/mesalock_sgx",
   "teaclave_config/mesalock_sgx",
 ]
 cov = ["teaclave_service_enclave_utils/cov"]
-enclave_unit_test = ["teaclave_ipc/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
+enclave_unit_test = ["teaclave_binder/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
 
 [dependencies]
 anyhow    = { version = "1.0.26" }
@@ -38,7 +38,7 @@ rand      = { version = "0.7.0" }
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
 teaclave_proto                 = { path = "../../proto" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/services/management/enclave/src/lib.rs b/services/management/enclave/src/lib.rs
index 9af1d48..d0fe71b 100644
--- a/services/management/enclave/src/lib.rs
+++ b/services/management/enclave/src/lib.rs
@@ -25,11 +25,11 @@ extern crate log;
 
 use std::prelude::v1::*;
 use teaclave_attestation::{AttestationConfig, RemoteAttestation};
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     StartServiceInput, StartServiceOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
 use teaclave_proto::teaclave_management_service::{
     TeaclaveManagementRequest, TeaclaveManagementResponse,
 };
diff --git a/services/storage/app/Cargo.toml b/services/storage/app/Cargo.toml
index d76647c..f26371b 100644
--- a/services/storage/app/Cargo.toml
+++ b/services/storage/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_config            = { path = "../../../config" }
 teaclave_types             = { path = "../../../types" }
 
diff --git a/services/storage/app/src/main.rs b/services/storage/app/src/main.rs
index 5bfbeb3..37b19b8 100644
--- a/services/storage/app/src/main.rs
+++ b/services/storage/app/src/main.rs
@@ -19,8 +19,8 @@
 extern crate log;
 
 use anyhow::Result;
+use teaclave_binder::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> Result<()> {
diff --git a/services/storage/enclave/Cargo.toml b/services/storage/enclave/Cargo.toml
index 866c51c..3aa7ac7 100644
--- a/services/storage/enclave/Cargo.toml
+++ b/services/storage/enclave/Cargo.toml
@@ -16,7 +16,7 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
   "teaclave_types/mesalock_sgx",
@@ -24,7 +24,7 @@ mesalock_sgx = [
   "rusty-leveldb/mesalock_sgx",
 ]
 cov = ["teaclave_service_enclave_utils/cov"]
-enclave_unit_test = ["teaclave_ipc/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
+enclave_unit_test = ["teaclave_binder/enclave_unit_test", "teaclave_test_utils/mesalock_sgx"]
 
 [dependencies]
 anyhow    = { version = "1.0.26" }
@@ -37,7 +37,7 @@ rusty-leveldb                  = { path = "../../../common/rusty_leveldb_sgx" }
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
 teaclave_proto                 = { path = "../../proto" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/services/storage/enclave/src/lib.rs b/services/storage/enclave/src/lib.rs
index f54b599..cb0417a 100644
--- a/services/storage/enclave/src/lib.rs
+++ b/services/storage/enclave/src/lib.rs
@@ -24,11 +24,11 @@ extern crate log;
 
 use std::prelude::v1::*;
 
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     StartServiceInput, StartServiceOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
 use teaclave_service_enclave_utils::ServiceEnclave;
 use teaclave_types::{TeeServiceError, TeeServiceResult};
 
diff --git a/tests/functional_tests/app/Cargo.toml b/tests/functional_tests/app/Cargo.toml
index 03104b5..727a438 100644
--- a/tests/functional_tests/app/Cargo.toml
+++ b/tests/functional_tests/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_types             = { path = "../../../types" }
 
 sgx_types = { version = "1.1.0" }
diff --git a/tests/functional_tests/app/src/main.rs b/tests/functional_tests/app/src/main.rs
index dd9ab4d..6897147 100644
--- a/tests/functional_tests/app/src/main.rs
+++ b/tests/functional_tests/app/src/main.rs
@@ -17,8 +17,8 @@
 
 use anyhow;
 use log::error;
+use teaclave_binder::proto::{ECallCommand, RunTestInput, RunTestOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, RunTestInput, RunTestOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> anyhow::Result<()> {
diff --git a/tests/functional_tests/enclave/Cargo.toml b/tests/functional_tests/enclave/Cargo.toml
index d7cb5c5..d545b3d 100644
--- a/tests/functional_tests/enclave/Cargo.toml
+++ b/tests/functional_tests/enclave/Cargo.toml
@@ -16,7 +16,7 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_config/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
@@ -35,7 +35,7 @@ url         = { version = "2.1.1" }
 
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/tests/functional_tests/enclave/src/lib.rs b/tests/functional_tests/enclave/src/lib.rs
index c92d939..8cb07f6 100644
--- a/tests/functional_tests/enclave/src/lib.rs
+++ b/tests/functional_tests/enclave/src/lib.rs
@@ -27,11 +27,11 @@ use std::prelude::v1::*;
 
 use teaclave_types;
 
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     RunTestInput, RunTestOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
 use teaclave_service_enclave_utils::ServiceEnclave;
 use teaclave_test_utils::check_all_passed;
 use teaclave_types::TeeServiceResult;
diff --git a/tests/integration_tests/app/Cargo.toml b/tests/integration_tests/app/Cargo.toml
index 10accdf..010c5a9 100644
--- a/tests/integration_tests/app/Cargo.toml
+++ b/tests/integration_tests/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_config            = { path = "../../../config" }
 teaclave_test_utils        = { path = "../../test_utils" }
 teaclave_types             = { path = "../../../types" }
diff --git a/tests/integration_tests/app/src/main.rs b/tests/integration_tests/app/src/main.rs
index dd9ab4d..6897147 100644
--- a/tests/integration_tests/app/src/main.rs
+++ b/tests/integration_tests/app/src/main.rs
@@ -17,8 +17,8 @@
 
 use anyhow;
 use log::error;
+use teaclave_binder::proto::{ECallCommand, RunTestInput, RunTestOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, RunTestInput, RunTestOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> anyhow::Result<()> {
diff --git a/tests/integration_tests/enclave/Cargo.toml b/tests/integration_tests/enclave/Cargo.toml
index 802b571..853d54a 100644
--- a/tests/integration_tests/enclave/Cargo.toml
+++ b/tests/integration_tests/enclave/Cargo.toml
@@ -16,7 +16,7 @@ mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
   "teaclave_proto/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_config/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
@@ -42,7 +42,7 @@ protected_fs_rs    = { path = "../../../common/protected_fs_rs", default-feature
 
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/tests/integration_tests/enclave/src/lib.rs b/tests/integration_tests/enclave/src/lib.rs
index 1a82bb5..1d029cd 100644
--- a/tests/integration_tests/enclave/src/lib.rs
+++ b/tests/integration_tests/enclave/src/lib.rs
@@ -28,11 +28,11 @@ use std::prelude::v1::*;
 use teaclave_types;
 use teaclave_types::TeeServiceResult;
 
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     RunTestInput, RunTestOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
 use teaclave_service_enclave_utils::ServiceEnclave;
 use teaclave_test_utils::check_all_passed;
 
diff --git a/tests/unit_tests/app/Cargo.toml b/tests/unit_tests/app/Cargo.toml
index cea003a..5b43a97 100644
--- a/tests/unit_tests/app/Cargo.toml
+++ b/tests/unit_tests/app/Cargo.toml
@@ -12,8 +12,7 @@ log        = { version = "0.4.6" }
 env_logger = { version = "0.7.1" }
 anyhow     = { version = "1.0.26" }
 
-teaclave_ipc               = { path = "../../../ipc" }
-teaclave_binder            = { path = "../../../binder" }
+teaclave_binder            = { path = "../../../binder", features = ["app"] }
 teaclave_types             = { path = "../../../types" }
 
 sgx_types = { version = "1.1.0" }
diff --git a/tests/unit_tests/app/src/main.rs b/tests/unit_tests/app/src/main.rs
index dd9ab4d..6897147 100644
--- a/tests/unit_tests/app/src/main.rs
+++ b/tests/unit_tests/app/src/main.rs
@@ -17,8 +17,8 @@
 
 use anyhow;
 use log::error;
+use teaclave_binder::proto::{ECallCommand, RunTestInput, RunTestOutput};
 use teaclave_binder::TeeBinder;
-use teaclave_ipc::proto::{ECallCommand, RunTestInput, RunTestOutput};
 use teaclave_types::TeeServiceResult;
 
 fn main() -> anyhow::Result<()> {
diff --git a/tests/unit_tests/enclave/Cargo.toml b/tests/unit_tests/enclave/Cargo.toml
index 9256c77..d8c9888 100644
--- a/tests/unit_tests/enclave/Cargo.toml
+++ b/tests/unit_tests/enclave/Cargo.toml
@@ -15,7 +15,7 @@ default = []
 mesalock_sgx = [
   "sgx_tstd",
   "teaclave_attestation/mesalock_sgx",
-  "teaclave_ipc/mesalock_sgx",
+  "teaclave_binder/mesalock_sgx",
   "teaclave_rpc/mesalock_sgx",
   "teaclave_service_enclave_utils/mesalock_sgx",
   "teaclave_types/mesalock_sgx",
@@ -49,7 +49,7 @@ teaclave_worker                 = { path = "../../../worker" }
 teaclave_test_utils            = { path = "../../test_utils" }
 teaclave_attestation           = { path = "../../../attestation" }
 teaclave_config                = { path = "../../../config" }
-teaclave_ipc                   = { path = "../../../ipc" }
+teaclave_binder                = { path = "../../../binder" }
 teaclave_rpc                   = { path = "../../../rpc" }
 teaclave_service_enclave_utils = { path = "../../../utils/service_enclave_utils" }
 teaclave_types                 = { path = "../../../types" }
diff --git a/tests/unit_tests/enclave/src/lib.rs b/tests/unit_tests/enclave/src/lib.rs
index 942647d..25718e7 100644
--- a/tests/unit_tests/enclave/src/lib.rs
+++ b/tests/unit_tests/enclave/src/lib.rs
@@ -27,11 +27,11 @@ use std::prelude::v1::*;
 use teaclave_types;
 use teaclave_types::TeeServiceResult;
 
-use teaclave_ipc::proto::{
+use teaclave_binder::proto::{
     ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput, InitEnclaveInput, InitEnclaveOutput,
     RunTestInput, RunTestOutput,
 };
-use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_binder::{handle_ecall, register_ecall_handler};
 use teaclave_service_enclave_utils::ServiceEnclave;
 
 use teaclave_access_control_service_enclave;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org