xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/inc/efiudp.h (revision b2c829d73acfa2ef1ac1967460ebcec8f439b096)
1 /*	$NetBSD: efiudp.h,v 1.1.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