1342742Stsoome/* $FreeBSD: stable/11/stand/efi/include/efiudp.h 346482 2019-04-21 04:26:02Z kevans $ */
2342742Stsoome#ifndef _EFI_UDP_H
3342742Stsoome#define _EFI_UDP_H
4342742Stsoome
5342742Stsoome
6342742Stsoome/*++
7342742StsoomeCopyright (c) 2013  Intel Corporation
8342742Stsoome
9342742Stsoome--*/
10342742Stsoome
11342742Stsoome#define EFI_UDP4_SERVICE_BINDING_PROTOCOL \
12342742Stsoome    { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
13342742Stsoome
14342742Stsoome#define EFI_UDP4_PROTOCOL \
15342742Stsoome    { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
16342742Stsoome
17342742Stsoome#define EFI_UDP6_SERVICE_BINDING_PROTOCOL \
18342742Stsoome    { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} }
19342742Stsoome
20342742Stsoome#define EFI_UDP6_PROTOCOL \
21342742Stsoome    { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} }
22342742Stsoome
23342742StsoomeINTERFACE_DECL(_EFI_UDP4);
24342742StsoomeINTERFACE_DECL(_EFI_UDP6);
25342742Stsoome
26342742Stsoometypedef struct {
27342742Stsoome    BOOLEAN          AcceptBroadcast;
28342742Stsoome    BOOLEAN          AcceptPromiscuous;
29342742Stsoome    BOOLEAN          AcceptAnyPort;
30342742Stsoome    BOOLEAN          AllowDuplicatePort;
31342742Stsoome    UINT8            TypeOfService;
32342742Stsoome    UINT8            TimeToLive;
33342742Stsoome    BOOLEAN          DoNotFragment;
34342742Stsoome    UINT32           ReceiveTimeout;
35342742Stsoome    UINT32           TransmitTimeout;
36342742Stsoome    BOOLEAN          UseDefaultAddress;
37342742Stsoome    EFI_IPv4_ADDRESS StationAddress;
38342742Stsoome    EFI_IPv4_ADDRESS SubnetMask;
39342742Stsoome    UINT16           StationPort;
40342742Stsoome    EFI_IPv4_ADDRESS RemoteAddress;
41342742Stsoome    UINT16           RemotePort;
42342742Stsoome} EFI_UDP4_CONFIG_DATA;
43342742Stsoome
44342742Stsoometypedef
45342742StsoomeEFI_STATUS
46342742Stsoome(EFIAPI *EFI_UDP4_GET_MODE_DATA) (
47342742Stsoome    IN struct _EFI_UDP4                 *This,
48342742Stsoome    OUT EFI_UDP4_CONFIG_DATA            *Udp4ConfigData OPTIONAL,
49342742Stsoome    OUT EFI_IP4_MODE_DATA               *Ip4ModeData    OPTIONAL,
50342742Stsoome    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
51342742Stsoome    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
52342742Stsoome    );
53342742Stsoome
54342742Stsoometypedef
55342742StsoomeEFI_STATUS
56342742Stsoome(EFIAPI *EFI_UDP4_CONFIGURE) (
57342742Stsoome    IN struct _EFI_UDP4     *This,
58342742Stsoome    IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
59342742Stsoome    );
60342742Stsoome
61342742Stsoometypedef
62342742StsoomeEFI_STATUS
63342742Stsoome(EFIAPI *EFI_UDP4_GROUPS) (
64342742Stsoome    IN struct _EFI_UDP4 *This,
65342742Stsoome    IN BOOLEAN          JoinFlag,
66342742Stsoome    IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
67342742Stsoome    );
68342742Stsoome
69342742Stsoometypedef
70342742StsoomeEFI_STATUS
71342742Stsoome(EFIAPI *EFI_UDP4_ROUTES) (
72342742Stsoome    IN struct _EFI_UDP4 *This,
73342742Stsoome    IN BOOLEAN          DeleteRoute,
74342742Stsoome    IN EFI_IPv4_ADDRESS *SubnetAddress,
75342742Stsoome    IN EFI_IPv4_ADDRESS *SubnetMask,
76342742Stsoome    IN EFI_IPv4_ADDRESS *GatewayAddress
77342742Stsoome    );
78342742Stsoome
79342742Stsoome#define EFI_NETWORK_UNREACHABLE  EFIERR(100)
80342742Stsoome#define EFI_HOST_UNREACHABLE     EFIERR(101)
81342742Stsoome#define EFI_PROTOCOL_UNREACHABLE EFIERR(102)
82342742Stsoome#define EFI_PORT_UNREACHABLE     EFIERR(103)
83342742Stsoome
84342742Stsoometypedef struct {
85342742Stsoome    EFI_IPv4_ADDRESS SourceAddress;
86342742Stsoome    UINT16           SourcePort;
87342742Stsoome    EFI_IPv4_ADDRESS DestinationAddress;
88342742Stsoome    UINT16           DestinationPort;
89342742Stsoome} EFI_UDP4_SESSION_DATA;
90342742Stsoome
91342742Stsoometypedef struct {
92342742Stsoome    UINT32 FragmentLength;
93342742Stsoome    VOID   *FragmentBuffer;
94342742Stsoome} EFI_UDP4_FRAGMENT_DATA;
95342742Stsoome
96342742Stsoometypedef struct {
97342742Stsoome    EFI_TIME               TimeStamp;
98342742Stsoome    EFI_EVENT              RecycleSignal;
99342742Stsoome    EFI_UDP4_SESSION_DATA  UdpSession;
100342742Stsoome    UINT32                 DataLength;
101342742Stsoome    UINT32                 FragmentCount;
102342742Stsoome    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
103342742Stsoome} EFI_UDP4_RECEIVE_DATA;
104342742Stsoome
105342742Stsoometypedef struct {
106342742Stsoome    EFI_UDP4_SESSION_DATA  *UdpSessionData;
107342742Stsoome    EFI_IPv4_ADDRESS       *GatewayAddress;
108342742Stsoome    UINT32                 DataLength;
109342742Stsoome    UINT32                 FragmentCount;
110342742Stsoome    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
111342742Stsoome} EFI_UDP4_TRANSMIT_DATA;
112342742Stsoome
113342742Stsoometypedef struct {
114342742Stsoome    EFI_EVENT                  Event;
115342742Stsoome    EFI_STATUS                 Status;
116342742Stsoome    union {
117342742Stsoome        EFI_UDP4_RECEIVE_DATA  *RxData;
118342742Stsoome	EFI_UDP4_TRANSMIT_DATA *TxData;
119342742Stsoome    }                          Packet;
120342742Stsoome} EFI_UDP4_COMPLETION_TOKEN;
121342742Stsoome
122342742Stsoometypedef
123342742StsoomeEFI_STATUS
124342742Stsoome(EFIAPI *EFI_UDP4_TRANSMIT) (
125342742Stsoome    IN struct _EFI_UDP4          *This,
126342742Stsoome    IN EFI_UDP4_COMPLETION_TOKEN *Token
127342742Stsoome    );
128342742Stsoome
129342742Stsoometypedef
130342742StsoomeEFI_STATUS
131342742Stsoome(EFIAPI *EFI_UDP4_RECEIVE) (
132342742Stsoome    IN struct _EFI_UDP4          *This,
133342742Stsoome    IN EFI_UDP4_COMPLETION_TOKEN *Token
134342742Stsoome    );
135342742Stsoome
136342742Stsoometypedef
137342742StsoomeEFI_STATUS
138342742Stsoome(EFIAPI *EFI_UDP4_CANCEL)(
139342742Stsoome    IN struct _EFI_UDP4          *This,
140342742Stsoome    IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
141342742Stsoome    );
142342742Stsoome
143342742Stsoometypedef
144342742StsoomeEFI_STATUS
145342742Stsoome(EFIAPI *EFI_UDP4_POLL) (
146342742Stsoome    IN struct _EFI_UDP4 *This
147342742Stsoome    );
148342742Stsoome
149342742Stsoometypedef struct _EFI_UDP4 {
150342742Stsoome    EFI_UDP4_GET_MODE_DATA GetModeData;
151342742Stsoome    EFI_UDP4_CONFIGURE     Configure;
152342742Stsoome    EFI_UDP4_GROUPS        Groups;
153342742Stsoome    EFI_UDP4_ROUTES        Routes;
154342742Stsoome    EFI_UDP4_TRANSMIT      Transmit;
155342742Stsoome    EFI_UDP4_RECEIVE       Receive;
156342742Stsoome    EFI_UDP4_CANCEL        Cancel;
157342742Stsoome    EFI_UDP4_POLL          Poll;
158342742Stsoome} EFI_UDP4;
159342742Stsoome
160342742Stsoometypedef struct {
161342742Stsoome    BOOLEAN          AcceptPromiscuous;
162342742Stsoome    BOOLEAN          AcceptAnyPort;
163342742Stsoome    BOOLEAN          AllowDuplicatePort;
164342742Stsoome    UINT8            TrafficClass;
165342742Stsoome    UINT8            HopLimit;
166342742Stsoome    UINT32           ReceiveTimeout;
167342742Stsoome    UINT32           TransmitTimeout;
168342742Stsoome    EFI_IPv6_ADDRESS StationAddress;
169342742Stsoome    UINT16           StationPort;
170342742Stsoome    EFI_IPv6_ADDRESS RemoteAddress;
171342742Stsoome    UINT16           RemotePort;
172342742Stsoome} EFI_UDP6_CONFIG_DATA;
173342742Stsoome
174342742Stsoometypedef
175342742StsoomeEFI_STATUS
176342742Stsoome(EFIAPI *EFI_UDP6_GET_MODE_DATA) (
177342742Stsoome    IN struct _EFI_UDP6                 *This,
178342742Stsoome    OUT EFI_UDP6_CONFIG_DATA            *Udp6ConfigData OPTIONAL,
179342742Stsoome    OUT EFI_IP6_MODE_DATA               *Ip6ModeData    OPTIONAL,
180342742Stsoome    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
181342742Stsoome    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
182342742Stsoome    );
183342742Stsoome
184342742Stsoometypedef
185342742StsoomeEFI_STATUS
186342742Stsoome(EFIAPI *EFI_UDP6_CONFIGURE) (
187342742Stsoome    IN struct _EFI_UDP6     *This,
188342742Stsoome    IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
189342742Stsoome    );
190342742Stsoome
191342742Stsoometypedef
192342742StsoomeEFI_STATUS
193342742Stsoome(EFIAPI *EFI_UDP6_GROUPS) (
194342742Stsoome    IN struct _EFI_UDP6 *This,
195342742Stsoome    IN BOOLEAN          JoinFlag,
196342742Stsoome    IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
197342742Stsoome    );
198342742Stsoome
199342742Stsoometypedef struct {
200342742Stsoome    EFI_IPv6_ADDRESS SourceAddress;
201342742Stsoome    UINT16           SourcePort;
202342742Stsoome    EFI_IPv6_ADDRESS DestinationAddress;
203342742Stsoome    UINT16           DestinationPort;
204342742Stsoome} EFI_UDP6_SESSION_DATA;
205342742Stsoome
206342742Stsoometypedef struct {
207342742Stsoome    UINT32 FragmentLength;
208342742Stsoome    VOID   *FragmentBuffer;
209342742Stsoome} EFI_UDP6_FRAGMENT_DATA;
210342742Stsoome
211342742Stsoometypedef struct {
212342742Stsoome    EFI_TIME               TimeStamp;
213342742Stsoome    EFI_EVENT              RecycleSignal;
214342742Stsoome    EFI_UDP6_SESSION_DATA  UdpSession;
215342742Stsoome    UINT32                 DataLength;
216342742Stsoome    UINT32                 FragmentCount;
217342742Stsoome    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
218342742Stsoome} EFI_UDP6_RECEIVE_DATA;
219342742Stsoome
220342742Stsoometypedef struct {
221342742Stsoome    EFI_UDP6_SESSION_DATA  *UdpSessionData;
222342742Stsoome    UINT32                 DataLength;
223342742Stsoome    UINT32                 FragmentCount;
224342742Stsoome    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
225342742Stsoome} EFI_UDP6_TRANSMIT_DATA;
226342742Stsoome
227342742Stsoometypedef struct {
228342742Stsoome    EFI_EVENT                  Event;
229342742Stsoome    EFI_STATUS                 Status;
230342742Stsoome    union {
231342742Stsoome        EFI_UDP6_RECEIVE_DATA  *RxData;
232342742Stsoome        EFI_UDP6_TRANSMIT_DATA *TxData;
233342742Stsoome    }                          Packet;
234342742Stsoome} EFI_UDP6_COMPLETION_TOKEN;
235342742Stsoome
236342742Stsoometypedef
237342742StsoomeEFI_STATUS
238342742Stsoome(EFIAPI *EFI_UDP6_TRANSMIT) (
239342742Stsoome    IN struct _EFI_UDP6          *This,
240342742Stsoome    IN EFI_UDP6_COMPLETION_TOKEN *Token
241342742Stsoome    );
242342742Stsoome
243342742Stsoometypedef
244342742StsoomeEFI_STATUS
245342742Stsoome(EFIAPI *EFI_UDP6_RECEIVE) (
246342742Stsoome    IN struct _EFI_UDP6          *This,
247342742Stsoome    IN EFI_UDP6_COMPLETION_TOKEN *Token
248342742Stsoome    );
249342742Stsoome
250342742Stsoometypedef
251342742StsoomeEFI_STATUS
252342742Stsoome(EFIAPI *EFI_UDP6_CANCEL)(
253342742Stsoome    IN struct _EFI_UDP6          *This,
254342742Stsoome    IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
255342742Stsoome    );
256342742Stsoome
257342742Stsoometypedef
258342742StsoomeEFI_STATUS
259342742Stsoome(EFIAPI *EFI_UDP6_POLL) (
260342742Stsoome    IN struct _EFI_UDP6 *This
261342742Stsoome    );
262342742Stsoome
263342742Stsoometypedef struct _EFI_UDP6 {
264342742Stsoome    EFI_UDP6_GET_MODE_DATA GetModeData;
265342742Stsoome    EFI_UDP6_CONFIGURE     Configure;
266342742Stsoome    EFI_UDP6_GROUPS        Groups;
267342742Stsoome    EFI_UDP6_TRANSMIT      Transmit;
268342742Stsoome    EFI_UDP6_RECEIVE       Receive;
269342742Stsoome    EFI_UDP6_CANCEL        Cancel;
270342742Stsoome    EFI_UDP6_POLL          Poll;
271342742Stsoome} EFI_UDP6;
272342742Stsoome
273342742Stsoome#endif /* _EFI_UDP_H */
274