2024-01-10 10:08:39 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use std::{env, process};
							 | 
						
					
						
							
								
									
										
										
										
											2024-04-22 12:48:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use tokio::fs;
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-21 10:38:19 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use uuid::Uuid;
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-30 17:42:55 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use xenclient::error::Result;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								use xenclient::{DomainConfig, XenClient};
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-21 10:38:19 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use xenplatform::domain::BaseDomainConfig;
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-09 22:39:32 -08:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-20 19:42:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								#[cfg(target_arch = "x86_64")]
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-21 01:10:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								type RuntimePlatform = xenplatform::x86pv::X86PvPlatform;
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-20 19:42:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#[cfg(not(target_arch = "x86_64"))]
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-21 01:10:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								type RuntimePlatform = xenplatform::unsupported::UnsupportedPlatform;
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-20 19:42:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-23 04:37:53 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								#[tokio::main]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								async fn main() -> Result<()> {
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-11 12:21:33 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    env_logger::init();
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-10 10:08:39 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    let args: Vec<String> = env::args().collect();
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-16 17:57:19 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    if args.len() != 3 {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        println!("usage: boot <kernel-image> <initrd>");
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-10 10:08:39 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        process::exit(1);
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    let kernel_image_path = args.get(1).expect("argument not specified");
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-16 17:57:19 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    let initrd_path = args.get(2).expect("argument not specified");
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-20 19:42:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    let client = XenClient::new(0, RuntimePlatform::new()).await?;
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-17 05:22:47 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    let config = DomainConfig {
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-21 10:38:19 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        base: BaseDomainConfig {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            uuid: Uuid::new_v4(),
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            max_vcpus: 1,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            mem_mb: 512,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            enable_iommu: true,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            kernel: fs::read(&kernel_image_path).await?,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            initrd: fs::read(&initrd_path).await?,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            cmdline: "earlyprintk=xen earlycon=xen console=hvc0 init=/init".to_string(),
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            owner_domid: 0,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        },
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-18 06:15:42 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        backend_domid: 0,
							 | 
						
					
						
							
								
									
										
										
										
											2024-04-22 12:48:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        name: "xenclient-test".to_string(),
							 | 
						
					
						
							
								
									
										
										
										
											2024-06-20 19:42:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        swap_console_backend: None,
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-18 06:15:42 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        disks: vec![],
							 | 
						
					
						
							
								
									
										
										
										
											2024-03-27 06:28:47 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        channels: vec![],
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-01 13:56:03 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        vifs: vec![],
							 | 
						
					
						
							
								
									
										
										
										
											2024-04-29 10:02:20 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        pcis: vec![],
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-22 02:15:53 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        filesystems: vec![],
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-21 01:58:07 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        extra_keys: vec![],
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-23 04:48:44 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        extra_rw_paths: vec![],
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-16 17:57:19 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    };
							 | 
						
					
						
							
								
									
										
										
										
											2024-03-27 06:28:47 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    let created = client.create(&config).await?;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    println!("created domain {}", created.domid);
							 | 
						
					
						
							
								
									
										
										
										
											2024-01-09 22:39:32 -08:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    Ok(())
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								}
							 |