1mod uring;
2use std::{convert::Infallible, mem, num};
3
4use dope_sys::{
5 Errno, engine,
6 engine::{
7 admit,
8 ring::{Context, config, config::Config, create::Failure},
9 },
10 io::{
11 file, pipe,
12 reactor::{complete, complete::Observe, ready::delivery, submit},
13 socket::{
14 self, accept, gso, option,
15 option::{fast, tuning, tuning::device::Source},
16 record,
17 route::{self, install},
18 },
19 },
20 kernel,
21 kernel::errno,
22 memory,
23 memory::buffer::{self, provided},
24 probe,
25 probe::{accept::Validate, cleanup::Rejection, receive, session},
26 ring,
27 ring::{create, enter, map, prepare, ready},
28 table::{
29 permit,
30 token::{self, Codec, host},
31 },
32 thread::affinity,
33};
34use driver::Engine;
35use o3::{base::num::bounded, buffer::bytes::bounded::MAX};
36use reactor::{
37 buffers,
38 ring::{Recover, Released, Resources},
39 sq,
40};
41pub(crate) use reactor::{register::Register, ring::Ring};
42pub use uring::Uring;
43
44use crate::{
45 driver::{
46 Closing, Turn,
47 poll::Poll,
48 token::Encoded,
49 tuning::{State, Table},
50 },
51 reactor::{
52 buffers::{Canary, Cleanup, Entry, Payload, Producer, Selected},
53 cq,
54 cq::packet,
55 op,
56 ring::{Accepted, Enter, Outcome, Range, Ready, Session, Waiting},
57 sq::Borrowed,
58 types,
59 },
60 sockets::{Control, Installer, Operation},
61 system::{Cpus, Fifo, Timer},
62};
63
64mod reactor;
65
66mod driver;
67
68mod error;
69mod system;
70
71mod sockets;
72
73pub(crate) type Observed<T> = complete::Parts<T, cq::Outcome, cq::Flags>;
74
75const _: () = {
76 assert!(mem::size_of::<Observed<u64>>() == 2 * mem::size_of::<u64>());
77 assert!(mem::align_of::<Observed<u64>>() == mem::align_of::<u64>());
78};
79
80type BufferBuild<L, P> = o3::mem::Rejected<Cleanup<L>, P>;
81
82type Primary = create::Primary<
83 create::Cause<kernel::Errno<error::Setup>, kernel::Errno<error::Map>>,
84 kernel::Errno<error::Register<20>>,
85 kernel::Errno<error::Register<22>>,
86>;
87type Fault<T> = create::Failure<
88 map::Storage<kernel::Errno<error::Unmap>>,
89 probe::Cause<
90 <<T as Codec>::Context as host::Context>::Probe,
91 Observed<T>,
92 kernel::Errno<error::Enter>,
93 >,
94>;
95
96type Mapping = map::Map<kernel::Errno<error::Map>>;
97type Unmap = map::Failure<kernel::Errno<error::Unmap>>;
98
99type Admission = prepare::Rejection<
100 kernel::Errno<error::Register<24>>,
101 kernel::Errno<error::Register<13>>,
102 kernel::Errno<error::Register<25>>,
103>;
104
105type Host<C> = <<C as Context>::Token as token::Codec>::Context;
106type Update = kernel::Errno<error::Register<6>>;
107type Cause<C> = <Host<C> as probe::Build<Update>>::Primary;
108type Removal<C> = <Host<C> as probe::Build<Update>>::Removed;
109type Retained<C> = Resources<<C as Context>::Token, <C as Context>::Layout, Cause<C>>;
110type Recovery<C> =
111 Result<Cause<C>, Recover<<C as Context>::Token, <C as Context>::Layout, Cause<C>>>;
112type Removed<C> = Result<
113 (Removal<C>, sq::Fixed),
114 Released<<C as Context>::Token, <C as Context>::Layout, Removal<C>>,
115>;
116type Created<C> = Failure<
117 <Ring<<C as Context>::Token> as create::Create>::Setup,
118 <Ring<<C as Context>::Token> as create::Create>::Map,
119 Cause<C>,
120 Retained<C>,
121 Removed<C>,
122>;
123
124type Built<C, G> = (
125 Engine<C>,
126 buffers::raw::Context<<C as Context>::Layout>,
127 <Uring as permit::Source>::Queue<<C as Config<G>>::Key, <C as Config<G>>::Index>,
128);
129
130mod raw;