| 287 | |
| 288 | impl VhostUserNetBackendConfig { |
| 289 | pub fn parse(backend: &str) -> Result<Self> { |
| 290 | let mut parser = OptionParser::new(); |
| 291 | |
| 292 | parser |
| 293 | .add("tap") |
| 294 | .add("ip") |
| 295 | .add("host_mac") |
| 296 | .add("mask") |
| 297 | .add("mtu") |
| 298 | .add("queue_size") |
| 299 | .add("num_queues") |
| 300 | .add("socket") |
| 301 | .add("client"); |
| 302 | |
| 303 | parser.parse(backend).map_err(Error::FailedConfigParse)?; |
| 304 | |
| 305 | let tap = parser.get("tap"); |
| 306 | let ip = parser |
| 307 | .convert("ip") |
| 308 | .map_err(Error::FailedConfigParse)? |
| 309 | .unwrap_or_else(|| IpAddr::V4(Ipv4Addr::new(192, 168, 100, 1))); |
| 310 | let host_mac = parser |
| 311 | .convert("host_mac") |
| 312 | .map_err(Error::FailedConfigParse)? |
| 313 | .unwrap_or_else(MacAddr::local_random); |
| 314 | let mask = parser |
| 315 | .convert("mask") |
| 316 | .map_err(Error::FailedConfigParse)? |
| 317 | .unwrap_or_else(|| IpAddr::V4(Ipv4Addr::new(255, 255, 255, 0))); |
| 318 | let mtu = parser.convert("mtu").map_err(Error::FailedConfigParse)?; |
| 319 | let queue_size = parser |
| 320 | .convert("queue_size") |
| 321 | .map_err(Error::FailedConfigParse)? |
| 322 | .unwrap_or(256); |
| 323 | let num_queues = parser |
| 324 | .convert("num_queues") |
| 325 | .map_err(Error::FailedConfigParse)? |
| 326 | .unwrap_or(2); |
| 327 | let socket = parser.get("socket").ok_or(Error::SocketParameterMissing)?; |
| 328 | let client = parser |
| 329 | .convert::<Toggle>("client") |
| 330 | .map_err(Error::FailedConfigParse)? |
| 331 | .unwrap_or(Toggle(false)) |
| 332 | .0; |
| 333 | |
| 334 | Ok(VhostUserNetBackendConfig { |
| 335 | ip, |
| 336 | host_mac, |
| 337 | mask, |
| 338 | mtu, |
| 339 | socket, |
| 340 | num_queues, |
| 341 | queue_size, |
| 342 | tap, |
| 343 | client, |
| 344 | }) |
| 345 | } |
| 346 | } |