Enum nix::sys::socket::ControlMessage

source ·
#[non_exhaustive]
pub enum ControlMessage<'a> {
Show 14 variants ScmRights(&'a [RawFd]), ScmCredentials(&'a UnixCredentials), AlgSetIv(&'a [u8]), AlgSetOp(&'a c_int), AlgSetAeadAssoclen(&'a u32), UdpGsoSegments(&'a u16), Ipv4PacketInfo(&'a in_pktinfo), Ipv6PacketInfo(&'a in6_pktinfo), Ipv4Ttl(&'a c_int), Ipv6HopLimit(&'a c_int), RxqOvfl(&'a u32), TxTime(&'a u64), Ipv4Tos(&'a u8), Ipv6TClass(&'a i32),
}
Expand description

A type-safe zero-copy wrapper around a single control message, as used with sendmsg. More types may be added to this enum; do not exhaustively pattern-match it.

Further reading

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

ScmRights(&'a [RawFd])

A message of type SCM_RIGHTS, containing an array of file descriptors passed between processes.

See the description in the “Ancillary messages” section of the unix(7) man page.

Using multiple ScmRights messages for a single sendmsg call isn’t recommended since it causes platform-dependent behaviour: It might swallow all but the first ScmRights message or fail with EINVAL. Instead, you can put all fds to be passed into a single ScmRights message.

§

ScmCredentials(&'a UnixCredentials)

A message of type SCM_CREDENTIALS, containing the pid, uid and gid of a process connected to the socket.

This is similar to the socket option SO_PEERCRED, but requires a process to explicitly send its credentials. A process running as root is allowed to specify any credentials, while credentials sent by other processes are verified by the kernel.

For further information, please refer to the unix(7) man page.

§

AlgSetIv(&'a [u8])

Set IV for AF_ALG crypto API.

For further information, please refer to the documentation

§

AlgSetOp(&'a c_int)

Set crypto operation for AF_ALG crypto API. It may be one of ALG_OP_ENCRYPT or ALG_OP_DECRYPT

For further information, please refer to the documentation

§

AlgSetAeadAssoclen(&'a u32)

Set the length of associated authentication data (AAD) (applicable only to AEAD algorithms) for AF_ALG crypto API.

For further information, please refer to the documentation

§

UdpGsoSegments(&'a u16)

UDP GSO makes it possible for applications to generate network packets for a virtual MTU much greater than the real one. The length of the send data no longer matches the expected length on the wire. The size of the datagram payload as it should appear on the wire may be passed through this control message. Send buffer should consist of multiple fixed-size wire payloads following one by one, and the last, possibly smaller one.

§

Ipv4PacketInfo(&'a in_pktinfo)

Configure the sending addressing and interface for v4.

For further information, please refer to the ip(7) man page.

§

Ipv6PacketInfo(&'a in6_pktinfo)

Configure the sending addressing and interface for v6.

For further information, please refer to the ipv6(7) man page.

§

Ipv4Ttl(&'a c_int)

Configure the Time-to-Live for v4 traffic.

§

Ipv6HopLimit(&'a c_int)

Configure the hop limit for v6 multicast traffic.

Set the IPv6 hop limit for this message. The argument is an integer between 0 and 255. A value of -1 will set the hop limit to the route default if possible on the interface. Without this cmsg, packets sent with sendmsg have a hop limit of 1 and will not leave the local network. For further information, please refer to the ipv6(7) man page.

§

RxqOvfl(&'a u32)

SO_RXQ_OVFL indicates that an unsigned 32 bit value ancillary msg (cmsg) should be attached to received skbs indicating the number of packets dropped by the socket between the last received packet and this received packet.

§

TxTime(&'a u64)

Configure the transmission time of packets.

For further information, please refer to the tc-etf(8) man page.

§

Ipv4Tos(&'a u8)

Configure DSCP / IP TOS for outgoing v4 packets.

Further information can be found here.

§

Ipv6TClass(&'a i32)

Configure DSCP / IPv6 TCLASS for outgoing v6 packets.

Further information can be found here.

Trait Implementations§

source§

impl<'a> Clone for ControlMessage<'a>

source§

fn clone(&self) -> ControlMessage<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a> Debug for ControlMessage<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> PartialEq for ControlMessage<'a>

source§

fn eq(&self, other: &ControlMessage<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'a> Copy for ControlMessage<'a>

source§

impl<'a> Eq for ControlMessage<'a>

source§

impl<'a> StructuralPartialEq for ControlMessage<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for ControlMessage<'a>

§

impl<'a> RefUnwindSafe for ControlMessage<'a>

§

impl<'a> Send for ControlMessage<'a>

§

impl<'a> Sync for ControlMessage<'a>

§

impl<'a> Unpin for ControlMessage<'a>

§

impl<'a> UnwindSafe for ControlMessage<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.