pub struct ForwardedPacket<I: IpExt, B> { /* private fields */ }
Expand description
An incoming IP packet that is being forwarded.
Implementations§
Source§impl<I: IpExt, B: BufferMut> ForwardedPacket<I, B>
impl<I: IpExt, B: BufferMut> ForwardedPacket<I, B>
Sourcepub fn new(
src_addr: I::Addr,
dst_addr: I::Addr,
protocol: I::Proto,
meta: ParseMetadata,
buffer: B,
) -> Self
pub fn new( src_addr: I::Addr, dst_addr: I::Addr, protocol: I::Proto, meta: ParseMetadata, buffer: B, ) -> Self
Create a new ForwardedPacket
from its IP header fields and payload.
meta
is used to revert buffer
back to the IP header for further
serialization, and to mark where the transport header starts in
buffer
. It must have originated from a previously parsed IP packet
on buffer
.
Sourcepub fn into_buffer(self) -> B
pub fn into_buffer(self) -> B
Discard the metadata carried by the ForwardedPacket
and return the
inner buffer.
The returned buffer is guaranteed to contain a valid IP frame, the start of the buffer points at the start of the IP header.
Trait Implementations§
Source§impl<I: IpExt, B, IpType> GenericOverIp<IpType> for ForwardedPacket<I, B>
impl<I: IpExt, B, IpType> GenericOverIp<IpType> for ForwardedPacket<I, B>
Source§type Type = ForwardedPacket<IpType, B>
type Type = ForwardedPacket<IpType, B>
The type of
Self
when its IP-generic parameter is replaced with the
type NewIp
.Source§impl<I: IpExt, B: BufferMut> IpPacket<I> for ForwardedPacket<I, B>
impl<I: IpExt, B: BufferMut> IpPacket<I> for ForwardedPacket<I, B>
Source§type TransportPacket<'a> = &'a ForwardedPacket<I, B>
where
Self: 'a
type TransportPacket<'a> = &'a ForwardedPacket<I, B> where Self: 'a
The type that provides access to transport-layer header inspection, if a
transport header is contained in the body of the IP packet.
Source§type TransportPacketMut<'a> = Option<ParsedTransportHeaderMut<'a, I>>
where
Self: 'a
type TransportPacketMut<'a> = Option<ParsedTransportHeaderMut<'a, I>> where Self: 'a
The type that provides access to transport-layer header modification, if a
transport header is contained in the body of the IP packet.
Source§fn set_src_addr(&mut self, addr: I::Addr)
fn set_src_addr(&mut self, addr: I::Addr)
Sets the source IP address of the packet.
Source§fn set_dst_addr(&mut self, addr: I::Addr)
fn set_dst_addr(&mut self, addr: I::Addr)
Sets the destination IP address of the packet.
Source§fn maybe_transport_packet(&self) -> Self::TransportPacket<'_>
fn maybe_transport_packet(&self) -> Self::TransportPacket<'_>
Returns a type that provides access to the transport-layer packet contained
in the body of the IP packet, if one exists. Read more
Source§fn transport_packet_mut(&mut self) -> Self::TransportPacketMut<'_>
fn transport_packet_mut(&mut self) -> Self::TransportPacketMut<'_>
Returns a type that provides the ability to modify the transport-layer
packet contained in the body of the IP packet, if one exists. Read more
Source§impl<I: IpExt, B: BufferMut> MaybeTransportPacket for ForwardedPacket<I, B>
impl<I: IpExt, B: BufferMut> MaybeTransportPacket for ForwardedPacket<I, B>
Source§fn transport_packet_data(&self) -> Option<TransportPacketData>
fn transport_packet_data(&self) -> Option<TransportPacketData>
Optionally returns a type that provides access to this transport-layer
packet.
Source§impl<I: IpExt, B: BufferMut> Serializer for ForwardedPacket<I, B>
impl<I: IpExt, B: BufferMut> Serializer for ForwardedPacket<I, B>
Source§type Buffer = <B as Serializer>::Buffer
type Buffer = <B as Serializer>::Buffer
The type of buffers returned from serialization methods on this trait.
Source§fn serialize<G: GrowBufferMut, P: BufferProvider<Self::Buffer, G>>(
self,
outer: PacketConstraints,
provider: P,
) -> Result<G, (SerializeError<P::Error>, Self)>
fn serialize<G: GrowBufferMut, P: BufferProvider<Self::Buffer, G>>( self, outer: PacketConstraints, provider: P, ) -> Result<G, (SerializeError<P::Error>, Self)>
Serializes this
Serializer
, producing a buffer. Read moreSource§fn serialize_new_buf<BB: ReusableBuffer, A: BufferAlloc<BB>>(
&self,
outer: PacketConstraints,
alloc: A,
) -> Result<BB, SerializeError<A::Error>>
fn serialize_new_buf<BB: ReusableBuffer, A: BufferAlloc<BB>>( &self, outer: PacketConstraints, alloc: A, ) -> Result<BB, SerializeError<A::Error>>
Serializes the data into a new buffer without consuming
self
. Read more§fn serialize_vec(
self,
outer: PacketConstraints,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Infallible>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_vec(
self,
outer: PacketConstraints,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Infallible>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
, allocating a Buf<Vec<u8>>
if the
contained buffer isn’t large enough. Read more§fn serialize_no_alloc(
self,
outer: PacketConstraints,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_no_alloc(
self,
outer: PacketConstraints,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
, failing if the existing buffer is not
large enough. Read more§fn serialize_outer<B, P>(
self,
provider: P,
) -> Result<B, (SerializeError<<P as BufferProvider<Self::Buffer, B>>::Error>, Self)>where
B: GrowBufferMut,
P: BufferProvider<Self::Buffer, B>,
fn serialize_outer<B, P>(
self,
provider: P,
) -> Result<B, (SerializeError<<P as BufferProvider<Self::Buffer, B>>::Error>, Self)>where
B: GrowBufferMut,
P: BufferProvider<Self::Buffer, B>,
Serializes this
Serializer
as the outermost packet. Read more§fn serialize_vec_outer(
self,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Infallible>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_vec_outer(
self,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Infallible>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
as the outermost packet, allocating a
Buf<Vec<u8>>
if the contained buffer isn’t large enough. Read more§fn serialize_no_alloc_outer(
self,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_no_alloc_outer(
self,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
as the outermost packet, failing if the
existing buffer is not large enough. Read more§fn encapsulate<B>(self, outer: B) -> Nested<Self, B>
fn encapsulate<B>(self, outer: B) -> Nested<Self, B>
§fn with_size_limit(self, limit: usize) -> Nested<Self, LimitedSizePacketBuilder>
fn with_size_limit(self, limit: usize) -> Nested<Self, LimitedSizePacketBuilder>
Creates a new
Serializer
which will enforce a size limit. Read moreimpl<I: IpExt, B> StructuralPartialEq for ForwardedPacket<I, B>
Auto Trait Implementations§
impl<I, B> Freeze for ForwardedPacket<I, B>
impl<I, B> RefUnwindSafe for ForwardedPacket<I, B>
impl<I, B> Send for ForwardedPacket<I, B>where
B: Send,
impl<I, B> Sync for ForwardedPacket<I, B>where
B: Sync,
impl<I, B> Unpin for ForwardedPacket<I, B>
impl<I, B> UnwindSafe for ForwardedPacket<I, B>
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<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
§impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<CC, BC, Meta> RecvFrameContext<Meta, BC> for CCwhere
Meta: ReceivableFrameMeta<CC, BC>,
impl<CC, BC, Meta> RecvFrameContext<Meta, BC> for CCwhere
Meta: ReceivableFrameMeta<CC, BC>,
Source§impl<CC, BC, Meta> SendFrameContext<BC, Meta> for CCwhere
Meta: SendableFrameMeta<CC, BC>,
impl<CC, BC, Meta> SendFrameContext<BC, Meta> for CCwhere
Meta: SendableFrameMeta<CC, BC>,
Source§fn send_frame<S>(
&mut self,
bindings_ctx: &mut BC,
metadata: Meta,
frame: S,
) -> Result<(), ErrorAndSerializer<SendFrameErrorReason, S>>where
S: Serializer,
<S as Serializer>::Buffer: BufferMut,
fn send_frame<S>(
&mut self,
bindings_ctx: &mut BC,
metadata: Meta,
frame: S,
) -> Result<(), ErrorAndSerializer<SendFrameErrorReason, S>>where
S: Serializer,
<S as Serializer>::Buffer: BufferMut,
Send a frame. Read more
Source§impl<Id, CC, BC> TimerHandler<BC, Id> for CCwhere
BC: TimerBindingsTypes,
Id: HandleableTimer<CC, BC>,
impl<Id, CC, BC> TimerHandler<BC, Id> for CCwhere
BC: TimerBindingsTypes,
Id: HandleableTimer<CC, BC>,
Source§fn handle_timer(
&mut self,
bindings_ctx: &mut BC,
dispatch: Id,
timer: <BC as TimerBindingsTypes>::UniqueTimerId,
)
fn handle_timer( &mut self, bindings_ctx: &mut BC, dispatch: Id, timer: <BC as TimerBindingsTypes>::UniqueTimerId, )
Handle a timer firing. Read more