• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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