crosvm: vm_control: make handle_request generic over AsRef<Path>

All the Path::new(string var) are very repeptitive and completely
unnecessary

Change-Id: I05e86bcf9ad35519cd74ed8de78c4ddabd88abe0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3680296
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Anton Romanov <romanton@google.com>
This commit is contained in:
Anton Romanov 2022-05-31 20:57:34 +00:00 committed by Chromeos LUCI
parent d19b575fd1
commit 9ac4427d7b
2 changed files with 39 additions and 38 deletions

View file

@ -2717,48 +2717,40 @@ filter=(default|override) - if the msr is filtered in KVM, whether to override o
} }
fn stop_vms(cmd: crosvm::StopCommand) -> std::result::Result<(), ()> { fn stop_vms(cmd: crosvm::StopCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::Exit, cmd.socket_path)
vms_request(&VmRequest::Exit, socket_path)
} }
fn suspend_vms(cmd: crosvm::SuspendCommand) -> std::result::Result<(), ()> { fn suspend_vms(cmd: crosvm::SuspendCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::Suspend, cmd.socket_path)
vms_request(&VmRequest::Suspend, socket_path)
} }
fn resume_vms(cmd: crosvm::ResumeCommand) -> std::result::Result<(), ()> { fn resume_vms(cmd: crosvm::ResumeCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::Resume, cmd.socket_path)
vms_request(&VmRequest::Resume, socket_path)
} }
fn powerbtn_vms(cmd: crosvm::PowerbtnCommand) -> std::result::Result<(), ()> { fn powerbtn_vms(cmd: crosvm::PowerbtnCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::Powerbtn, cmd.socket_path)
vms_request(&VmRequest::Powerbtn, socket_path)
} }
fn sleepbtn_vms(cmd: crosvm::SleepCommand) -> std::result::Result<(), ()> { fn sleepbtn_vms(cmd: crosvm::SleepCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::Sleepbtn, cmd.socket_path)
vms_request(&VmRequest::Sleepbtn, socket_path)
} }
fn inject_gpe(cmd: crosvm::GpeCommand) -> std::result::Result<(), ()> { fn inject_gpe(cmd: crosvm::GpeCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::Gpe(cmd.gpe), cmd.socket_path)
vms_request(&VmRequest::Gpe(cmd.gpe), socket_path)
} }
fn balloon_vms(cmd: crosvm::BalloonCommand) -> std::result::Result<(), ()> { fn balloon_vms(cmd: crosvm::BalloonCommand) -> std::result::Result<(), ()> {
let command = BalloonControlCommand::Adjust { let command = BalloonControlCommand::Adjust {
num_bytes: cmd.num_bytes, num_bytes: cmd.num_bytes,
}; };
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::BalloonCommand(command), cmd.socket_path)
vms_request(&VmRequest::BalloonCommand(command), socket_path)
} }
fn balloon_stats(cmd: crosvm::BalloonStatsCommand) -> std::result::Result<(), ()> { fn balloon_stats(cmd: crosvm::BalloonStatsCommand) -> std::result::Result<(), ()> {
let command = BalloonControlCommand::Stats {}; let command = BalloonControlCommand::Stats {};
let request = &VmRequest::BalloonCommand(command); let request = &VmRequest::BalloonCommand(command);
let socket_path = Path::new(&cmd.socket_path); let response = handle_request(request, cmd.socket_path)?;
let response = handle_request(request, socket_path)?;
match serde_json::to_string_pretty(&response) { match serde_json::to_string_pretty(&response) {
Ok(response_json) => println!("{}", response_json), Ok(response_json) => println!("{}", response_json),
Err(e) => { Err(e) => {
@ -2773,9 +2765,12 @@ fn balloon_stats(cmd: crosvm::BalloonStatsCommand) -> std::result::Result<(), ()
} }
fn modify_battery(cmd: crosvm::BatteryCommand) -> std::result::Result<(), ()> { fn modify_battery(cmd: crosvm::BatteryCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); do_modify_battery(
cmd.socket_path,
do_modify_battery(socket_path, &cmd.battery_type, &cmd.property, &cmd.target) &cmd.battery_type,
&cmd.property,
&cmd.target,
)
} }
fn modify_vfio(cmd: crosvm::VfioCrosvmCommand) -> std::result::Result<(), ()> { fn modify_vfio(cmd: crosvm::VfioCrosvmCommand) -> std::result::Result<(), ()> {
@ -2801,7 +2796,7 @@ fn modify_vfio(cmd: crosvm::VfioCrosvmCommand) -> std::result::Result<(), ()> {
error!("Invalid host sysfs path: {:?}", vfio_path); error!("Invalid host sysfs path: {:?}", vfio_path);
return Err(()); return Err(());
} }
handle_request(&request, Path::new(&socket_path))?; handle_request(&request, socket_path)?;
Ok(()) Ok(())
} }
@ -2968,33 +2963,28 @@ fn disk_cmd(cmd: crosvm::DiskCommand) -> std::result::Result<(), ()> {
new_size: cmd.disk_size, new_size: cmd.disk_size,
}, },
}; };
let socket_path = Path::new(&cmd.socket_path); vms_request(&request, cmd.socket_path)
vms_request(&request, socket_path)
} }
} }
} }
fn make_rt(cmd: crosvm::MakeRTCommand) -> std::result::Result<(), ()> { fn make_rt(cmd: crosvm::MakeRTCommand) -> std::result::Result<(), ()> {
let socket_path = Path::new(&cmd.socket_path); vms_request(&VmRequest::MakeRT, cmd.socket_path)
vms_request(&VmRequest::MakeRT, socket_path)
} }
fn usb_attach(cmd: crosvm::UsbAttachCommand) -> ModifyUsbResult<UsbControlResult> { fn usb_attach(cmd: crosvm::UsbAttachCommand) -> ModifyUsbResult<UsbControlResult> {
let (bus, addr, vid, pid) = cmd.addr; let (bus, addr, vid, pid) = cmd.addr;
let socket_path = Path::new(&cmd.socket_path);
let dev_path = Path::new(&cmd.dev_path); let dev_path = Path::new(&cmd.dev_path);
do_usb_attach(socket_path, bus, addr, vid, pid, dev_path) do_usb_attach(cmd.socket_path, bus, addr, vid, pid, dev_path)
} }
fn usb_detach(cmd: crosvm::UsbDetachCommand) -> ModifyUsbResult<UsbControlResult> { fn usb_detach(cmd: crosvm::UsbDetachCommand) -> ModifyUsbResult<UsbControlResult> {
let socket_path = Path::new(&cmd.socket_path); do_usb_detach(cmd.socket_path, cmd.port)
do_usb_detach(socket_path, cmd.port)
} }
fn usb_list(cmd: crosvm::UsbListCommand) -> ModifyUsbResult<UsbControlResult> { fn usb_list(cmd: crosvm::UsbListCommand) -> ModifyUsbResult<UsbControlResult> {
let socket_path = Path::new(&cmd.socket_path); do_usb_list(cmd.socket_path)
do_usb_list(socket_path)
} }
fn modify_usb(cmd: crosvm::UsbCommand) -> std::result::Result<(), ()> { fn modify_usb(cmd: crosvm::UsbCommand) -> std::result::Result<(), ()> {

View file

@ -65,14 +65,17 @@ fn raw_descriptor_from_path(path: &Path) -> ModifyUsbResult<RawDescriptor> {
pub type VmsRequestResult = std::result::Result<(), ()>; pub type VmsRequestResult = std::result::Result<(), ()>;
pub fn vms_request(request: &VmRequest, socket_path: &Path) -> VmsRequestResult { pub fn vms_request<T: AsRef<Path> + std::fmt::Debug>(
request: &VmRequest,
socket_path: T,
) -> VmsRequestResult {
let response = handle_request(request, socket_path)?; let response = handle_request(request, socket_path)?;
info!("request response was {}", response); info!("request response was {}", response);
Ok(()) Ok(())
} }
pub fn do_usb_attach( pub fn do_usb_attach<T: AsRef<Path> + std::fmt::Debug>(
socket_path: &Path, socket_path: T,
bus: u8, bus: u8,
addr: u8, addr: u8,
vid: u16, vid: u16,
@ -106,7 +109,10 @@ pub fn do_usb_attach(
} }
} }
pub fn do_usb_detach(socket_path: &Path, port: u8) -> ModifyUsbResult<UsbControlResult> { pub fn do_usb_detach<T: AsRef<Path> + std::fmt::Debug>(
socket_path: T,
port: u8,
) -> ModifyUsbResult<UsbControlResult> {
let request = VmRequest::UsbCommand(UsbControlCommand::DetachDevice { port }); let request = VmRequest::UsbCommand(UsbControlCommand::DetachDevice { port });
let response = let response =
handle_request(&request, socket_path).map_err(|_| ModifyUsbError::SocketFailed)?; handle_request(&request, socket_path).map_err(|_| ModifyUsbError::SocketFailed)?;
@ -116,7 +122,9 @@ pub fn do_usb_detach(socket_path: &Path, port: u8) -> ModifyUsbResult<UsbControl
} }
} }
pub fn do_usb_list(socket_path: &Path) -> ModifyUsbResult<UsbControlResult> { pub fn do_usb_list<T: AsRef<Path> + std::fmt::Debug>(
socket_path: T,
) -> ModifyUsbResult<UsbControlResult> {
let mut ports: [u8; USB_CONTROL_MAX_PORTS] = Default::default(); let mut ports: [u8; USB_CONTROL_MAX_PORTS] = Default::default();
for (index, port) in ports.iter_mut().enumerate() { for (index, port) in ports.iter_mut().enumerate() {
*port = index as u8 *port = index as u8
@ -132,8 +140,8 @@ pub fn do_usb_list(socket_path: &Path) -> ModifyUsbResult<UsbControlResult> {
pub type DoModifyBatteryResult = std::result::Result<(), ()>; pub type DoModifyBatteryResult = std::result::Result<(), ()>;
pub fn do_modify_battery( pub fn do_modify_battery<T: AsRef<Path> + std::fmt::Debug>(
socket_path: &Path, socket_path: T,
battery_type: &str, battery_type: &str,
property: &str, property: &str,
target: &str, target: &str,
@ -163,7 +171,10 @@ pub fn do_modify_battery(
pub type HandleRequestResult = std::result::Result<VmResponse, ()>; pub type HandleRequestResult = std::result::Result<VmResponse, ()>;
pub fn handle_request(request: &VmRequest, socket_path: &Path) -> HandleRequestResult { pub fn handle_request<T: AsRef<Path> + std::fmt::Debug>(
request: &VmRequest,
socket_path: T,
) -> HandleRequestResult {
match UnixSeqpacket::connect(&socket_path) { match UnixSeqpacket::connect(&socket_path) {
Ok(s) => { Ok(s) => {
let socket = Tube::new(s); let socket = Tube::new(s);