Skip to content

Commit d8be7e4

Browse files
committed
guest-agent: Different handler for v0 and latest
1 parent d0fb685 commit d8be7e4

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

guest-agent/src/main.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use rocket::{
1010
listener::{Bind, DefaultListener},
1111
};
1212
use rocket_vsock_listener::VsockListener;
13-
use rpc_service::{AppState, ExternalRpcHandler, InternalRpcHandler};
13+
use rpc_service::{AppState, ExternalRpcHandler, InternalRpcHandler, InternalRpcHandlerV0};
1414
use sd_notify::{notify as sd_notify, NotifyState};
1515
use std::time::Duration;
1616
use tracing::{error, info};
@@ -44,9 +44,36 @@ struct Args {
4444
watchdog: bool,
4545
}
4646

47+
async fn run_internal_v0(state: AppState, figment: Figment) -> Result<()> {
48+
let rocket = rocket::custom(figment)
49+
.mount(
50+
"/prpc/",
51+
ra_rpc::prpc_routes!(AppState, InternalRpcHandlerV0),
52+
)
53+
.manage(state);
54+
let ignite = rocket
55+
.ignite()
56+
.await
57+
.map_err(|err| anyhow!("Failed to ignite rocket: {err}"))?;
58+
let endpoint = DefaultListener::bind_endpoint(&ignite)
59+
.map_err(|err| anyhow!("Failed to get endpoint: {err}"))?;
60+
let listener = DefaultListener::bind(&ignite)
61+
.await
62+
.map_err(|err| anyhow!("Failed to bind on {endpoint}: {err}"))?;
63+
if let Some(path) = endpoint.unix() {
64+
// Allow any user to connect to the socket
65+
fs_err::set_permissions(path, Permissions::from_mode(0o777))?;
66+
}
67+
ignite
68+
.launch_on(listener)
69+
.await
70+
.map_err(|err| anyhow!(err.to_string()))?;
71+
Ok(())
72+
}
73+
4774
async fn run_internal(state: AppState, figment: Figment) -> Result<()> {
4875
let rocket = rocket::custom(figment)
49-
.mount("/prpc/", ra_rpc::prpc_routes!(AppState, InternalRpcHandler))
76+
.mount("/", ra_rpc::prpc_routes!(AppState, InternalRpcHandler))
5077
.manage(state);
5178
let ignite = rocket
5279
.ignite()
@@ -165,7 +192,7 @@ async fn main() -> Result<()> {
165192
.context("Failed to extract bind address")?;
166193
let guest_api_figment = figment.select("guest-api");
167194
tokio::select!(
168-
res = run_internal(state.clone(), internal_v0_figment) => res?,
195+
res = run_internal_v0(state.clone(), internal_v0_figment) => res?,
169196
res = run_internal(state.clone(), internal_figment) => res?,
170197
res = run_external(state.clone(), external_figment) => res?,
171198
res = run_guest_api(state.clone(), guest_api_figment) => res?,

0 commit comments

Comments
 (0)