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