mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-02 11:35:46 +00:00
vmm: config: Port network parsing to OptionParser
Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
a5747a843e
commit
218c780f67
@ -9,8 +9,6 @@ use clap::ArgMatches;
|
|||||||
use net_util::MacAddr;
|
use net_util::MacAddr;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::convert::From;
|
use std::convert::From;
|
||||||
use std::io;
|
|
||||||
use std::net::AddrParseError;
|
|
||||||
use std::net::Ipv4Addr;
|
use std::net::Ipv4Addr;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::result;
|
use std::result;
|
||||||
@ -37,20 +35,6 @@ pub enum Error {
|
|||||||
ParseDiskSocketAndPath,
|
ParseDiskSocketAndPath,
|
||||||
/// Failed parsing random number generator parameters.
|
/// Failed parsing random number generator parameters.
|
||||||
ParseRngParams,
|
ParseRngParams,
|
||||||
/// Failed parsing network ip parameter.
|
|
||||||
ParseNetIpParam(AddrParseError),
|
|
||||||
/// Failed parsing network mask parameter.
|
|
||||||
ParseNetMaskParam(AddrParseError),
|
|
||||||
/// Failed parsing network mac parameter.
|
|
||||||
ParseNetMacParam(io::Error),
|
|
||||||
/// Failed parsing network queue number parameter.
|
|
||||||
ParseNetNumQueuesParam(std::num::ParseIntError),
|
|
||||||
/// Failed parsing network queue size parameter.
|
|
||||||
ParseNetQueueSizeParam(std::num::ParseIntError),
|
|
||||||
/// Failed to parse vhost parameters
|
|
||||||
ParseNetVhostParam(std::str::ParseBoolError),
|
|
||||||
/// Need a vhost socket
|
|
||||||
ParseNetVhostSocketRequired,
|
|
||||||
/// Failed parsing fs tag parameter.
|
/// Failed parsing fs tag parameter.
|
||||||
ParseFsTagParam,
|
ParseFsTagParam,
|
||||||
/// Failed parsing fs socket path parameter.
|
/// Failed parsing fs socket path parameter.
|
||||||
@ -71,16 +55,6 @@ pub enum Error {
|
|||||||
ParseConsoleParam,
|
ParseConsoleParam,
|
||||||
/// Both console and serial are tty.
|
/// Both console and serial are tty.
|
||||||
ParseTTYParam,
|
ParseTTYParam,
|
||||||
/// Failed parsing vhost-user-net mac parameter.
|
|
||||||
ParseVuNetMacParam(io::Error),
|
|
||||||
/// Failed parsing vhost-user sock parameter.
|
|
||||||
ParseVuSockParam,
|
|
||||||
/// Failed parsing vhost-user queue number parameter.
|
|
||||||
ParseVuNumQueuesParam(std::num::ParseIntError),
|
|
||||||
/// Failed parsing vhost-user queue size parameter.
|
|
||||||
ParseVuQueueSizeParam(std::num::ParseIntError),
|
|
||||||
/// Failed parsing vhost-user-net server parameter.
|
|
||||||
ParseVuNetServerParam(std::num::ParseIntError),
|
|
||||||
/// Failed parsing vsock context ID parameter.
|
/// Failed parsing vsock context ID parameter.
|
||||||
ParseVsockCidParam(std::num::ParseIntError),
|
ParseVsockCidParam(std::num::ParseIntError),
|
||||||
/// Failed parsing vsock socket path parameter.
|
/// Failed parsing vsock socket path parameter.
|
||||||
@ -95,6 +69,8 @@ pub enum Error {
|
|||||||
ParseMemory(OptionParserError),
|
ParseMemory(OptionParserError),
|
||||||
/// Error parsing disk options
|
/// Error parsing disk options
|
||||||
ParseDisk(OptionParserError),
|
ParseDisk(OptionParserError),
|
||||||
|
/// Error parsing network options
|
||||||
|
ParseNetwork(OptionParserError),
|
||||||
}
|
}
|
||||||
pub type Result<T> = result::Result<T, Error>;
|
pub type Result<T> = result::Result<T, Error>;
|
||||||
|
|
||||||
@ -666,79 +642,51 @@ impl NetConfig {
|
|||||||
vhost_user=<vhost_user_enable>,socket=<vhost_user_socket_path>\"";
|
vhost_user=<vhost_user_enable>,socket=<vhost_user_socket_path>\"";
|
||||||
|
|
||||||
pub fn parse(net: &str) -> Result<Self> {
|
pub fn parse(net: &str) -> Result<Self> {
|
||||||
// Split the parameters based on the comma delimiter
|
let mut parser = OptionParser::new();
|
||||||
let params_list: Vec<&str> = net.split(',').collect();
|
|
||||||
|
|
||||||
let mut tap_str: &str = "";
|
parser
|
||||||
let mut ip_str: &str = "";
|
.add("tap")
|
||||||
let mut mask_str: &str = "";
|
.add("ip")
|
||||||
let mut mac_str: &str = "";
|
.add("mask")
|
||||||
let mut iommu_str: &str = "";
|
.add("mac")
|
||||||
let mut num_queues_str: &str = "";
|
.add("iommu")
|
||||||
let mut queue_size_str: &str = "";
|
.add("queue_size")
|
||||||
let mut vhost_socket_str: &str = "";
|
.add("num_queues")
|
||||||
let mut vhost_user_str: &str = "";
|
.add("vhost_user")
|
||||||
|
.add("socket");
|
||||||
|
parser.parse(net).map_err(Error::ParseNetwork)?;
|
||||||
|
|
||||||
for param in params_list.iter() {
|
let tap = parser.get("tap");
|
||||||
if param.starts_with("tap=") {
|
let ip = parser
|
||||||
tap_str = ¶m[4..];
|
.convert("ip")
|
||||||
} else if param.starts_with("ip=") {
|
.map_err(Error::ParseNetwork)?
|
||||||
ip_str = ¶m[3..];
|
.unwrap_or_else(default_netconfig_ip);
|
||||||
} else if param.starts_with("mask=") {
|
let mask = parser
|
||||||
mask_str = ¶m[5..];
|
.convert("mask")
|
||||||
} else if param.starts_with("mac=") {
|
.map_err(Error::ParseNetwork)?
|
||||||
mac_str = ¶m[4..];
|
.unwrap_or_else(default_netconfig_mask);
|
||||||
} else if param.starts_with("iommu=") {
|
let mac = parser
|
||||||
iommu_str = ¶m[6..];
|
.convert("mac")
|
||||||
} else if param.starts_with("num_queues=") {
|
.map_err(Error::ParseNetwork)?
|
||||||
num_queues_str = ¶m[11..];
|
.unwrap_or_else(default_netconfig_mac);
|
||||||
} else if param.starts_with("queue_size=") {
|
let iommu = parser
|
||||||
queue_size_str = ¶m[11..];
|
.convert::<Toggle>("iommu")
|
||||||
} else if param.starts_with("vhost_user=") {
|
.map_err(Error::ParseNetwork)?
|
||||||
vhost_user_str = ¶m[11..];
|
.unwrap_or(Toggle(false))
|
||||||
} else if param.starts_with("socket=") {
|
.0;
|
||||||
vhost_socket_str = ¶m[7..];
|
let queue_size = parser
|
||||||
}
|
.convert("queue_size")
|
||||||
}
|
.map_err(Error::ParseNetwork)?
|
||||||
|
.unwrap_or_else(default_netconfig_queue_size);
|
||||||
let mut tap: Option<String> = default_netconfig_tap();
|
let num_queues = parser
|
||||||
let mut ip: Ipv4Addr = default_netconfig_ip();
|
.convert("num_queues")
|
||||||
let mut mask: Ipv4Addr = default_netconfig_mask();
|
.map_err(Error::ParseNetwork)?
|
||||||
let mut mac: MacAddr = default_netconfig_mac();
|
.unwrap_or_else(default_netconfig_num_queues);
|
||||||
let iommu = parse_on_off(iommu_str)?;
|
let vhost_user = parser
|
||||||
let mut num_queues: usize = default_netconfig_num_queues();
|
.convert("vhost_user")
|
||||||
let mut queue_size: u16 = default_netconfig_queue_size();
|
.map_err(Error::ParseNetwork)?
|
||||||
let mut vhost_user = false;
|
.unwrap_or(false);
|
||||||
let mut vhost_socket = None;
|
let vhost_socket = parser.get("socket");
|
||||||
|
|
||||||
if !tap_str.is_empty() {
|
|
||||||
tap = Some(tap_str.to_string());
|
|
||||||
}
|
|
||||||
if !ip_str.is_empty() {
|
|
||||||
ip = ip_str.parse().map_err(Error::ParseNetIpParam)?;
|
|
||||||
}
|
|
||||||
if !mask_str.is_empty() {
|
|
||||||
mask = mask_str.parse().map_err(Error::ParseNetMaskParam)?;
|
|
||||||
}
|
|
||||||
if !mac_str.is_empty() {
|
|
||||||
mac = MacAddr::parse_str(mac_str).map_err(Error::ParseNetMacParam)?;
|
|
||||||
}
|
|
||||||
if !num_queues_str.is_empty() {
|
|
||||||
num_queues = num_queues_str
|
|
||||||
.parse()
|
|
||||||
.map_err(Error::ParseNetNumQueuesParam)?;
|
|
||||||
}
|
|
||||||
if !queue_size_str.is_empty() {
|
|
||||||
queue_size = queue_size_str
|
|
||||||
.parse()
|
|
||||||
.map_err(Error::ParseNetQueueSizeParam)?;
|
|
||||||
}
|
|
||||||
if !vhost_user_str.is_empty() {
|
|
||||||
vhost_user = vhost_user_str.parse().map_err(Error::ParseNetVhostParam)?;
|
|
||||||
}
|
|
||||||
if !vhost_socket_str.is_empty() {
|
|
||||||
vhost_socket = Some(vhost_socket_str.to_owned());
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(NetConfig {
|
Ok(NetConfig {
|
||||||
tap,
|
tap,
|
||||||
|
Loading…
Reference in New Issue
Block a user