1pub 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}