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 d37c501 [services] Start to implement management service
d37c501 is described below
commit d37c5019fab4f2e6b3372e4d76ea8d52d01f6f5f
Author: Mingshen Sun <[email protected]>
AuthorDate: Tue Feb 4 11:43:34 2020 -0800
[services] Start to implement management service
---
cmake/tomls/Cargo.sgx_trusted_lib.toml | 1 +
cmake/tomls/Cargo.sgx_untrusted_app.toml | 1 +
config/runtime.config.toml | 1 +
config/src/runtime.rs | 1 +
services/management/app/Cargo.toml | 19 +++++
services/management/app/build.rs | 51 +++++++++++
services/management/app/src/main.rs | 47 ++++++++++
services/management/enclave/Cargo.toml | 48 +++++++++++
services/management/enclave/Enclave.config.xml | 12 +++
services/management/enclave/src/lib.rs | 99 ++++++++++++++++++++++
services/management/enclave/src/service.rs | 33 ++++++++
services/proto/build.rs | 1 +
services/proto/proto_gen/main.rs | 63 ++++++++++++--
services/proto/proto_gen/templates/proto.j2 | 17 +++-
services/proto/src/lib.rs | 5 ++
.../src/proto/teaclave_management_service.proto | 10 +++
services/proto/src/teaclave_management_service.rs | 6 ++
tests/fixtures/runtime.config.toml | 1 +
18 files changed, 404 insertions(+), 12 deletions(-)
diff --git a/cmake/tomls/Cargo.sgx_trusted_lib.toml
b/cmake/tomls/Cargo.sgx_trusted_lib.toml
index 6a0113d..01699f7 100644
--- a/cmake/tomls/Cargo.sgx_trusted_lib.toml
+++ b/cmake/tomls/Cargo.sgx_trusted_lib.toml
@@ -5,6 +5,7 @@ members = [
"services/database/enclave",
"services/execution/enclave",
"services/frontend/enclave",
+ "services/management/enclave",
"tests/unit_tests/enclave",
"tests/functional_tests/enclave",
"tests/integration_tests/enclave",
diff --git a/cmake/tomls/Cargo.sgx_untrusted_app.toml
b/cmake/tomls/Cargo.sgx_untrusted_app.toml
index 31cca0a..04158fc 100644
--- a/cmake/tomls/Cargo.sgx_untrusted_app.toml
+++ b/cmake/tomls/Cargo.sgx_untrusted_app.toml
@@ -5,6 +5,7 @@ members = [
"services/database/app",
"services/execution/app",
"services/frontend/app",
+ "services/management/app",
"tests/unit_tests/app",
"tests/functional_tests/app",
"tests/integration_tests/app",
diff --git a/config/runtime.config.toml b/config/runtime.config.toml
index b0f1216..59776cb 100644
--- a/config/runtime.config.toml
+++ b/config/runtime.config.toml
@@ -10,6 +10,7 @@ frontend = { listen_address = "0.0.0.0:7777" }
[internal_endpoints]
authentication = { listen_address = "0.0.0.0:17776", advertised_address =
"localhost:17776", inbound_services = ["frontend"] }
+management = { listen_address = "0.0.0.0:17777", advertised_address =
"localhost:17777" }
dbs = { listen_address = "0.0.0.0:7778", advertised_address =
"127.0.0.1:7778", inbound_services = ["frontend"] }
execution = { listen_address = "0.0.0.0:7989", advertised_address =
"127.0.0.1:7989" }
diff --git a/config/src/runtime.rs b/config/src/runtime.rs
index 6ccf579..092484c 100644
--- a/config/src/runtime.rs
+++ b/config/src/runtime.rs
@@ -32,6 +32,7 @@ pub struct ApiEndpointsConfig {
#[derive(Debug, Serialize, Deserialize)]
pub struct InternalEndpointsConfig {
pub authentication: InternalEndpoint,
+ pub management: InternalEndpoint,
pub dbs: InternalEndpoint,
pub execution: InternalEndpoint,
}
diff --git a/services/management/app/Cargo.toml
b/services/management/app/Cargo.toml
new file mode 100644
index 0000000..4e4832f
--- /dev/null
+++ b/services/management/app/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "teaclave_management_service"
+version = "0.1.0"
+authors = ["Teaclave Contributors <[email protected]>"]
+description = "Teaclave Management Service"
+license = "Apache-2.0"
+build = "build.rs"
+edition = "2018"
+
+[dependencies]
+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_config = { path = "../../../config" }
+
+sgx_types = { version = "1.1.0" }
diff --git a/services/management/app/build.rs b/services/management/app/build.rs
new file mode 100644
index 0000000..b92afb5
--- /dev/null
+++ b/services/management/app/build.rs
@@ -0,0 +1,51 @@
+// 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.
+
+use std::env;
+use std::path::PathBuf;
+
+fn choose_sgx_dylib(is_sim: bool) {
+ if is_sim {
+ println!("cargo:rustc-link-lib=dylib=sgx_urts_sim");
+ println!("cargo:rustc-link-lib=dylib=sgx_uae_service_sim");
+ } else {
+ println!("cargo:rustc-link-lib=dylib=sgx_urts");
+ println!("cargo:rustc-link-lib=dylib=sgx_uae_service");
+ }
+}
+
+fn main() {
+ let sdk_dir = env::var("SGX_SDK").unwrap_or("/opt/intel/sgxsdk".into());
+ println!("cargo:rustc-link-search=native={}/lib64", sdk_dir);
+
+ let out_path = env::var_os("ENCLAVE_OUT_DIR").unwrap_or("out".into());
+ let out_dir = &PathBuf::from(out_path);
+
+ println!("cargo:rustc-link-search=native={}", out_dir.display());
+ println!("cargo:rustc-link-lib=static=Enclave_u");
+
+ let is_sim = match env::var("SGX_MODE") {
+ Ok(ref v) if v == "SW" => true,
+ Ok(ref v) if v == "HW" => false,
+ Err(env::VarError::NotPresent) => false,
+ _ => {
+ panic!("Stop build process, wrong SGX_MODE env provided.");
+ }
+ };
+
+ choose_sgx_dylib(is_sim);
+}
diff --git a/services/management/app/src/main.rs
b/services/management/app/src/main.rs
new file mode 100644
index 0000000..3f259ad
--- /dev/null
+++ b/services/management/app/src/main.rs
@@ -0,0 +1,47 @@
+// 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.
+
+#[macro_use]
+extern crate log;
+
+use anyhow::Result;
+use teaclave_binder::TeeBinder;
+use teaclave_ipc::proto::{ECallCommand, StartServiceInput, StartServiceOutput};
+
+fn main() -> Result<()> {
+ env_logger::init();
+ let tee = TeeBinder::new(env!("CARGO_PKG_NAME"), 1)?;
+ run(&tee)?;
+
+ Ok(())
+}
+
+fn start_enclave_service(tee: &TeeBinder) -> Result<()> {
+ info!("Start enclave service");
+ let config =
teaclave_config::RuntimeConfig::from_toml("runtime.config.toml")?;
+ let input = StartServiceInput { config };
+ let cmd = ECallCommand::StartService;
+ let _ = tee.invoke::<StartServiceInput, StartServiceOutput>(cmd.into(),
input);
+
+ Ok(())
+}
+
+fn run(tee: &TeeBinder) -> Result<()> {
+ start_enclave_service(tee)?;
+
+ Ok(())
+}
diff --git a/services/management/enclave/Cargo.toml
b/services/management/enclave/Cargo.toml
new file mode 100644
index 0000000..28c598b
--- /dev/null
+++ b/services/management/enclave/Cargo.toml
@@ -0,0 +1,48 @@
+[package]
+name = "teaclave_management_service_enclave"
+version = "0.1.0"
+authors = ["Teaclave Contributors <[email protected]>"]
+description = "Teaclave Management Service enclave"
+license = "Apache-2.0"
+edition = "2018"
+
+[lib]
+name = "teaclave_management_service_enclave"
+crate-type = ["staticlib", "rlib"]
+
+[features]
+default = []
+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",
+]
+cov = ["teaclave_service_enclave_utils/cov"]
+enclave_unit_test = ["teaclave_ipc/enclave_unit_test",
"teaclave_test_utils/mesalock_sgx"]
+
+[dependencies]
+anyhow = { version = "1.0.26" }
+cfg-if = { version = "0.1.9" }
+log = { version = "0.4.6" }
+serde = { version = "1.0.92" }
+serde_json = { version = "1.0.39" }
+thiserror = { version = "1.0.9" }
+ring = { version = "0.16.5" }
+rand = { version = "0.7.0" }
+
+teaclave_attestation = { path = "../../../attestation" }
+teaclave_config = { path = "../../../config" }
+teaclave_proto = { path = "../../proto" }
+teaclave_ipc = { path = "../../../ipc" }
+teaclave_rpc = { path = "../../../rpc" }
+teaclave_service_enclave_utils = { path =
"../../../utils/service_enclave_utils" }
+teaclave_types = { path = "../../../types" }
+teaclave_test_utils = { path = "../../../tests/test_utils" }
+
+sgx_tstd = { version = "1.1.0", features = ["net", "thread",
"backtrace"], optional = true }
+sgx_types = { version = "1.1.0" }
diff --git a/services/management/enclave/Enclave.config.xml
b/services/management/enclave/Enclave.config.xml
new file mode 100644
index 0000000..705edcd
--- /dev/null
+++ b/services/management/enclave/Enclave.config.xml
@@ -0,0 +1,12 @@
+<!-- Please refer to User's Guide for the explanation of each field -->
+<EnclaveConfiguration>
+ <ProdID>0</ProdID>
+ <ISVSVN>0</ISVSVN>
+ <StackMaxSize>0x200000</StackMaxSize>
+ <HeapMaxSize>0x1000000</HeapMaxSize>
+ <TCSNum>22</TCSNum>
+ <TCSPolicy>0</TCSPolicy>
+ <DisableDebug>0</DisableDebug>
+ <MiscSelect>0</MiscSelect>
+ <MiscMask>0xFFFFFFFF</MiscMask>
+</EnclaveConfiguration>
diff --git a/services/management/enclave/src/lib.rs
b/services/management/enclave/src/lib.rs
new file mode 100644
index 0000000..2e897c6
--- /dev/null
+++ b/services/management/enclave/src/lib.rs
@@ -0,0 +1,99 @@
+// 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;
+
+use anyhow::Result;
+use std::prelude::v1::*;
+use teaclave_attestation::{AttestationConfig, RemoteAttestation};
+use teaclave_ipc::proto::{
+ ECallCommand, FinalizeEnclaveInput, FinalizeEnclaveOutput,
InitEnclaveInput, InitEnclaveOutput,
+ StartServiceInput, StartServiceOutput,
+};
+use teaclave_ipc::{handle_ecall, register_ecall_handler};
+use teaclave_proto::teaclave_management_service::{
+ TeaclaveManagementRequest, TeaclaveManagementResponse,
+};
+use teaclave_rpc::config::SgxTrustedTlsServerConfig;
+use teaclave_rpc::server::SgxTrustedTlsServer;
+use teaclave_service_enclave_utils::ServiceEnclave;
+
+mod service;
+
+#[handle_ecall]
+fn handle_start_service(args: &StartServiceInput) ->
Result<StartServiceOutput> {
+ debug!("handle_start_service");
+ let listen_address =
args.config.internal_endpoints.management.listen_address;
+ let ias_config = args.config.ias.as_ref().unwrap();
+ let attestation =
RemoteAttestation::generate_and_endorse(&AttestationConfig::ias(
+ &ias_config.ias_key,
+ &ias_config.ias_spid,
+ ))
+ .unwrap();
+ let config = SgxTrustedTlsServerConfig::new_without_verifier(
+ &attestation.cert,
+ &attestation.private_key,
+ )
+ .unwrap();
+
+ let mut server =
+ SgxTrustedTlsServer::<TeaclaveManagementResponse,
TeaclaveManagementRequest>::new(
+ listen_address,
+ &config,
+ );
+ let service = service::TeaclaveManagementService;
+ match server.start(service) {
+ Ok(_) => (),
+ Err(e) => {
+ error!("Service exit, error: {}.", e);
+ }
+ }
+
+ Ok(StartServiceOutput::default())
+}
+
+#[handle_ecall]
+fn handle_init_enclave(_args: &InitEnclaveInput) -> Result<InitEnclaveOutput> {
+ ServiceEnclave::init(env!("CARGO_PKG_NAME"))?;
+ Ok(InitEnclaveOutput::default())
+}
+
+#[handle_ecall]
+fn handle_finalize_enclave(_args: &FinalizeEnclaveInput) ->
Result<FinalizeEnclaveOutput> {
+ ServiceEnclave::finalize()?;
+ Ok(FinalizeEnclaveOutput::default())
+}
+
+register_ecall_handler!(
+ type ECallCommand,
+ (ECallCommand::StartService, StartServiceInput, StartServiceOutput),
+ (ECallCommand::InitEnclave, InitEnclaveInput, InitEnclaveOutput),
+ (ECallCommand::FinalizeEnclave, FinalizeEnclaveInput,
FinalizeEnclaveOutput),
+);
+
+#[cfg(feature = "enclave_unit_test")]
+pub mod tests {
+ use super::*;
+
+ pub fn run_tests() -> bool {}
+}
diff --git a/services/management/enclave/src/service.rs
b/services/management/enclave/src/service.rs
new file mode 100644
index 0000000..bc41bd9
--- /dev/null
+++ b/services/management/enclave/src/service.rs
@@ -0,0 +1,33 @@
+use std::prelude::v1::*;
+use teaclave_proto::teaclave_frontend_service::{
+ RegisterInputFileRequest, RegisterInputFileResponse,
RegisterOutputFileRequest,
+ RegisterOutputFileResponse,
+};
+use teaclave_proto::teaclave_management_service::TeaclaveManagement;
+use teaclave_rpc::Request;
+use teaclave_service_enclave_utils::teaclave_service;
+use teaclave_types::TeaclaveServiceResponseResult;
+
+#[teaclave_service(
+ teaclave_management_service,
+ TeaclaveManagement,
+ TeaclaveManagementError
+)]
+#[derive(Clone)]
+pub(crate) struct TeaclaveManagementService;
+
+impl TeaclaveManagement for TeaclaveManagementService {
+ fn register_input_file(
+ &self,
+ _request: Request<RegisterInputFileRequest>,
+ ) -> TeaclaveServiceResponseResult<RegisterInputFileResponse> {
+ unimplemented!()
+ }
+
+ fn register_output_file(
+ &self,
+ _request: Request<RegisterOutputFileRequest>,
+ ) -> TeaclaveServiceResponseResult<RegisterOutputFileResponse> {
+ unimplemented!()
+ }
+}
diff --git a/services/proto/build.rs b/services/proto/build.rs
index e02befb..254c306 100644
--- a/services/proto/build.rs
+++ b/services/proto/build.rs
@@ -26,6 +26,7 @@ fn main() {
"src/proto/teaclave_database_service.proto",
"src/proto/teaclave_execution_service.proto",
"src/proto/teaclave_frontend_service.proto",
+ "src/proto/teaclave_management_service.proto",
];
let out_dir = env::var("OUT_DIR").expect("$OUT_DIR not set. Please build
with cargo");
diff --git a/services/proto/proto_gen/main.rs b/services/proto/proto_gen/main.rs
index 1b0b194..db73c28 100644
--- a/services/proto/proto_gen/main.rs
+++ b/services/proto/proto_gen/main.rs
@@ -26,18 +26,65 @@ pub struct MesaTEEServiceGenerator;
#[derive(Template)]
#[template(path = "proto.j2")]
-struct ProtoTemplate<'a> {
- service: &'a prost_build::Service,
- proto_impl_mod_name: &'a str,
+struct ProtoTemplate {
+ service: Service,
+}
+
+struct Method {
+ name: String,
+ proto_name: String,
+ input_type: String,
+ impl_input_type: String,
+ output_type: String,
+ impl_output_type: String,
+}
+
+struct Service {
+ proto_name: String,
+ methods: Vec<Method>,
+}
+
+impl Service {
+ fn from_prost(prost_service: &prost_build::Service) -> Self {
+ fn convert_to_impl_type(current_package_name: &str, proto_type: &str)
-> String {
+ if proto_type.starts_with("super::") {
+ format!(
+ "crate::{}",
+ proto_type
+ .trim_start_matches("super::")
+ .replacen("_proto", "", 1)
+ )
+ } else {
+ format!("crate::{}::{}", current_package_name, proto_type)
+ }
+ }
+ let mut methods = vec![];
+ let package_name = prost_service.package.trim_end_matches("_proto");
+ for m in prost_service.methods.iter() {
+ let impl_input_type = convert_to_impl_type(&package_name,
&m.input_type);
+ let impl_output_type = convert_to_impl_type(&package_name,
&m.output_type);
+
+ let method = Method {
+ name: m.name.clone(),
+ proto_name: m.proto_name.clone(),
+ input_type: m.input_type.clone(),
+ impl_input_type,
+ output_type: m.output_type.clone(),
+ impl_output_type,
+ };
+ methods.push(method);
+ }
+ Self {
+ proto_name: prost_service.proto_name.clone(),
+ methods,
+ }
+ }
}
impl MesaTEEServiceGenerator {
fn generate_from_template(&mut self, service: &prost_build::Service, buf:
&mut String) {
- let name_len = service.package.len();
- let proto_template = ProtoTemplate {
- service,
- proto_impl_mod_name: &service.package[0..name_len -
"_proto".len()],
- };
+ let service = Service::from_prost(service);
+ let proto_template = ProtoTemplate { service };
buf.push_str(&proto_template.render().unwrap());
}
}
diff --git a/services/proto/proto_gen/templates/proto.j2
b/services/proto/proto_gen/templates/proto.j2
index 665ac76..ee4edb1 100644
--- a/services/proto/proto_gen/templates/proto.j2
+++ b/services/proto/proto_gen/templates/proto.j2
@@ -16,16 +16,22 @@ pub enum {{ service.proto_name }}Response {
pub trait {{ service.proto_name }} {
{%- for m in service.methods %}
- fn {{ m.name }}(&self, request: teaclave_rpc::Request<crate::{{
proto_impl_mod_name }}::{{ m.input_type }}>) ->
teaclave_types::TeaclaveServiceResponseResult<crate::{{ proto_impl_mod_name
}}::{{ m.output_type }}>;
+ fn {{ m.name }}(
+ &self,
+ request: teaclave_rpc::Request<{{ m.impl_input_type }}>
+ ) -> teaclave_types::TeaclaveServiceResponseResult<{{ m.impl_output_type
}}>;
{%- endfor %}
- fn dispatch(&self, request: teaclave_rpc::Request<{{ service.proto_name
}}Request>) -> teaclave_types::TeaclaveServiceResponseResult<{{
service.proto_name }}Response> {
+ fn dispatch(
+ &self,
+ request: teaclave_rpc::Request<{{ service.proto_name }}Request>
+ ) -> teaclave_types::TeaclaveServiceResponseResult<{{ service.proto_name
}}Response> {
use core::convert::TryFrom;
use std::string::ToString;
match request.message {
{%- for m in service.methods %}
{{ service.proto_name }}Request::{{ m.proto_name }}(r) => {
- let r = crate::{{ proto_impl_mod_name }}::{{ m.input_type
}}::try_from(r)
+ let r = {{ m.impl_input_type }}::try_from(r)
.map_err(|_|
teaclave_types::TeaclaveServiceResponseError::InternalError("internal".to_string()))?;
let r = teaclave_rpc::Request {
metadata: request.metadata,
@@ -67,7 +73,10 @@ impl {{ service.proto_name }}Client {
}
{%- for m in service.methods %}
- pub fn {{ m.name }}<T: Into<{{ m.input_type }}>>(&mut self, request: T) ->
teaclave_types::TeaclaveServiceResponseResult<{{ m.output_type }}> {
+ pub fn {{ m.name }}<T: Into<{{ m.input_type }}>>(
+ &mut self,
+ request: T
+ ) -> teaclave_types::TeaclaveServiceResponseResult<{{ m.output_type }}> {
{%- if service.methods.len() > 1 %}
use std::string::ToString;
{%- endif %}
diff --git a/services/proto/src/lib.rs b/services/proto/src/lib.rs
index 637218b..2424937 100644
--- a/services/proto/src/lib.rs
+++ b/services/proto/src/lib.rs
@@ -24,6 +24,7 @@ pub mod teaclave_common;
pub mod teaclave_database_service;
pub mod teaclave_execution_service;
pub mod teaclave_frontend_service;
+pub mod teaclave_management_service;
macro_rules! include_proto {
($package: tt) => {
@@ -50,3 +51,7 @@ pub mod teaclave_execution_service_proto {
pub mod teaclave_frontend_service_proto {
include_proto!("teaclave_frontend_service_proto");
}
+
+pub mod teaclave_management_service_proto {
+ include_proto!("teaclave_management_service_proto");
+}
diff --git a/services/proto/src/proto/teaclave_management_service.proto
b/services/proto/src/proto/teaclave_management_service.proto
new file mode 100644
index 0000000..48a6145
--- /dev/null
+++ b/services/proto/src/proto/teaclave_management_service.proto
@@ -0,0 +1,10 @@
+syntax = "proto3";
+
+package teaclave_management_service_proto;
+
+import "teaclave_frontend_service.proto";
+
+service TeaclaveManagement {
+ rpc RegisterInputFile
(teaclave_frontend_service_proto.RegisterInputFileRequest) returns
(teaclave_frontend_service_proto.RegisterInputFileResponse);
+ rpc RegisterOutputFile
(teaclave_frontend_service_proto.RegisterOutputFileRequest) returns
(teaclave_frontend_service_proto.RegisterOutputFileResponse);
+}
diff --git a/services/proto/src/teaclave_management_service.rs
b/services/proto/src/teaclave_management_service.rs
new file mode 100644
index 0000000..a04622b
--- /dev/null
+++ b/services/proto/src/teaclave_management_service.rs
@@ -0,0 +1,6 @@
+use crate::teaclave_management_service_proto as proto;
+
+pub use proto::TeaclaveManagement;
+pub use proto::TeaclaveManagementClient;
+pub use proto::TeaclaveManagementRequest;
+pub use proto::TeaclaveManagementResponse;
diff --git a/tests/fixtures/runtime.config.toml
b/tests/fixtures/runtime.config.toml
index b10d432..7bf55f5 100644
--- a/tests/fixtures/runtime.config.toml
+++ b/tests/fixtures/runtime.config.toml
@@ -4,6 +4,7 @@ frontend = { listen_address = "0.0.0.0:7777" }
[internal_endpoints]
authentication = { listen_address = "0.0.0.0:17776", advertised_address =
"localhost:17776" }
+management = { listen_address = "0.0.0.0:17777", advertised_address =
"localhost:17777" }
dbs = { listen_address = "0.0.0.0:7778", advertised_address =
"127.0.0.1:7778", inbound_services = ["frontend"] }
execution = { listen_address = "0.0.0.0:7989", advertised_address =
"127.0.0.1:7989" }
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]