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