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