pub struct Descriptor { /* private fields */ }Expand description
高层描述符
封装 XdpDesc 并添加所有权元数据。
- index: 帧索引(通过 addr 计算)
- generation: 代际号(ABA 防护)
- owner: 所有者 ID(队列/Worker)
- desc_type: 语义类型
Implementations§
Source§impl Descriptor
impl Descriptor
Sourcepub fn new(
xdp: XdpDesc,
index: u32,
owner: u16,
generation: u16,
desc_type: DescriptorType,
) -> Self
pub fn new( xdp: XdpDesc, index: u32, owner: u16, generation: u16, desc_type: DescriptorType, ) -> Self
创建新的描述符
Sourcepub fn from_xdp(
xdp: XdpDesc,
owner: u16,
generation: u16,
frame_shift: u32,
) -> Result<Self>
pub fn from_xdp( xdp: XdpDesc, owner: u16, generation: u16, frame_shift: u32, ) -> Result<Self>
从内核描述符创建(自动派生 index,fail-closed)
xdp.addr >> frame_shift 必须落入 20-bit frame index 域(≤ MAX_FRAME_INDEX)。
frame_shift 由调用方从 DescriptorEngine::frame_shift 获取,
保证与引擎实际帧移位一致,杜绝硬编码 >> 12 在非 4096 帧大小下的索引坍塌。
§返回
Ok(Self)- 帧索引合法的描述符Err(DescriptorError::OutOfRange)-addr >> frame_shift超出 20-bit 帧索引域; 静默as u32截断会丢弃高 32 位并指向错误帧(甚至回绕到帧 0), 故构造期拒绝(fail-closed,参照DescriptorEngine::allocate的对称语义)
Sourcepub fn generation(&self) -> u16
pub fn generation(&self) -> u16
获取代际号
Sourcepub fn descriptor_type(&self) -> DescriptorType
pub fn descriptor_type(&self) -> DescriptorType
获取描述符类型
Sourcepub fn set_generation(&mut self, new_generation: u16)
pub fn set_generation(&mut self, new_generation: u16)
设置代际号
Trait Implementations§
Source§impl Clone for Descriptor
impl Clone for Descriptor
Source§fn clone(&self) -> Descriptor
fn clone(&self) -> Descriptor
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for Descriptor
Source§impl Debug for Descriptor
impl Debug for Descriptor
Source§impl Default for Descriptor
impl Default for Descriptor
impl Eq for Descriptor
Source§impl PartialEq for Descriptor
impl PartialEq for Descriptor
impl StructuralPartialEq for Descriptor
Auto Trait Implementations§
impl Freeze for Descriptor
impl RefUnwindSafe for Descriptor
impl Send for Descriptor
impl Sync for Descriptor
impl Unpin for Descriptor
impl UnsafeUnpin for Descriptor
impl UnwindSafe for Descriptor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.