From 58fd46cd6b512c0d84019cbbcf28d30b27fe8aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20Wyszy=C5=84ski?= Date: Fri, 11 Oct 2024 14:52:32 +0200 Subject: [PATCH] Add protobuf rinit.api --- Cargo.toml | 3 +- rinit-protos/Cargo.toml | 12 +++ rinit-protos/build.rs | 5 ++ rinit-protos/protos/rinit.proto | 128 ++++++++++++++++++++++++++++++++ rinit-protos/src/lib.rs | 5 ++ rinit/Cargo.toml | 1 + runtime/Cargo.toml | 1 + 7 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 rinit-protos/Cargo.toml create mode 100644 rinit-protos/build.rs create mode 100644 rinit-protos/protos/rinit.proto create mode 100644 rinit-protos/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index b7ac519..68a90e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,12 @@ [workspace] -members = ["runtime", "rinit"] +members = ["runtime", "rinit", "rinit-protos"] resolver = "2" [workspace.dependencies] ya-runtime-sdk = { git = "https://github.com/golemfactory/ya-runtime-sdk.git", rev = "0395b0c704ef644d7f0554ac41e319f03b11c068" } ya-runtime-api = { git = "https://github.com/golemfactory/yagna.git", rev = "2222cadeed58ecc44295092fcb0bc9ffba8a3722" } ya-client-model = { git = "https://github.com/golemfactory/ya-client.git", rev = "44746845a559d40faa2a81d41c6f663d38361286" } +rinit-protos = { path = "rinit-protos" } anyhow = "1.0" async-io = "2.3.4" async-process = { path = "../async-process" } diff --git a/rinit-protos/Cargo.toml b/rinit-protos/Cargo.toml new file mode 100644 index 0000000..d2fa463 --- /dev/null +++ b/rinit-protos/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "rinit-protos" +version = "0.1.0" +authors = ["Golem Factory "] +edition = "2021" +license = "GPL-3.0" + +[dependencies] +prost.workspace = true + +[build-dependencies] +prost-build.workspace = true diff --git a/rinit-protos/build.rs b/rinit-protos/build.rs new file mode 100644 index 0000000..ed50657 --- /dev/null +++ b/rinit-protos/build.rs @@ -0,0 +1,5 @@ +use std::io::Result; + +fn main() -> Result<()> { + prost_build::compile_protos(&["protos/rinit.proto"], &["protos/"]) +} diff --git a/rinit-protos/protos/rinit.proto b/rinit-protos/protos/rinit.proto new file mode 100644 index 0000000..4325353 --- /dev/null +++ b/rinit-protos/protos/rinit.proto @@ -0,0 +1,128 @@ +syntax = "proto2"; + +package rinit.api; + +message Error { required string message = 1; } + +message Env { + required bytes name = 1; + optional bytes value = 2; +} + +message HostEntry { + required bytes ip = 1; + required bytes hostname = 2; +} + +message Rfd { + required uint32 fd = 1; + oneof redirect { + bytes path = 2; + uint64 pipe_blocking = 3; + uint64 pipe_cyclic = 4; + }; +} + +message Request { + required uint64 request_id = 1; + oneof command { + QuitRequest quit = 2; + RunProcessRequest run_process = 3; + KillProcessRequest kill_process = 4; + MountVolumeRequest mount_volume = 5; + UploadFileRequest upload_file = 6; + QueryOutputRequest query_output = 7; + PutInputRequest put_input = 8; + SyncFsRequest sync_fs = 9; + NetCtlRequest net_ctl = 10; + NetHostRequest net_host = 11; + } +} + +message Response { + required uint64 request_id = 1; + oneof command { + QuitResponse quit = 2; + RunProcessResponse run_process = 3; + KillProcessResponse kill_process = 4; + MountVolumeResponse mount_volume = 5; + UploadFileResponse upload_file = 6; + QueryOutputResponse query_output = 7; + PutInputResponse put_input = 8; + SyncFsResponse sync_fs = 9; + NetCtlResponse net_ctl = 10; + NetHostResponse net_host = 11; + + Error error = 99; + } +} + +message QuitRequest {} + +message RunProcessRequest { + required bytes program = 1; + repeated bytes args = 2; + repeated bytes env = 3; + optional uint32 uid = 4; + optional uint32 gid = 5; + repeated Rfd rfd = 6; + optional bytes work_dir = 7; + optional bool is_entrypoint = 8; +} + +message KillProcessRequest { required uint64 pid = 1; } + +message MountVolumeRequest { + required bytes tag = 1; + required bytes path = 2; +} + +// Not implemented yet +message UploadFileRequest {} + +message QueryOutputRequest { + required uint64 id = 1; + required uint32 fd = 2; + required uint64 offset = 3; + required uint64 size = 4; +} + +// Not implemented yet +message PutInputRequest {} + +// Not implemented yet +message SyncFsRequest {} + +message NetCtlRequest { + required bytes addr = 1; + required bytes mask = 2; + required bytes gateway = 3; + required bytes if_addr = 4; + required uint32 if_kind = 5; + required uint32 flags = 6; +} + +message NetHostRequest { repeated HostEntry hosts = 1; } + +message QuitResponse {} + +message RunProcessResponse { required uint64 process_id = 1; } + +message KillProcessResponse {} + +message MountVolumeResponse {} + +message UploadFileResponse {} + +message QueryOutputResponse { + required bytes data = 1; + optional bool eof = 2; +} + +message PutInputResponse {} + +message SyncFsResponse {} + +message NetCtlResponse {} + +message NetHostResponse {} diff --git a/rinit-protos/src/lib.rs b/rinit-protos/src/lib.rs new file mode 100644 index 0000000..e5d113d --- /dev/null +++ b/rinit-protos/src/lib.rs @@ -0,0 +1,5 @@ +pub mod rinit { + pub mod api { + include!(concat!(env!("OUT_DIR"), "/rinit.api.rs")); + } +} diff --git a/rinit/Cargo.toml b/rinit/Cargo.toml index 2552bf2..afdc4a8 100644 --- a/rinit/Cargo.toml +++ b/rinit/Cargo.toml @@ -13,5 +13,6 @@ libc.workspace = true log.workspace = true nix.workspace = true prost.workspace = true +rinit-protos.workspace = true smol.workspace = true stderrlog.workspace = true diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index a38aadf..2d52f12 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -81,6 +81,7 @@ notify.workspace = true prost.workspace = true rand.workspace = true raw-cpuid.workspace = true +rinit-protos.workspace = true serde_json.workspace = true serde.workspace = true strip-ansi-escapes.workspace = true