r_efi/protocols/
udp6.rs

1//! User Datagram Protocol V6
2//!
3//! It provides simple packet-oriented services to transmit and receive UDP packets.
4
5pub const PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
6    0x4f948815,
7    0xb4b9,
8    0x43cb,
9    0x8a,
10    0x33,
11    &[0x90, 0xe0, 0x60, 0xb3, 0x49, 0x55],
12);
13
14pub const SERVICE_BINDING_PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
15    0x66ed4721,
16    0x3c98,
17    0x4d3e,
18    0x81,
19    0xe3,
20    &[0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54],
21);
22
23#[repr(C)]
24#[derive(Clone, Copy, Debug)]
25pub struct ConfigData {
26    pub accept_promiscuous: crate::base::Boolean,
27    pub accept_any_port: crate::base::Boolean,
28    pub allow_duplicate_port: crate::base::Boolean,
29    pub traffic_class: u8,
30    pub hop_limit: u8,
31    pub receive_timeout: u32,
32    pub transmit_timeout: u32,
33    pub station_address: crate::base::Ipv6Address,
34    pub station_port: u16,
35    pub remote_address: crate::base::Ipv6Address,
36    pub remote_port: u16,
37}
38
39#[repr(C)]
40#[derive(Clone, Copy)]
41pub struct SessionData {
42    pub source_address: crate::base::Ipv6Address,
43    pub source_port: u16,
44    pub destination_address: crate::base::Ipv6Address,
45    pub destination_port: u16,
46}
47
48#[repr(C)]
49#[derive(Clone, Copy, Debug)]
50pub struct FragmentData {
51    pub fragment_length: u32,
52    pub fragment_buffer: *mut core::ffi::c_void,
53}
54
55#[repr(C)]
56#[derive(Clone, Copy)]
57pub struct ReceiveData<const N: usize = 0> {
58    pub time_stamp: crate::system::Time,
59    pub recycle_signal: crate::base::Event,
60    pub udp_session: SessionData,
61    pub data_length: u32,
62    pub fragment_count: u32,
63    pub fragment_table: [FragmentData; N],
64}
65
66#[repr(C)]
67#[derive(Clone, Copy)]
68pub struct TransmitData<const N: usize = 0> {
69    pub udp_session_data: *mut SessionData,
70    pub data_length: u32,
71    pub fragment_count: u32,
72    pub fragment_table: [FragmentData; N],
73}
74
75#[repr(C)]
76#[derive(Clone, Copy)]
77pub union CompletionTokenPacket {
78    pub rx_data: *mut ReceiveData,
79    pub tx_data: *mut TransmitData,
80}
81
82#[repr(C)]
83#[derive(Clone, Copy)]
84pub struct CompletionToken {
85    pub event: crate::base::Event,
86    pub status: crate::base::Status,
87    pub packet: CompletionTokenPacket,
88}
89
90pub type ProtocolGetModeData = eficall! {fn(
91    *mut Protocol,
92    *mut ConfigData,
93    *mut crate::protocols::ip6::ModeData,
94    *mut crate::protocols::managed_network::ConfigData,
95    *mut crate::protocols::simple_network::Mode,
96) -> crate::base::Status};
97
98pub type ProtocolConfigure = eficall! {fn(
99    *mut Protocol,
100    *mut ConfigData,
101) -> crate::base::Status};
102
103pub type ProtocolGroups = eficall! {fn(
104    *mut Protocol,
105    crate::base::Boolean,
106    *mut crate::base::Ipv6Address,
107) -> crate::base::Status};
108
109pub type ProtocolTransmit = eficall! {fn(
110    *mut Protocol,
111    *mut CompletionToken,
112) -> crate::base::Status};
113
114pub type ProtocolReceive = eficall! {fn(
115    *mut Protocol,
116    *mut CompletionToken,
117) -> crate::base::Status};
118
119pub type ProtocolCancel = eficall! {fn(
120    *mut Protocol,
121    *mut CompletionToken,
122) -> crate::base::Status};
123
124pub type ProtocolPoll = eficall! {fn(
125    *mut Protocol,
126) -> crate::base::Status};
127
128#[repr(C)]
129pub struct Protocol {
130    pub get_mode_data: ProtocolGetModeData,
131    pub configure: ProtocolConfigure,
132    pub groups: ProtocolGroups,
133    pub transmit: ProtocolTransmit,
134    pub receive: ProtocolReceive,
135    pub cancel: ProtocolCancel,
136    pub poll: ProtocolPoll,
137}