efiudp.h revision 1.1 1 /* $NetBSD: efiudp.h,v 1.1 2014/04/01 16:16:07 jakllsch Exp $ */
2
3 #ifndef _EFI_UDP_H
4 #define _EFI_UDP_H
5
6
7 /*++
8 Copyright (c) 2013 Intel Corporation
9
10 --*/
11
12 #define EFI_UDP4_SERVICE_BINDING_PROTOCOL \
13 { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
14
15 #define EFI_UDP4_PROTOCOL \
16 { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
17
18 #define EFI_UDP6_SERVICE_BINDING_PROTOCOL \
19 { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} }
20
21 #define EFI_UDP6_PROTOCOL \
22 { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} }
23
24 INTERFACE_DECL(_EFI_UDP4);
25 INTERFACE_DECL(_EFI_UDP6);
26
27 typedef struct {
28 BOOLEAN AcceptBroadcast;
29 BOOLEAN AcceptPromiscuous;
30 BOOLEAN AcceptAnyPort;
31 BOOLEAN AllowDuplicatePort;
32 UINT8 TypeOfService;
33 UINT8 TimeToLive;
34 BOOLEAN DoNotFragment;
35 UINT32 ReceiveTimeout;
36 UINT32 TransmitTimeout;
37 BOOLEAN UseDefaultAddress;
38 EFI_IPv4_ADDRESS StationAddress;
39 EFI_IPv4_ADDRESS SubnetMask;
40 UINT16 StationPort;
41 EFI_IPv4_ADDRESS RemoteAddress;
42 UINT16 RemotePort;
43 } EFI_UDP4_CONFIG_DATA;
44
45 typedef
46 EFI_STATUS
47 (EFIAPI *EFI_UDP4_GET_MODE_DATA) (
48 IN struct _EFI_UDP4 *This,
49 OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL,
50 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
51 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
52 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
53 );
54
55 typedef
56 EFI_STATUS
57 (EFIAPI *EFI_UDP4_CONFIGURE) (
58 IN struct _EFI_UDP4 *This,
59 IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
60 );
61
62 typedef
63 EFI_STATUS
64 (EFIAPI *EFI_UDP4_GROUPS) (
65 IN struct _EFI_UDP4 *This,
66 IN BOOLEAN JoinFlag,
67 IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
68 );
69
70 typedef
71 EFI_STATUS
72 (EFIAPI *EFI_UDP4_ROUTES) (
73 IN struct _EFI_UDP4 *This,
74 IN BOOLEAN DeleteRoute,
75 IN EFI_IPv4_ADDRESS *SubnetAddress,
76 IN EFI_IPv4_ADDRESS *SubnetMask,
77 IN EFI_IPv4_ADDRESS *GatewayAddress
78 );
79
80 #define EFI_NETWORK_UNREACHABLE EFIERR(100)
81 #define EFI_HOST_UNREACHABLE EFIERR(101)
82 #define EFI_PROTOCOL_UNREACHABLE EFIERR(102)
83 #define EFI_PORT_UNREACHABLE EFIERR(103)
84
85 typedef struct {
86 EFI_IPv4_ADDRESS SourceAddress;
87 UINT16 SourcePort;
88 EFI_IPv4_ADDRESS DestinationAddress;
89 UINT16 DestinationPort;
90 } EFI_UDP4_SESSION_DATA;
91
92 typedef struct {
93 UINT32 FragmentLength;
94 VOID *FragmentBuffer;
95 } EFI_UDP4_FRAGMENT_DATA;
96
97 typedef struct {
98 EFI_TIME TimeStamp;
99 EFI_EVENT RecycleSignal;
100 EFI_UDP4_SESSION_DATA UdpSession;
101 UINT32 DataLength;
102 UINT32 FragmentCount;
103 EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
104 } EFI_UDP4_RECEIVE_DATA;
105
106 typedef struct {
107 EFI_UDP4_SESSION_DATA *UdpSessionData;
108 EFI_IPv4_ADDRESS *GatewayAddress;
109 UINT32 DataLength;
110 UINT32 FragmentCount;
111 EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
112 } EFI_UDP4_TRANSMIT_DATA;
113
114 typedef struct {
115 EFI_EVENT Event;
116 EFI_STATUS Status;
117 union {
118 EFI_UDP4_RECEIVE_DATA *RxData;
119 EFI_UDP4_TRANSMIT_DATA *TxData;
120 } Packet;
121 } EFI_UDP4_COMPLETION_TOKEN;
122
123 typedef
124 EFI_STATUS
125 (EFIAPI *EFI_UDP4_TRANSMIT) (
126 IN struct _EFI_UDP4 *This,
127 IN EFI_UDP4_COMPLETION_TOKEN *Token
128 );
129
130 typedef
131 EFI_STATUS
132 (EFIAPI *EFI_UDP4_RECEIVE) (
133 IN struct _EFI_UDP4 *This,
134 IN EFI_UDP4_COMPLETION_TOKEN *Token
135 );
136
137 typedef
138 EFI_STATUS
139 (EFIAPI *EFI_UDP4_CANCEL)(
140 IN struct _EFI_UDP4 *This,
141 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
142 );
143
144 typedef
145 EFI_STATUS
146 (EFIAPI *EFI_UDP4_POLL) (
147 IN struct _EFI_UDP4 *This
148 );
149
150 typedef struct _EFI_UDP4 {
151 EFI_UDP4_GET_MODE_DATA GetModeData;
152 EFI_UDP4_CONFIGURE Configure;
153 EFI_UDP4_GROUPS Groups;
154 EFI_UDP4_ROUTES Routes;
155 EFI_UDP4_TRANSMIT Transmit;
156 EFI_UDP4_RECEIVE Receive;
157 EFI_UDP4_CANCEL Cancel;
158 EFI_UDP4_POLL Poll;
159 } EFI_UDP4;
160
161 typedef struct {
162 BOOLEAN AcceptPromiscuous;
163 BOOLEAN AcceptAnyPort;
164 BOOLEAN AllowDuplicatePort;
165 UINT8 TrafficClass;
166 UINT8 HopLimit;
167 UINT32 ReceiveTimeout;
168 UINT32 TransmitTimeout;
169 EFI_IPv6_ADDRESS StationAddress;
170 UINT16 StationPort;
171 EFI_IPv6_ADDRESS RemoteAddress;
172 UINT16 RemotePort;
173 } EFI_UDP6_CONFIG_DATA;
174
175 typedef
176 EFI_STATUS
177 (EFIAPI *EFI_UDP6_GET_MODE_DATA) (
178 IN struct _EFI_UDP6 *This,
179 OUT EFI_UDP6_CONFIG_DATA *Udp6ConfigData OPTIONAL,
180 OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
181 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
182 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
183 );
184
185 typedef
186 EFI_STATUS
187 (EFIAPI *EFI_UDP6_CONFIGURE) (
188 IN struct _EFI_UDP6 *This,
189 IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
190 );
191
192 typedef
193 EFI_STATUS
194 (EFIAPI *EFI_UDP6_GROUPS) (
195 IN struct _EFI_UDP6 *This,
196 IN BOOLEAN JoinFlag,
197 IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
198 );
199
200 typedef struct {
201 EFI_IPv6_ADDRESS SourceAddress;
202 UINT16 SourcePort;
203 EFI_IPv6_ADDRESS DestinationAddress;
204 UINT16 DestinationPort;
205 } EFI_UDP6_SESSION_DATA;
206
207 typedef struct {
208 UINT32 FragmentLength;
209 VOID *FragmentBuffer;
210 } EFI_UDP6_FRAGMENT_DATA;
211
212 typedef struct {
213 EFI_TIME TimeStamp;
214 EFI_EVENT RecycleSignal;
215 EFI_UDP6_SESSION_DATA UdpSession;
216 UINT32 DataLength;
217 UINT32 FragmentCount;
218 EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
219 } EFI_UDP6_RECEIVE_DATA;
220
221 typedef struct {
222 EFI_UDP6_SESSION_DATA *UdpSessionData;
223 UINT32 DataLength;
224 UINT32 FragmentCount;
225 EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
226 } EFI_UDP6_TRANSMIT_DATA;
227
228 typedef struct {
229 EFI_EVENT Event;
230 EFI_STATUS Status;
231 union {
232 EFI_UDP6_RECEIVE_DATA *RxData;
233 EFI_UDP6_TRANSMIT_DATA *TxData;
234 } Packet;
235 } EFI_UDP6_COMPLETION_TOKEN;
236
237 typedef
238 EFI_STATUS
239 (EFIAPI *EFI_UDP6_TRANSMIT) (
240 IN struct _EFI_UDP6 *This,
241 IN EFI_UDP6_COMPLETION_TOKEN *Token
242 );
243
244 typedef
245 EFI_STATUS
246 (EFIAPI *EFI_UDP6_RECEIVE) (
247 IN struct _EFI_UDP6 *This,
248 IN EFI_UDP6_COMPLETION_TOKEN *Token
249 );
250
251 typedef
252 EFI_STATUS
253 (EFIAPI *EFI_UDP6_CANCEL)(
254 IN struct _EFI_UDP6 *This,
255 IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
256 );
257
258 typedef
259 EFI_STATUS
260 (EFIAPI *EFI_UDP6_POLL) (
261 IN struct _EFI_UDP6 *This
262 );
263
264 typedef struct _EFI_UDP6 {
265 EFI_UDP6_GET_MODE_DATA GetModeData;
266 EFI_UDP6_CONFIGURE Configure;
267 EFI_UDP6_GROUPS Groups;
268 EFI_UDP6_TRANSMIT Transmit;
269 EFI_UDP6_RECEIVE Receive;
270 EFI_UDP6_CANCEL Cancel;
271 EFI_UDP6_POLL Poll;
272 } EFI_UDP6;
273
274 #endif /* _EFI_UDP_H */
275