mirror of
				https://github.com/edera-dev/krata.git
				synced 2025-11-03 23:29:39 +00:00 
			
		
		
		
	krata: split out runtime
This commit is contained in:
		
							
								
								
									
										99
									
								
								Cargo.toml
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								Cargo.toml
									
									
									
									
									
								
							@ -7,8 +7,9 @@ members = [
 | 
				
			|||||||
    "libs/advmac",
 | 
					    "libs/advmac",
 | 
				
			||||||
    "libs/loopdev",
 | 
					    "libs/loopdev",
 | 
				
			||||||
    "shared",
 | 
					    "shared",
 | 
				
			||||||
    "daemon",
 | 
					 | 
				
			||||||
    "guest",
 | 
					    "guest",
 | 
				
			||||||
 | 
					    "runtime",
 | 
				
			||||||
 | 
					    "daemon",
 | 
				
			||||||
    "network",
 | 
					    "network",
 | 
				
			||||||
    "controller",
 | 
					    "controller",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@ -19,62 +20,65 @@ version = "0.0.1"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[workspace.dependencies]
 | 
					[workspace.dependencies]
 | 
				
			||||||
anyhow = "1.0"
 | 
					anyhow = "1.0"
 | 
				
			||||||
thiserror = "1.0"
 | 
					arrayvec = "0.7.4"
 | 
				
			||||||
log = "0.4.20"
 | 
					async-stream = "0.3.5"
 | 
				
			||||||
libc = "0.2"
 | 
					async-trait = "0.1.77"
 | 
				
			||||||
nix = "0.28.0"
 | 
					backhand = "0.14.2"
 | 
				
			||||||
byteorder = "1"
 | 
					byteorder = "1"
 | 
				
			||||||
slice-copy = "0.3.0"
 | 
					bytes = "1.5.0"
 | 
				
			||||||
memchr = "2"
 | 
					cli-tables = "0.2.1"
 | 
				
			||||||
xz2 = "0.1"
 | 
					directories = "5.0.1"
 | 
				
			||||||
flate2 = "1.0"
 | 
					 | 
				
			||||||
elf = "0.7.4"
 | 
					elf = "0.7.4"
 | 
				
			||||||
env_logger = "0.11.0"
 | 
					env_logger = "0.11.0"
 | 
				
			||||||
errno = "0.3.0"
 | 
					errno = "0.3.0"
 | 
				
			||||||
oci-spec = "0.6.4"
 | 
					etherparse = "0.14.2"
 | 
				
			||||||
backhand = "0.14.2"
 | 
					flate2 = "1.0"
 | 
				
			||||||
sha256 = "1.5.0"
 | 
					 | 
				
			||||||
serde_json = "1.0.113"
 | 
					 | 
				
			||||||
walkdir = "2"
 | 
					 | 
				
			||||||
directories = "5.0.1"
 | 
					 | 
				
			||||||
tar = "0.4.40"
 | 
					 | 
				
			||||||
zstd = "0.13.0"
 | 
					 | 
				
			||||||
termion = "3.0.0"
 | 
					 | 
				
			||||||
path-clean = "1.0.1"
 | 
					 | 
				
			||||||
url = "2.5.0"
 | 
					 | 
				
			||||||
cli-tables = "0.2.1"
 | 
					 | 
				
			||||||
rand = "0.8.5"
 | 
					 | 
				
			||||||
arrayvec = "0.7.4"
 | 
					 | 
				
			||||||
rtnetlink = "0.14.1"
 | 
					 | 
				
			||||||
netlink-packet-route = "0.19.0"
 | 
					 | 
				
			||||||
futures = "0.3.30"
 | 
					futures = "0.3.30"
 | 
				
			||||||
ipnetwork = "0.20.0"
 | 
					ipnetwork = "0.20.0"
 | 
				
			||||||
udp-stream = "0.0.11"
 | 
					libc = "0.2"
 | 
				
			||||||
smoltcp = "0.11.0"
 | 
					log = "0.4.20"
 | 
				
			||||||
etherparse = "0.14.2"
 | 
					memchr = "2"
 | 
				
			||||||
async-trait = "0.1.77"
 | 
					netlink-packet-route = "0.19.0"
 | 
				
			||||||
bytes = "1.5.0"
 | 
					nix = "0.28.0"
 | 
				
			||||||
 | 
					oci-spec = "0.6.4"
 | 
				
			||||||
path-absolutize = "3.1.1"
 | 
					path-absolutize = "3.1.1"
 | 
				
			||||||
tokio-tun = "0.11.2"
 | 
					path-clean = "1.0.1"
 | 
				
			||||||
tokio-listener = "0.3.1"
 | 
					 | 
				
			||||||
trait-variant = "0.1.1"
 | 
					 | 
				
			||||||
tokio-native-tls = "0.3.1"
 | 
					 | 
				
			||||||
signal-hook = "0.3.17"
 | 
					 | 
				
			||||||
tonic-build = "0.11.0"
 | 
					 | 
				
			||||||
prost = "0.12.3"
 | 
					prost = "0.12.3"
 | 
				
			||||||
async-stream = "0.3.5"
 | 
					rand = "0.8.5"
 | 
				
			||||||
 | 
					rtnetlink = "0.14.1"
 | 
				
			||||||
 | 
					serde_json = "1.0.113"
 | 
				
			||||||
 | 
					sha256 = "1.5.0"
 | 
				
			||||||
 | 
					signal-hook = "0.3.17"
 | 
				
			||||||
 | 
					slice-copy = "0.3.0"
 | 
				
			||||||
 | 
					smoltcp = "0.11.0"
 | 
				
			||||||
 | 
					tar = "0.4.40"
 | 
				
			||||||
 | 
					termion = "3.0.0"
 | 
				
			||||||
 | 
					thiserror = "1.0"
 | 
				
			||||||
 | 
					tokio-listener = "0.3.1"
 | 
				
			||||||
 | 
					tokio-native-tls = "0.3.1"
 | 
				
			||||||
 | 
					tokio-tun = "0.11.2"
 | 
				
			||||||
 | 
					tonic-build = "0.11.0"
 | 
				
			||||||
tower = "0.4.13"
 | 
					tower = "0.4.13"
 | 
				
			||||||
 | 
					trait-variant = "0.1.1"
 | 
				
			||||||
 | 
					udp-stream = "0.0.11"
 | 
				
			||||||
 | 
					url = "2.5.0"
 | 
				
			||||||
 | 
					walkdir = "2"
 | 
				
			||||||
 | 
					xz2 = "0.1"
 | 
				
			||||||
 | 
					zstd = "0.13.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[workspace.dependencies.uuid]
 | 
					[workspace.dependencies.clap]
 | 
				
			||||||
version = "1.6.1"
 | 
					version = "4.4.18"
 | 
				
			||||||
features = ["v4"]
 | 
					features = ["derive"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[workspace.dependencies.reqwest]
 | 
				
			||||||
 | 
					version = "0.11.24"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[workspace.dependencies.sys-mount]
 | 
					[workspace.dependencies.sys-mount]
 | 
				
			||||||
version = "3.0.0"
 | 
					version = "3.0.0"
 | 
				
			||||||
default-features = false
 | 
					default-features = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[workspace.dependencies.clap]
 | 
					[workspace.dependencies.serde]
 | 
				
			||||||
version = "4.4.18"
 | 
					version = "1.0.196"
 | 
				
			||||||
features = ["derive"]
 | 
					features = ["derive"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[workspace.dependencies.tokio]
 | 
					[workspace.dependencies.tokio]
 | 
				
			||||||
@ -85,13 +89,10 @@ features = ["macros", "rt", "rt-multi-thread", "io-util"]
 | 
				
			|||||||
version = "0.1"
 | 
					version = "0.1"
 | 
				
			||||||
features = ["io-util", "net"]
 | 
					features = ["io-util", "net"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[workspace.dependencies.reqwest]
 | 
					 | 
				
			||||||
version = "0.11.24"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[workspace.dependencies.serde]
 | 
					 | 
				
			||||||
version = "1.0.196"
 | 
					 | 
				
			||||||
features = ["derive"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[workspace.dependencies.tonic]
 | 
					[workspace.dependencies.tonic]
 | 
				
			||||||
version = "0.11.0"
 | 
					version = "0.11.0"
 | 
				
			||||||
features = ["tls"]
 | 
					features = ["tls"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[workspace.dependencies.uuid]
 | 
				
			||||||
 | 
					version = "1.6.1"
 | 
				
			||||||
 | 
					features = ["v4"]
 | 
				
			||||||
 | 
				
			|||||||
@ -6,26 +6,24 @@ resolver = "2"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
anyhow = { workspace = true }
 | 
					anyhow = { workspace = true }
 | 
				
			||||||
log = { workspace = true }
 | 
					async-stream = { workspace = true }
 | 
				
			||||||
 | 
					clap = { workspace = true }
 | 
				
			||||||
 | 
					cli-tables = { workspace = true }
 | 
				
			||||||
env_logger = { workspace = true }
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
 | 
					krata = { path = "../shared" }
 | 
				
			||||||
 | 
					log = { workspace = true }
 | 
				
			||||||
serde = { workspace = true }
 | 
					serde = { workspace = true }
 | 
				
			||||||
serde_json = { workspace = true }
 | 
					serde_json = { workspace = true }
 | 
				
			||||||
termion = { workspace = true }
 | 
					termion = { workspace = true }
 | 
				
			||||||
cli-tables = { workspace = true }
 | 
					 | 
				
			||||||
clap = { workspace = true }
 | 
					 | 
				
			||||||
tokio = { workspace = true }
 | 
					tokio = { workspace = true }
 | 
				
			||||||
tokio-stream = { workspace = true }
 | 
					 | 
				
			||||||
tokio-native-tls = { workspace = true }
 | 
					tokio-native-tls = { workspace = true }
 | 
				
			||||||
url = { workspace = true }
 | 
					tokio-stream = { workspace = true }
 | 
				
			||||||
 | 
					tonic = { workspace = true }
 | 
				
			||||||
tower = { workspace = true }
 | 
					tower = { workspace = true }
 | 
				
			||||||
tonic = { workspace = true}
 | 
					url = { workspace = true }
 | 
				
			||||||
async-stream = { workspace = true }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies.krata]
 | 
					 | 
				
			||||||
path = "../shared"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
path = "src/lib.rs"
 | 
					name = "kratactl"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[bin]]
 | 
					[[bin]]
 | 
				
			||||||
name = "kratactl"
 | 
					name = "kratactl"
 | 
				
			||||||
 | 
				
			|||||||
@ -6,56 +6,22 @@ resolver = "2"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
anyhow = { workspace = true }
 | 
					anyhow = { workspace = true }
 | 
				
			||||||
log = { workspace = true }
 | 
					 | 
				
			||||||
env_logger = { workspace = true }
 | 
					 | 
				
			||||||
zstd = { workspace = true }
 | 
					 | 
				
			||||||
flate2 = { workspace = true }
 | 
					 | 
				
			||||||
tar = { workspace = true }
 | 
					 | 
				
			||||||
directories = { workspace = true }
 | 
					 | 
				
			||||||
walkdir = { workspace = true }
 | 
					 | 
				
			||||||
serde = { workspace = true }
 | 
					 | 
				
			||||||
serde_json = { workspace = true }
 | 
					 | 
				
			||||||
sha256 = { workspace = true }
 | 
					 | 
				
			||||||
url = { workspace = true }
 | 
					 | 
				
			||||||
reqwest = { workspace = true }
 | 
					 | 
				
			||||||
path-clean = { workspace = true }
 | 
					 | 
				
			||||||
termion = { workspace = true }
 | 
					 | 
				
			||||||
cli-tables = { workspace = true }
 | 
					 | 
				
			||||||
clap = { workspace = true }
 | 
					 | 
				
			||||||
oci-spec = { workspace = true }
 | 
					 | 
				
			||||||
backhand = { workspace = true }
 | 
					 | 
				
			||||||
uuid = { workspace = true }
 | 
					 | 
				
			||||||
ipnetwork = { workspace = true }
 | 
					 | 
				
			||||||
tokio = { workspace = true }
 | 
					 | 
				
			||||||
futures = { workspace = true }
 | 
					 | 
				
			||||||
bytes = { workspace = true }
 | 
					 | 
				
			||||||
tokio-stream = { workspace = true }
 | 
					 | 
				
			||||||
async-trait = { workspace = true }
 | 
					 | 
				
			||||||
signal-hook = { workspace = true }
 | 
					 | 
				
			||||||
async-stream = { workspace = true }
 | 
					async-stream = { workspace = true }
 | 
				
			||||||
tonic = { workspace = true, features = ["tls"]}
 | 
					async-trait = { workspace = true }
 | 
				
			||||||
 | 
					clap = { workspace = true }
 | 
				
			||||||
[dependencies.krata]
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
path = "../shared"
 | 
					futures = { workspace = true }
 | 
				
			||||||
 | 
					krata = { path = "../shared" }
 | 
				
			||||||
[dependencies.nix]
 | 
					kratart = { path = "../runtime" }
 | 
				
			||||||
workspace = true
 | 
					log = { workspace = true }
 | 
				
			||||||
features = ["process"]
 | 
					signal-hook = { workspace = true }
 | 
				
			||||||
 | 
					tokio = { workspace = true }
 | 
				
			||||||
[dependencies.advmac]
 | 
					tokio-stream = { workspace = true }
 | 
				
			||||||
path = "../libs/advmac"
 | 
					tonic = { workspace = true, features = ["tls"] }
 | 
				
			||||||
 | 
					uuid = { workspace = true }
 | 
				
			||||||
[dependencies.loopdev]
 | 
					 | 
				
			||||||
path = "../libs/loopdev"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies.xenclient]
 | 
					 | 
				
			||||||
path = "../libs/xen/xenclient"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies.xenstore]
 | 
					 | 
				
			||||||
path = "../libs/xen/xenstore"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
path = "src/lib.rs"
 | 
					name = "kratad"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[bin]]
 | 
					[[bin]]
 | 
				
			||||||
name = "kratad"
 | 
					name = "kratad"
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,8 @@ use anyhow::Result;
 | 
				
			|||||||
use clap::Parser;
 | 
					use clap::Parser;
 | 
				
			||||||
use env_logger::Env;
 | 
					use env_logger::Env;
 | 
				
			||||||
use krata::dial::ControlDialAddress;
 | 
					use krata::dial::ControlDialAddress;
 | 
				
			||||||
use kratad::{runtime::Runtime, Daemon};
 | 
					use kratad::Daemon;
 | 
				
			||||||
 | 
					use kratart::Runtime;
 | 
				
			||||||
use std::{
 | 
					use std::{
 | 
				
			||||||
    str::FromStr,
 | 
					    str::FromStr,
 | 
				
			||||||
    sync::{atomic::AtomicBool, Arc},
 | 
					    sync::{atomic::AtomicBool, Arc},
 | 
				
			||||||
 | 
				
			|||||||
@ -14,10 +14,8 @@ use tokio::{
 | 
				
			|||||||
use tokio_stream::StreamExt;
 | 
					use tokio_stream::StreamExt;
 | 
				
			||||||
use tonic::{Request, Response, Status, Streaming};
 | 
					use tonic::{Request, Response, Status, Streaming};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{
 | 
					use crate::event::DaemonEventContext;
 | 
				
			||||||
    event::DaemonEventContext,
 | 
					use kratart::{launch::GuestLaunchRequest, Runtime};
 | 
				
			||||||
    runtime::{launch::GuestLaunchRequest, Runtime},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct ApiError {
 | 
					pub struct ApiError {
 | 
				
			||||||
    message: String,
 | 
					    message: String,
 | 
				
			||||||
@ -67,8 +65,8 @@ impl ControlService for RuntimeControlService {
 | 
				
			|||||||
        request: Request<LaunchGuestRequest>,
 | 
					        request: Request<LaunchGuestRequest>,
 | 
				
			||||||
    ) -> Result<Response<LaunchGuestReply>, Status> {
 | 
					    ) -> Result<Response<LaunchGuestReply>, Status> {
 | 
				
			||||||
        let request = request.into_inner();
 | 
					        let request = request.into_inner();
 | 
				
			||||||
        let guest: GuestInfo = self
 | 
					        let guest: GuestInfo = convert_guest_info(
 | 
				
			||||||
            .runtime
 | 
					            self.runtime
 | 
				
			||||||
                .launch(GuestLaunchRequest {
 | 
					                .launch(GuestLaunchRequest {
 | 
				
			||||||
                    image: &request.image,
 | 
					                    image: &request.image,
 | 
				
			||||||
                    vcpus: request.vcpus,
 | 
					                    vcpus: request.vcpus,
 | 
				
			||||||
@ -78,8 +76,8 @@ impl ControlService for RuntimeControlService {
 | 
				
			|||||||
                    debug: false,
 | 
					                    debug: false,
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
                .await
 | 
					                .await
 | 
				
			||||||
            .map_err(ApiError::from)?
 | 
					                .map_err(ApiError::from)?,
 | 
				
			||||||
            .into();
 | 
					        );
 | 
				
			||||||
        Ok(Response::new(LaunchGuestReply { guest: Some(guest) }))
 | 
					        Ok(Response::new(LaunchGuestReply { guest: Some(guest) }))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -103,7 +101,7 @@ impl ControlService for RuntimeControlService {
 | 
				
			|||||||
        let guests = self.runtime.list().await.map_err(ApiError::from)?;
 | 
					        let guests = self.runtime.list().await.map_err(ApiError::from)?;
 | 
				
			||||||
        let guests = guests
 | 
					        let guests = guests
 | 
				
			||||||
            .into_iter()
 | 
					            .into_iter()
 | 
				
			||||||
            .map(GuestInfo::from)
 | 
					            .map(convert_guest_info)
 | 
				
			||||||
            .collect::<Vec<GuestInfo>>();
 | 
					            .collect::<Vec<GuestInfo>>();
 | 
				
			||||||
        Ok(Response::new(ListGuestsReply { guests }))
 | 
					        Ok(Response::new(ListGuestsReply { guests }))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -173,17 +171,6 @@ impl ControlService for RuntimeControlService {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl From<crate::runtime::GuestInfo> for GuestInfo {
 | 
					 | 
				
			||||||
    fn from(value: crate::runtime::GuestInfo) -> Self {
 | 
					 | 
				
			||||||
        GuestInfo {
 | 
					 | 
				
			||||||
            id: value.uuid.to_string(),
 | 
					 | 
				
			||||||
            image: value.image,
 | 
					 | 
				
			||||||
            ipv4: value.ipv4.map(|x| x.ip().to_string()).unwrap_or_default(),
 | 
					 | 
				
			||||||
            ipv6: value.ipv6.map(|x| x.ip().to_string()).unwrap_or_default(),
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fn empty_vec_optional<T>(value: Vec<T>) -> Option<Vec<T>> {
 | 
					fn empty_vec_optional<T>(value: Vec<T>) -> Option<Vec<T>> {
 | 
				
			||||||
    if value.is_empty() {
 | 
					    if value.is_empty() {
 | 
				
			||||||
        None
 | 
					        None
 | 
				
			||||||
@ -191,3 +178,12 @@ fn empty_vec_optional<T>(value: Vec<T>) -> Option<Vec<T>> {
 | 
				
			|||||||
        Some(value)
 | 
					        Some(value)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn convert_guest_info(value: kratart::GuestInfo) -> GuestInfo {
 | 
				
			||||||
 | 
					    GuestInfo {
 | 
				
			||||||
 | 
					        id: value.uuid.to_string(),
 | 
				
			||||||
 | 
					        image: value.image,
 | 
				
			||||||
 | 
					        ipv4: value.ipv4.map(|x| x.ip().to_string()).unwrap_or_default(),
 | 
				
			||||||
 | 
					        ipv6: value.ipv6.map(|x| x.ip().to_string()).unwrap_or_default(),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ use log::error;
 | 
				
			|||||||
use tokio::{sync::broadcast, task::JoinHandle, time};
 | 
					use tokio::{sync::broadcast, task::JoinHandle, time};
 | 
				
			||||||
use uuid::Uuid;
 | 
					use uuid::Uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::runtime::{GuestInfo, Runtime};
 | 
					use kratart::{GuestInfo, Runtime};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type DaemonEvent = krata::control::watch_events_reply::Event;
 | 
					pub type DaemonEvent = krata::control::watch_events_reply::Event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,15 +4,14 @@ use anyhow::Result;
 | 
				
			|||||||
use control::RuntimeControlService;
 | 
					use control::RuntimeControlService;
 | 
				
			||||||
use event::{DaemonEventContext, DaemonEventGenerator};
 | 
					use event::{DaemonEventContext, DaemonEventGenerator};
 | 
				
			||||||
use krata::{control::control_service_server::ControlServiceServer, dial::ControlDialAddress};
 | 
					use krata::{control::control_service_server::ControlServiceServer, dial::ControlDialAddress};
 | 
				
			||||||
 | 
					use kratart::Runtime;
 | 
				
			||||||
use log::info;
 | 
					use log::info;
 | 
				
			||||||
use runtime::Runtime;
 | 
					 | 
				
			||||||
use tokio::{net::UnixListener, task::JoinHandle};
 | 
					use tokio::{net::UnixListener, task::JoinHandle};
 | 
				
			||||||
use tokio_stream::wrappers::UnixListenerStream;
 | 
					use tokio_stream::wrappers::UnixListenerStream;
 | 
				
			||||||
use tonic::transport::{Identity, Server, ServerTlsConfig};
 | 
					use tonic::transport::{Identity, Server, ServerTlsConfig};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub mod control;
 | 
					pub mod control;
 | 
				
			||||||
pub mod event;
 | 
					pub mod event;
 | 
				
			||||||
pub mod runtime;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Daemon {
 | 
					pub struct Daemon {
 | 
				
			||||||
    store: String,
 | 
					    store: String,
 | 
				
			||||||
 | 
				
			|||||||
@ -6,32 +6,25 @@ resolver = "2"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
anyhow = { workspace = true }
 | 
					anyhow = { workspace = true }
 | 
				
			||||||
log = { workspace = true }
 | 
					 | 
				
			||||||
env_logger = { workspace = true }
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
walkdir = { workspace = true }
 | 
					futures = { workspace = true }
 | 
				
			||||||
 | 
					ipnetwork = { workspace = true }
 | 
				
			||||||
 | 
					krata = { path = "../shared" }
 | 
				
			||||||
 | 
					log = { workspace = true }
 | 
				
			||||||
 | 
					nix = { workspace = true, features = ["process"] }
 | 
				
			||||||
 | 
					oci-spec = { workspace = true }
 | 
				
			||||||
 | 
					path-absolutize = { workspace = true }
 | 
				
			||||||
 | 
					rtnetlink = { workspace = true }
 | 
				
			||||||
serde = { workspace = true }
 | 
					serde = { workspace = true }
 | 
				
			||||||
serde_json = { workspace = true }
 | 
					serde_json = { workspace = true }
 | 
				
			||||||
sys-mount = { workspace = true }
 | 
					sys-mount = { workspace = true }
 | 
				
			||||||
oci-spec = { workspace = true }
 | 
					 | 
				
			||||||
rtnetlink = { workspace = true }
 | 
					 | 
				
			||||||
tokio = { workspace = true }
 | 
					tokio = { workspace = true }
 | 
				
			||||||
futures = { workspace = true }
 | 
					 | 
				
			||||||
ipnetwork = { workspace = true }
 | 
					 | 
				
			||||||
path-absolutize = { workspace = true }
 | 
					 | 
				
			||||||
tokio-stream = { workspace = true }
 | 
					tokio-stream = { workspace = true }
 | 
				
			||||||
 | 
					walkdir = { workspace = true }
 | 
				
			||||||
[dependencies.nix]
 | 
					xenstore = { path = "../libs/xen/xenstore" }
 | 
				
			||||||
workspace = true
 | 
					 | 
				
			||||||
features = ["process"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies.krata]
 | 
					 | 
				
			||||||
path = "../shared"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies.xenstore]
 | 
					 | 
				
			||||||
path = "../libs/xen/xenstore"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
path = "src/lib.rs"
 | 
					name = "krataguest"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[bin]]
 | 
					[[bin]]
 | 
				
			||||||
name = "krataguest"
 | 
					name = "krataguest"
 | 
				
			||||||
 | 
				
			|||||||
@ -1,16 +1,15 @@
 | 
				
			|||||||
# This package is from https://github.com/GamePad64/advmac
 | 
					# This package is from https://github.com/GamePad64/advmac
 | 
				
			||||||
# Edera maintains an in-tree version because of dependencies
 | 
					# Edera maintains an in-tree version because of dependencies being out of date.
 | 
				
			||||||
# being out of date.
 | 
					 | 
				
			||||||
[package]
 | 
					[package]
 | 
				
			||||||
name = "advmac"
 | 
					name = "advmac"
 | 
				
			||||||
version.workspace = true
 | 
					version.workspace = true
 | 
				
			||||||
license = "MIT"
 | 
					license = "MIT"
 | 
				
			||||||
edition = "2021"
 | 
					edition = "2021"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					arrayvec = { workspace = true, features = ["serde"] }
 | 
				
			||||||
 | 
					rand = { workspace = true }
 | 
				
			||||||
 | 
					serde = { workspace = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
name = "advmac"
 | 
					name = "advmac"
 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies]
 | 
					 | 
				
			||||||
serde = { workspace = true }
 | 
					 | 
				
			||||||
rand = { workspace = true }
 | 
					 | 
				
			||||||
arrayvec = { workspace = true, features = ["serde"] }
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										21
									
								
								libs/advmac/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								libs/advmac/LICENSE
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					MIT License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2022 Alexander Shishenko
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be included in all
 | 
				
			||||||
 | 
					copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
				
			||||||
 | 
					SOFTWARE.
 | 
				
			||||||
@ -8,13 +8,10 @@ version.workspace = true
 | 
				
			|||||||
license = "MIT"
 | 
					license = "MIT"
 | 
				
			||||||
edition = "2021"
 | 
					edition = "2021"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					 | 
				
			||||||
name = "loopdev"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
errno = { workspace = true }
 | 
					errno = { workspace = true }
 | 
				
			||||||
libc = { workspace = true }
 | 
					libc = { workspace = true }
 | 
				
			||||||
 | 
					nix = { workspace = true, features = ["ioctl"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies.nix]
 | 
					[lib]
 | 
				
			||||||
workspace = true
 | 
					name = "loopdev"
 | 
				
			||||||
features = ["ioctl"]
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -4,18 +4,15 @@ version.workspace = true
 | 
				
			|||||||
edition = "2021"
 | 
					edition = "2021"
 | 
				
			||||||
resolver = "2"
 | 
					resolver = "2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					 | 
				
			||||||
path = "src/lib.rs"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
thiserror = { workspace = true }
 | 
					 | 
				
			||||||
libc = { workspace = true }
 | 
					libc = { workspace = true }
 | 
				
			||||||
log = { workspace = true }
 | 
					log = { workspace = true }
 | 
				
			||||||
 | 
					nix = { workspace = true, features = ["ioctl"] }
 | 
				
			||||||
 | 
					thiserror = { workspace = true }
 | 
				
			||||||
uuid = { workspace = true }
 | 
					uuid = { workspace = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies.nix]
 | 
					[lib]
 | 
				
			||||||
workspace = true
 | 
					name = "xencall"
 | 
				
			||||||
features = ["ioctl"]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dev-dependencies]
 | 
					[dev-dependencies]
 | 
				
			||||||
env_logger = { workspace = true }
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
 | 
				
			|||||||
@ -5,28 +5,24 @@ edition = "2021"
 | 
				
			|||||||
resolver = "2"
 | 
					resolver = "2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
thiserror = { workspace = true }
 | 
					 | 
				
			||||||
libc = { workspace = true }
 | 
					 | 
				
			||||||
elf = { workspace = true }
 | 
					elf = { workspace = true }
 | 
				
			||||||
flate2 = { workspace = true }
 | 
					flate2 = { workspace = true }
 | 
				
			||||||
xz2 = { workspace = true }
 | 
					libc = { workspace = true }
 | 
				
			||||||
 | 
					log = { workspace = true }
 | 
				
			||||||
memchr = { workspace = true }
 | 
					memchr = { workspace = true }
 | 
				
			||||||
slice-copy = { workspace = true }
 | 
					slice-copy = { workspace = true }
 | 
				
			||||||
log = { workspace = true }
 | 
					thiserror = { workspace = true }
 | 
				
			||||||
uuid = { workspace = true }
 | 
					 | 
				
			||||||
tokio = { workspace = true }
 | 
					tokio = { workspace = true }
 | 
				
			||||||
 | 
					uuid = { workspace = true }
 | 
				
			||||||
[dependencies.xencall]
 | 
					xz2 = { workspace = true }
 | 
				
			||||||
path = "../xencall"
 | 
					xencall = { path = "../xencall" }
 | 
				
			||||||
 | 
					xenstore = { path = "../xenstore" }
 | 
				
			||||||
[dependencies.xenstore]
 | 
					 | 
				
			||||||
path = "../xenstore"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dev-dependencies]
 | 
					[dev-dependencies]
 | 
				
			||||||
env_logger = { workspace = true }
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
path = "src/lib.rs"
 | 
					name = "xenclient"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[example]]
 | 
					[[example]]
 | 
				
			||||||
name = "xenclient-boot"
 | 
					name = "xenclient-boot"
 | 
				
			||||||
 | 
				
			|||||||
@ -5,16 +5,13 @@ edition = "2021"
 | 
				
			|||||||
resolver = "2"
 | 
					resolver = "2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
thiserror = { workspace = true }
 | 
					 | 
				
			||||||
tokio = { workspace = true }
 | 
					 | 
				
			||||||
log = { workspace = true }
 | 
					log = { workspace = true }
 | 
				
			||||||
 | 
					thiserror = { workspace = true }
 | 
				
			||||||
[dependencies.nix]
 | 
					nix = { workspace = true, features = ["ioctl"] }
 | 
				
			||||||
workspace = true
 | 
					tokio = { workspace = true }
 | 
				
			||||||
features = ["ioctl"]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
path = "src/lib.rs"
 | 
					name = "xenevtchn"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[example]]
 | 
					[[example]]
 | 
				
			||||||
name = "xenevtchn-simple"
 | 
					name = "xenevtchn-simple"
 | 
				
			||||||
 | 
				
			|||||||
@ -4,16 +4,16 @@ version.workspace = true
 | 
				
			|||||||
edition = "2021"
 | 
					edition = "2021"
 | 
				
			||||||
resolver = "2"
 | 
					resolver = "2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					 | 
				
			||||||
path = "src/lib.rs"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
thiserror = { workspace = true }
 | 
					 | 
				
			||||||
libc = { workspace = true }
 | 
					 | 
				
			||||||
log = { workspace = true }
 | 
					 | 
				
			||||||
tokio = { workspace = true }
 | 
					 | 
				
			||||||
async-trait = { workspace = true }
 | 
					async-trait = { workspace = true }
 | 
				
			||||||
byteorder = { workspace = true }
 | 
					byteorder = { workspace = true }
 | 
				
			||||||
 | 
					libc = { workspace = true }
 | 
				
			||||||
 | 
					log = { workspace = true }
 | 
				
			||||||
 | 
					thiserror = { workspace = true }
 | 
				
			||||||
 | 
					tokio = { workspace = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[lib]
 | 
				
			||||||
 | 
					name = "xenstore"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dev-dependencies]
 | 
					[dev-dependencies]
 | 
				
			||||||
env_logger = { workspace = true }
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
 | 
				
			|||||||
@ -5,31 +5,27 @@ edition = "2021"
 | 
				
			|||||||
resolver = "2"
 | 
					resolver = "2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
 | 
					advmac = { path = "../libs/advmac" }
 | 
				
			||||||
anyhow = { workspace = true }
 | 
					anyhow = { workspace = true }
 | 
				
			||||||
 | 
					async-trait = { workspace = true }
 | 
				
			||||||
 | 
					bytes = { workspace = true }
 | 
				
			||||||
clap = { workspace = true }
 | 
					clap = { workspace = true }
 | 
				
			||||||
log = { workspace = true }
 | 
					 | 
				
			||||||
env_logger = { workspace = true }
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
rtnetlink = { workspace = true }
 | 
					etherparse = { workspace = true }
 | 
				
			||||||
netlink-packet-route = { workspace = true }
 | 
					 | 
				
			||||||
tokio = { workspace = true }
 | 
					 | 
				
			||||||
futures = { workspace = true }
 | 
					futures = { workspace = true }
 | 
				
			||||||
libc = { workspace = true }
 | 
					libc = { workspace = true }
 | 
				
			||||||
udp-stream = { workspace = true }
 | 
					log = { workspace = true }
 | 
				
			||||||
 | 
					netlink-packet-route = { workspace = true }
 | 
				
			||||||
 | 
					rtnetlink = { workspace = true }
 | 
				
			||||||
smoltcp = { workspace = true }
 | 
					smoltcp = { workspace = true }
 | 
				
			||||||
etherparse = { workspace = true }
 | 
					tokio = { workspace = true }
 | 
				
			||||||
async-trait = { workspace = true }
 | 
					 | 
				
			||||||
uuid = { workspace = true }
 | 
					 | 
				
			||||||
bytes = { workspace = true }
 | 
					 | 
				
			||||||
tokio-tun = { workspace = true }
 | 
					tokio-tun = { workspace = true }
 | 
				
			||||||
 | 
					udp-stream = { workspace = true }
 | 
				
			||||||
[dependencies.advmac]
 | 
					uuid = { workspace = true }
 | 
				
			||||||
path = "../libs/advmac"
 | 
					xenstore = { path = "../libs/xen/xenstore" }
 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies.xenstore]
 | 
					 | 
				
			||||||
path = "../libs/xen/xenstore"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
path = "src/lib.rs"
 | 
					name = "kratanet"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[bin]]
 | 
					[[bin]]
 | 
				
			||||||
name = "kratanet"
 | 
					name = "kratanet"
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										45
									
								
								runtime/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								runtime/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					[package]
 | 
				
			||||||
 | 
					name = "kratart"
 | 
				
			||||||
 | 
					version.workspace = true
 | 
				
			||||||
 | 
					edition = "2021"
 | 
				
			||||||
 | 
					resolver = "2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					advmac = { path = "../libs/advmac" }
 | 
				
			||||||
 | 
					anyhow = { workspace = true }
 | 
				
			||||||
 | 
					async-stream = { workspace = true }
 | 
				
			||||||
 | 
					async-trait = { workspace = true }
 | 
				
			||||||
 | 
					backhand = { workspace = true }
 | 
				
			||||||
 | 
					bytes = { workspace = true }
 | 
				
			||||||
 | 
					clap = { workspace = true }
 | 
				
			||||||
 | 
					cli-tables = { workspace = true }
 | 
				
			||||||
 | 
					directories = { workspace = true }
 | 
				
			||||||
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
 | 
					flate2 = { workspace = true }
 | 
				
			||||||
 | 
					futures = { workspace = true }
 | 
				
			||||||
 | 
					ipnetwork = { workspace = true }
 | 
				
			||||||
 | 
					krata = { path = "../shared" }
 | 
				
			||||||
 | 
					log = { workspace = true }
 | 
				
			||||||
 | 
					loopdev = { path = "../libs/loopdev" }
 | 
				
			||||||
 | 
					nix = { workspace = true, features = ["process"] }
 | 
				
			||||||
 | 
					oci-spec = { workspace = true }
 | 
				
			||||||
 | 
					path-clean = { workspace = true }
 | 
				
			||||||
 | 
					reqwest = { workspace = true }
 | 
				
			||||||
 | 
					serde = { workspace = true }
 | 
				
			||||||
 | 
					serde_json = { workspace = true }
 | 
				
			||||||
 | 
					sha256 = { workspace = true }
 | 
				
			||||||
 | 
					signal-hook = { workspace = true }
 | 
				
			||||||
 | 
					tar = { workspace = true }
 | 
				
			||||||
 | 
					termion = { workspace = true }
 | 
				
			||||||
 | 
					tokio = { workspace = true }
 | 
				
			||||||
 | 
					tokio-stream = { workspace = true }
 | 
				
			||||||
 | 
					tonic = { workspace = true, features = ["tls"] }
 | 
				
			||||||
 | 
					url = { workspace = true }
 | 
				
			||||||
 | 
					uuid = { workspace = true }
 | 
				
			||||||
 | 
					walkdir = { workspace = true }
 | 
				
			||||||
 | 
					zstd = { workspace = true }
 | 
				
			||||||
 | 
					xenclient = { path = "../libs/xen/xenclient" }
 | 
				
			||||||
 | 
					xenstore = { path = "../libs/xen/xenstore" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[lib]
 | 
				
			||||||
 | 
					name = "kratart"
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
use crate::runtime::image::ImageInfo;
 | 
					use crate::image::ImageInfo;
 | 
				
			||||||
use anyhow::Result;
 | 
					use anyhow::Result;
 | 
				
			||||||
use backhand::{FilesystemWriter, NodeHeader};
 | 
					use backhand::{FilesystemWriter, NodeHeader};
 | 
				
			||||||
use krata::launchcfg::LaunchInfo;
 | 
					use krata::launchcfg::LaunchInfo;
 | 
				
			||||||
@ -2,9 +2,9 @@ pub mod cache;
 | 
				
			|||||||
pub mod fetch;
 | 
					pub mod fetch;
 | 
				
			||||||
pub mod name;
 | 
					pub mod name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::runtime::image::cache::ImageCache;
 | 
					use crate::image::cache::ImageCache;
 | 
				
			||||||
use crate::runtime::image::fetch::RegistryClient;
 | 
					use crate::image::fetch::RegistryClient;
 | 
				
			||||||
use crate::runtime::image::name::ImageName;
 | 
					use crate::image::name::ImageName;
 | 
				
			||||||
use anyhow::{anyhow, Result};
 | 
					use anyhow::{anyhow, Result};
 | 
				
			||||||
use backhand::compression::Compressor;
 | 
					use backhand::compression::Compressor;
 | 
				
			||||||
use backhand::{FilesystemCompressor, FilesystemWriter, NodeHeader};
 | 
					use backhand::{FilesystemCompressor, FilesystemWriter, NodeHeader};
 | 
				
			||||||
@ -11,9 +11,9 @@ use uuid::Uuid;
 | 
				
			|||||||
use xenclient::{DomainConfig, DomainDisk, DomainNetworkInterface};
 | 
					use xenclient::{DomainConfig, DomainDisk, DomainNetworkInterface};
 | 
				
			||||||
use xenstore::client::XsdInterface;
 | 
					use xenstore::client::XsdInterface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::runtime::cfgblk::ConfigBlock;
 | 
					use crate::cfgblk::ConfigBlock;
 | 
				
			||||||
use crate::runtime::image::{cache::ImageCache, name::ImageName, ImageCompiler, ImageInfo};
 | 
					use crate::image::{cache::ImageCache, name::ImageName, ImageCompiler, ImageInfo};
 | 
				
			||||||
use crate::runtime::RuntimeContext;
 | 
					use crate::RuntimeContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::{GuestInfo, GuestState};
 | 
					use super::{GuestInfo, GuestState};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -6,23 +6,20 @@ resolver = "2"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
anyhow = { workspace = true }
 | 
					anyhow = { workspace = true }
 | 
				
			||||||
serde = { workspace = true }
 | 
					 | 
				
			||||||
libc = { workspace = true }
 | 
					libc = { workspace = true }
 | 
				
			||||||
log = { workspace = true }
 | 
					log = { workspace = true }
 | 
				
			||||||
tokio = { workspace = true }
 | 
					nix = { workspace = true, features = ["ioctl", "socket"] }
 | 
				
			||||||
url = { workspace = true }
 | 
					 | 
				
			||||||
tonic = { workspace = true }
 | 
					 | 
				
			||||||
prost = { workspace = true }
 | 
					prost = { workspace = true }
 | 
				
			||||||
 | 
					serde = { workspace = true }
 | 
				
			||||||
 | 
					tokio = { workspace = true }
 | 
				
			||||||
 | 
					tonic = { workspace = true }
 | 
				
			||||||
 | 
					url = { workspace = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[build-dependencies]
 | 
					[build-dependencies]
 | 
				
			||||||
tonic-build = { workspace = true }
 | 
					tonic-build = { workspace = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies.nix]
 | 
					 | 
				
			||||||
workspace = true
 | 
					 | 
				
			||||||
features = ["ioctl", "socket"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[lib]
 | 
					[lib]
 | 
				
			||||||
path = "src/lib.rs"
 | 
					name = "krata"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[example]]
 | 
					[[example]]
 | 
				
			||||||
name = "ethtool"
 | 
					name = "ethtool"
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user