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};
36pub(crate) use observed::Observed;
37use reactor::{
38    buffers,
39    ring::{Recover, Released, Resources},
40    sq,
41};
42pub(crate) use reactor::{register::Register, ring::Ring};
43pub(crate) use sockets::Opened;
44pub use uring::Uring;
45
46use crate::{
47    driver::{
48        Closing, Turn,
49        poll::Poll,
50        token::Encoded,
51        tuning::{State, Table},
52    },
53    reactor::{
54        buffers::{Canary, Cleanup, Entry, Payload, Producer, Selected},
55        cq,
56        cq::packet,
57        op,
58        ring::{Accepted, Enter, Outcome, Range, Ready, Session, Waiting},
59        sq::Borrowed,
60        types,
61    },
62    sockets::{Control, Installer, Operation},
63    system::{Cpus, Fifo, Timer},
64};
65
66mod reactor;
67
68mod driver;
69
70mod error;
71mod observed;
72mod system;
73
74mod sockets;
75
76type BufferBuild<L, P> = buffers::Build<L, P>;
77
78type Primary = create::Primary<
79    create::Cause<kernel::Errno<error::Setup>, kernel::Errno<error::Map>>,
80    kernel::Errno<error::Register<20>>,
81    kernel::Errno<error::Register<22>>,
82>;
83type Fault<T> = create::Failure<
84    map::Storage<kernel::Errno<error::Unmap>>,
85    probe::Cause<
86        <<T as Codec>::Context as host::Context>::Probe,
87        Observed<T>,
88        kernel::Errno<error::Enter>,
89    >,
90>;
91
92type Mapping = map::Map<kernel::Errno<error::Map>>;
93type Unmap = map::Failure<kernel::Errno<error::Unmap>>;
94
95type Admission = prepare::Rejection<
96    kernel::Errno<error::Register<24>>,
97    kernel::Errno<error::Register<13>>,
98    kernel::Errno<error::Register<25>>,
99>;
100
101type Host<C> = <<C as Context>::Token as token::Codec>::Context;
102type Update = kernel::Errno<error::Register<6>>;
103type Cause<C> = <Host<C> as probe::Build<Update>>::Primary;
104type Removal<C> = <Host<C> as probe::Build<Update>>::Removed;
105type Retained<C> = Resources<<C as Context>::Token, <C as Context>::Layout, Cause<C>>;
106type Recovery<C> =
107    Result<Cause<C>, Recover<<C as Context>::Token, <C as Context>::Layout, Cause<C>>>;
108type Removed<C> = Result<
109    (Removal<C>, sq::Fixed),
110    Released<<C as Context>::Token, <C as Context>::Layout, Removal<C>>,
111>;
112type Created<C> = Failure<
113    <Ring<<C as Context>::Token> as create::Create>::Setup,
114    <Ring<<C as Context>::Token> as create::Create>::Map,
115    Cause<C>,
116    Retained<C>,
117    Removed<C>,
118>;
119
120type Built<C, G> = (
121    Engine<C>,
122    buffers::raw::Context<<C as Context>::Layout>,
123    <Uring as permit::Source>::Queue<<C as Config<G>>::Key, <C as Config<G>>::Index>,
124);
125
126mod raw;