netstack3_datagram/
tx_metadata.rs1use derivative::Derivative;
8use net_types::ip::{GenericOverIp, Ip};
9use netstack3_base::{ChecksumOffloadResult, WeakDeviceIdentifier};
10
11use crate::internal::datagram::{DatagramSocketSpec, IpExt};
12
13#[derive(Derivative, GenericOverIp)]
15#[generic_over_ip(I, Ip)]
16#[derivative(Debug(bound = ""))]
17pub struct TxMetadata<I: IpExt, D: WeakDeviceIdentifier, S: DatagramSocketSpec> {
18 socket: S::WeakSocketId<I, D>,
19 _send_token: S::SendToken,
20 checksum_offload_result: Option<ChecksumOffloadResult>,
21}
22
23impl<I: IpExt, D: WeakDeviceIdentifier, S: DatagramSocketSpec> TxMetadata<I, D, S> {
24 pub(crate) fn new(socket: &S::SocketId<I, D>, send_token: S::SendToken) -> Self {
26 Self {
27 socket: S::downgrade_socket_id(socket),
28 _send_token: send_token,
29 checksum_offload_result: None,
30 }
31 }
32
33 pub fn socket(&self) -> &S::WeakSocketId<I, D> {
35 &self.socket
36 }
37
38 pub fn checksum_offload_result(&self) -> Option<ChecksumOffloadResult> {
40 self.checksum_offload_result.clone()
41 }
42
43 pub fn set_checksum_offload_result(&mut self, result: Option<ChecksumOffloadResult>) {
45 self.checksum_offload_result = result;
46 }
47}
48
49#[cfg(any(test, feature = "testutils"))]
50impl<I: IpExt, D: WeakDeviceIdentifier, S: DatagramSocketSpec> PartialEq for TxMetadata<I, D, S> {
51 fn eq(&self, other: &Self) -> bool {
52 core::ptr::eq(self, other)
56 }
57}