1 // Copyright 2017 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 //! Implements vhost-based virtio devices. 6 7 use base::{Error as SysError, TubeError}; 8 use net_util::Error as TapError; 9 use remain::sorted; 10 use thiserror::Error; 11 use vhost::Error as VhostError; 12 13 mod control_socket; 14 mod net; 15 pub mod user; 16 pub mod vsock; 17 mod worker; 18 19 pub use self::control_socket::*; 20 pub use self::net::Net; 21 pub use self::vsock::Vsock; 22 23 #[sorted] 24 #[derive(Error, Debug)] 25 pub enum Error { 26 /// Cloning kill event failed. 27 #[error("failed to clone kill event: {0}")] 28 CloneKillEvent(SysError), 29 /// Creating kill event failed. 30 #[error("failed to create kill event: {0}")] 31 CreateKillEvent(SysError), 32 /// Creating tube failed. 33 #[error("failed to create tube: {0}")] 34 CreateTube(TubeError), 35 /// Creating wait context failed. 36 #[error("failed to create poll context: {0}")] 37 CreateWaitContext(SysError), 38 /// Enabling tap interface failed. 39 #[error("failed to enable tap interface: {0}")] 40 TapEnable(TapError), 41 /// Open tap device failed. 42 #[error("failed to open tap device: {0}")] 43 TapOpen(TapError), 44 /// Setting tap IP failed. 45 #[error("failed to set tap IP: {0}")] 46 TapSetIp(TapError), 47 /// Setting tap mac address failed. 48 #[error("failed to set tap mac address: {0}")] 49 TapSetMacAddress(TapError), 50 /// Setting tap netmask failed. 51 #[error("failed to set tap netmask: {0}")] 52 TapSetNetmask(TapError), 53 /// Setting tap interface offload flags failed. 54 #[error("failed to set tap interface offload flags: {0}")] 55 TapSetOffload(TapError), 56 /// Setting vnet header size failed. 57 #[error("failed to set vnet header size: {0}")] 58 TapSetVnetHdrSize(TapError), 59 /// Get features failed. 60 #[error("failed to get features: {0}")] 61 VhostGetFeatures(VhostError), 62 /// Failed to create vhost event. 63 #[error("failed to create vhost event: {0}")] 64 VhostIrqCreate(SysError), 65 /// Failed to read vhost event. 66 #[error("failed to read vhost event: {0}")] 67 VhostIrqRead(SysError), 68 /// Net set backend failed. 69 #[error("net set backend failed: {0}")] 70 VhostNetSetBackend(VhostError), 71 /// Failed to open vhost device. 72 #[error("failed to open vhost device: {0}")] 73 VhostOpen(VhostError), 74 /// Set features failed. 75 #[error("failed to set features: {0}")] 76 VhostSetFeatures(VhostError), 77 /// Set mem table failed. 78 #[error("failed to set mem table: {0}")] 79 VhostSetMemTable(VhostError), 80 /// Set owner failed. 81 #[error("failed to set owner: {0}")] 82 VhostSetOwner(VhostError), 83 /// Set vring addr failed. 84 #[error("failed to set vring addr: {0}")] 85 VhostSetVringAddr(VhostError), 86 /// Set vring base failed. 87 #[error("failed to set vring base: {0}")] 88 VhostSetVringBase(VhostError), 89 /// Set vring call failed. 90 #[error("failed to set vring call: {0}")] 91 VhostSetVringCall(VhostError), 92 /// Set vring kick failed. 93 #[error("failed to set vring kick: {0}")] 94 VhostSetVringKick(VhostError), 95 /// Set vring num failed. 96 #[error("failed to set vring num: {0}")] 97 VhostSetVringNum(VhostError), 98 /// Failed to set CID for guest. 99 #[error("failed to set CID for guest: {0}")] 100 VhostVsockSetCid(VhostError), 101 /// Failed to start vhost-vsock driver. 102 #[error("failed to start vhost-vsock driver: {0}")] 103 VhostVsockStart(VhostError), 104 /// Error while waiting for events. 105 #[error("failed waiting for events: {0}")] 106 WaitError(SysError), 107 } 108 109 pub type Result<T> = std::result::Result<T, Error>; 110