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