1use endian_num::{le16, le32};
4use num_enum::{IntoPrimitive, TryFromPrimitive, UnsafeFromPrimitive};
5use volatile_macro::VolatileFieldAccess;
6
7pub use super::features::vsock::F;
8use crate::le64;
9
10#[doc(alias = "virtio_vsock_config")]
14#[cfg_attr(
15 feature = "zerocopy",
16 derive(
17 zerocopy_derive::KnownLayout,
18 zerocopy_derive::Immutable,
19 zerocopy_derive::FromBytes,
20 )
21)]
22#[derive(VolatileFieldAccess)]
23#[repr(C)]
24pub struct Config {
25 guest_cid: le64,
26}
27
28#[doc(alias = "virtio_vsock_hdr")]
30#[cfg_attr(
31 feature = "zerocopy",
32 derive(
33 zerocopy_derive::KnownLayout,
34 zerocopy_derive::Immutable,
35 zerocopy_derive::FromBytes,
36 zerocopy_derive::IntoBytes,
37 )
38)]
39#[derive(Default, Clone, Copy, Debug)]
40#[repr(C, packed)]
41pub struct Hdr {
42 pub src_cid: le64,
43 pub dst_cid: le64,
44 pub src_port: le32,
45 pub dst_port: le32,
46 pub len: le32,
47 pub type_: le16,
48 pub op: le16,
49 pub flags: le32,
50 pub buf_alloc: le32,
51 pub fwd_cnt: le32,
52}
53
54#[doc(alias = "VIRTIO_VSOCK_OP")]
55#[derive(
56 IntoPrimitive, TryFromPrimitive, UnsafeFromPrimitive, PartialEq, Eq, Clone, Copy, Debug,
57)]
58#[non_exhaustive]
59#[repr(u16)]
60pub enum Op {
61 #[doc(alias = "VIRTIO_VSOCK_OP_INVALID")]
62 Invalid = 0,
63
64 #[doc(alias = "VIRTIO_VSOCK_OP_REQUEST")]
65 Request = 1,
66
67 #[doc(alias = "VIRTIO_VSOCK_OP_RESPONSE")]
68 Response = 2,
69
70 #[doc(alias = "VIRTIO_VSOCK_OP_RST")]
71 Rst = 3,
72
73 #[doc(alias = "VIRTIO_VSOCK_OP_SHUTDOWN")]
74 Shutdown = 4,
75
76 #[doc(alias = "VIRTIO_VSOCK_OP_RW")]
77 Rw = 5,
78
79 #[doc(alias = "VIRTIO_VSOCK_OP_CREDIT_UPDATE")]
80 CreditUpdate = 6,
81
82 #[doc(alias = "VIRTIO_VSOCK_OP_CREDIT_REQUEST")]
83 CreditRequest = 7,
84}
85
86#[doc(alias = "VIRTIO_VSOCK_TYPE")]
87#[derive(
88 IntoPrimitive, TryFromPrimitive, UnsafeFromPrimitive, PartialEq, Eq, Clone, Copy, Debug,
89)]
90#[non_exhaustive]
91#[repr(u16)]
92pub enum Type {
93 #[doc(alias = "VIRTIO_VSOCK_TYPE_STREAM")]
94 Stream = 1,
95
96 #[doc(alias = "VIRTIO_VSOCK_TYPE_SEQPACKET")]
97 Seqpacket = 2,
98}
99
100endian_bitflags! {
101 #[doc(alias = "VIRTIO_VSOCK_SHUTDOWN_F")]
103 pub struct ShutdownF: le32 {
104 #[doc(alias = "VIRTIO_VSOCK_SHUTDOWN_F_RECEIVE")]
105 const RECEIVE = 1 << 0;
106
107 #[doc(alias = "VIRTIO_VSOCK_SHUTDOWN_F_SEND")]
108 const SEND = 1 << 1;
109 }
110}
111
112endian_bitflags! {
113 #[doc(alias = "VIRTIO_VSOCK_SEQ")]
115 pub struct Seq: le32 {
116 #[doc(alias = "VIRTIO_VSOCK_SEQ_EOM")]
117 const EOM = 1 << 0;
118
119 #[doc(alias = "VIRTIO_VSOCK_SEQ_EOR")]
120 const EOR = 1 << 1;
121 }
122}
123
124#[doc(alias = "VIRTIO_VSOCK_EVENT")]
125#[derive(
126 IntoPrimitive, TryFromPrimitive, UnsafeFromPrimitive, PartialEq, Eq, Clone, Copy, Debug,
127)]
128#[non_exhaustive]
129#[repr(u32)]
130pub enum EventId {
131 #[doc(alias = "VIRTIO_VSOCK_EVENT_TRANSPORT_RESET")]
132 TransportReset = 0,
133}
134
135#[doc(alias = "virtio_vsock_event")]
137#[cfg_attr(
138 feature = "zerocopy",
139 derive(
140 zerocopy_derive::KnownLayout,
141 zerocopy_derive::Immutable,
142 zerocopy_derive::FromBytes,
143 zerocopy_derive::IntoBytes,
144 )
145)]
146#[derive(Default, Clone, Copy, Debug)]
147#[repr(C)]
148pub struct Event {
149 id: le32,
150}