Skip to main content

dope_uring/
lib.rs

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;