netstack3_device/
blackhole.rs1use netstack3_base::{ChecksumOffloadSpec, Device, NeverBuffer};
8
9use crate::internal::base::{BlackholeDeviceCounters, DeviceReceiveFrameSpec};
10use crate::internal::id::{BaseDeviceId, BasePrimaryDeviceId, BaseWeakDeviceId};
11use crate::internal::queue::DeviceBufferSpec;
12use crate::internal::queue::tx::TxBufferAllocator;
13use crate::internal::state::DeviceStateSpec;
14
15pub type BlackholeWeakDeviceId<BT> = BaseWeakDeviceId<BlackholeDevice, BT>;
22
23pub type BlackholeDeviceId<BT> = BaseDeviceId<BlackholeDevice, BT>;
29
30pub type BlackholePrimaryDeviceId<BT> = BasePrimaryDeviceId<BlackholeDevice, BT>;
32
33pub struct BlackholeDeviceState {}
35
36#[derive(Copy, Clone)]
38pub enum BlackholeDevice {}
39
40impl Device for BlackholeDevice {}
41
42impl TxBufferAllocator<NeverBuffer> for () {
43 type Error = ();
44
45 fn alloc(&mut self, _len: usize, _qlen: usize) -> Result<NeverBuffer, ()> {
46 Err(())
47 }
48}
49
50impl<BT> DeviceBufferSpec<BT> for BlackholeDevice {
51 type TxBuffer = NeverBuffer;
52 type TxAllocator = ();
53}
54
55impl DeviceStateSpec for BlackholeDevice {
56 type State<BT: crate::DeviceLayerTypes> = BlackholeDeviceState;
57
58 type External<BT: crate::DeviceLayerTypes> = BT::BlackholeDeviceState;
59
60 type CreationProperties = ();
61
62 type Counters = BlackholeDeviceCounters;
63
64 type TimerId<D: netstack3_base::WeakDeviceIdentifier> = !;
65
66 fn new_device_state<
67 CC: netstack3_base::CoreTimerContext<Self::TimerId<CC::WeakDeviceId>, BC>
68 + netstack3_base::DeviceIdContext<Self>,
69 BC: crate::DeviceLayerTypes + netstack3_base::TimerContext,
70 >(
71 _bindings_ctx: &mut BC,
72 _self_id: CC::WeakDeviceId,
73 _properties: Self::CreationProperties,
74 _tx_allocator: <Self as DeviceBufferSpec<BC>>::TxAllocator,
75 ) -> Self::State<BC>
76 where
77 Self: DeviceBufferSpec<BC>,
78 {
79 BlackholeDeviceState {}
80 }
81
82 const IS_LOOPBACK: bool = false;
83
84 const DEBUG_TYPE: &'static str = "Blackhole";
85
86 fn tx_offload_spec<BT: crate::DeviceLayerTypes>(
87 _state: &Self::State<BT>,
88 ) -> Option<ChecksumOffloadSpec> {
89 None
90 }
91}
92
93impl DeviceReceiveFrameSpec for BlackholeDevice {
94 type FrameMetadata<D> = !;
97}