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