dope_core/driver/
control.rs1use std::io;
2use std::os::fd::BorrowedFd;
3
4use crate::backend::Backend;
5use crate::backend::ops::control::ControlBackend;
6
7use super::token::Token;
8use super::{DriverContext, OutboundReservation, PushError};
9
10pub trait ContextControl {
11 fn prepare_drop(&mut self);
12 unsafe fn register_shutdown_fd(&mut self, fd: BorrowedFd<'_>) -> io::Result<()>;
15 fn reserve_outbound(&mut self, count: u32) -> io::Result<OutboundReservation>;
16 fn reserve_route(&mut self, id: u8) -> bool;
17 fn release_route(&mut self, id: u8);
18 fn poison_route(&mut self, id: u8);
19 fn quiesce(&mut self, targets: &[Token]) -> bool;
20 fn set(
21 &mut self,
22 fixed_idx: u32,
23 level: u32,
24 optname: u32,
25 value: i32,
26 ) -> Result<(), PushError>;
27}
28
29impl ContextControl for DriverContext<'_, '_> {
30 fn prepare_drop(&mut self) {
31 <Backend as ControlBackend>::prepare_drop(self.backend());
32 }
33
34 unsafe fn register_shutdown_fd(&mut self, fd: BorrowedFd<'_>) -> io::Result<()> {
35 unsafe { <Backend as ControlBackend>::register_shutdown_fd(self.backend(), fd) }
36 }
37
38 fn reserve_outbound(&mut self, count: u32) -> io::Result<OutboundReservation> {
39 <Backend as ControlBackend>::reserve_outbound(self.backend(), count)
40 }
41
42 fn reserve_route(&mut self, id: u8) -> bool {
43 <Backend as ControlBackend>::reserve_route(self.backend(), id)
44 }
45
46 fn release_route(&mut self, id: u8) {
47 <Backend as ControlBackend>::release_route(self.backend(), id);
48 }
49
50 fn poison_route(&mut self, id: u8) {
51 <Backend as ControlBackend>::poison_route(self.backend(), id);
52 }
53
54 fn quiesce(&mut self, targets: &[Token]) -> bool {
55 <Backend as ControlBackend>::quiesce(self.backend(), targets)
56 }
57
58 fn set(
59 &mut self,
60 fixed_idx: u32,
61 level: u32,
62 optname: u32,
63 value: i32,
64 ) -> Result<(), PushError> {
65 <Backend as ControlBackend>::set(self.backend(), fixed_idx, level, optname, value)
66 }
67}