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            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;