r_efi/protocols/
udp4.rs

1//! User Datagram Protocol V4
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    0x3ad9df29,
7    0x4501,
8    0x478d,
9    0xb1,
10    0xf8,
11    &[0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3],
12);
13
14pub const SERVICE_BINDING_PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
15    0x83f01464,
16    0x99bd,
17    0x45e5,
18    0xb3,
19    0x83,
20    &[0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6],
21);
22
23#[repr(C)]
24#[derive(Clone, Copy, Debug)]
25pub struct ConfigData {
26    pub accept_broadcast: crate::base::Boolean,
27    pub accept_promiscuous: crate::base::Boolean,
28    pub accept_any_port: crate::base::Boolean,
29    pub allow_duplicate_port: crate::base::Boolean,
30    pub type_of_service: u8,
31    pub time_to_live: u8,
32    pub do_not_fragment: crate::base::Boolean,
33    pub receive_timeout: u32,
34    pub transmit_timeout: u32,
35    pub use_default_address: crate::base::Boolean,
36    pub station_address: crate::base::Ipv4Address,
37    pub subnet_mask: crate::base::Ipv4Address,
38    pub station_port: u16,
39    pub remote_address: crate::base::Ipv4Address,
40    pub remote_port: u16,
41}
42
43#[repr(C)]
44#[derive(Clone, Copy)]
45pub struct SessionData {
46    pub source_address: crate::base::Ipv4Address,
47    pub source_port: u16,
48    pub destination_address: crate::base::Ipv4Address,
49    pub destination_port: u16,
50}
51
52#[repr(C)]
53#[derive(Clone, Copy, Debug)]
54pub struct FragmentData {
55    pub fragment_length: u32,
56    pub fragment_buffer: *mut core::ffi::c_void,
57}
58
59#[repr(C)]
60#[derive(Clone, Copy)]
61pub struct ReceiveData<const N: usize = 0> {
62    pub time_stamp: crate::system::Time,
63    pub recycle_signal: crate::base::Event,
64    pub udp_session: SessionData,
65    pub data_length: u32,
66    pub fragment_count: u32,
67    pub fragment_table: [FragmentData; N],
68}
69
70#[repr(C)]
71#[derive(Clone, Copy)]
72pub struct TransmitData<const N: usize = 0> {
73    pub udp_session_data: *mut SessionData,
74    pub gateway_address: *mut crate::base::Ipv4Address,
75    pub data_length: u32,
76    pub fragment_count: u32,
77    pub fragment_table: [FragmentData; N],
78}
79
80#[repr(C)]
81#[derive(Clone, Copy)]
82pub union CompletionTokenPacket {
83    pub rx_data: *mut ReceiveData,
84    pub tx_data: *mut TransmitData,
85}
86
87#[repr(C)]
88#[derive(Clone, Copy)]
89pub struct CompletionToken {
90    pub event: crate::base::Event,
91    pub status: crate::base::Status,
92    pub packet: CompletionTokenPacket,
93}
94
95pub type ProtocolGetModeData = eficall! {fn(
96    *mut Protocol,
97    *mut ConfigData,
98    *mut crate::protocols::ip4::ModeData,
99    *mut crate::protocols::managed_network::ConfigData,
100    *mut crate::protocols::simple_network::Mode,
101) -> crate::base::Status};
102
103pub type ProtocolConfigure = eficall! {fn(
104    *mut Protocol,
105    *mut ConfigData,
106) -> crate::base::Status};
107
108pub type ProtocolGroups = eficall! {fn(
109    *mut Protocol,
110    crate::base::Boolean,
111    *mut crate::base::Ipv4Address,
112) -> crate::base::Status};
113
114pub type ProtocolRoutes = eficall! {fn(
115    *mut Protocol,
116    crate::base::Boolean,
117    *mut crate::base::Ipv4Address,
118    *mut crate::base::Ipv4Address,
119    *mut crate::base::Ipv4Address,
120) -> crate::base::Status};
121
122pub type ProtocolTransmit = eficall! {fn(
123    *mut Protocol,
124    *mut CompletionToken,
125) -> crate::base::Status};
126
127pub type ProtocolReceive = eficall! {fn(
128    *mut Protocol,
129    *mut CompletionToken,
130) -> crate::base::Status};
131
132pub type ProtocolCancel = eficall! {fn(
133    *mut Protocol,
134    *mut CompletionToken,
135) -> crate::base::Status};
136
137pub type ProtocolPoll = eficall! {fn(
138    *mut Protocol,
139) -> crate::base::Status};
140
141#[repr(C)]
142pub struct Protocol {
143    pub get_mode_data: ProtocolGetModeData,
144    pub configure: ProtocolConfigure,
145    pub groups: ProtocolGroups,
146    pub routes: ProtocolRoutes,
147    pub transmit: ProtocolTransmit,
148    pub receive: ProtocolReceive,
149    pub cancel: ProtocolCancel,
150    pub poll: ProtocolPoll,
151}