Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/stand/efi/include/efitcp.h
34883 views
1
#ifndef _EFI_TCP_H
2
#define _EFI_TCP_H
3
4
/*++
5
Copyright (c) 2013 Intel Corporation
6
7
--*/
8
9
#define EFI_TCP4_SERVICE_BINDING_PROTOCOL \
10
{ 0x00720665, 0x67eb, 0x4a99, {0xba, 0xf7, 0xd3, 0xc3, 0x3a, 0x1c,0x7c, 0xc9}}
11
12
#define EFI_TCP4_PROTOCOL \
13
{ 0x65530bc7, 0xa359, 0x410f, {0xb0, 0x10, 0x5a, 0xad, 0xc7, 0xec, 0x2b, 0x62}}
14
15
#define EFI_TCP6_SERVICE_BINDING_PROTOCOL \
16
{ 0xec20eb79, 0x6c1a, 0x4664, {0x9a, 0xd, 0xd2, 0xe4, 0xcc, 0x16, 0xd6, 0x64}}
17
18
#define EFI_TCP6_PROTOCOL \
19
{ 0x46e44855, 0xbd60, 0x4ab7, {0xab, 0xd, 0xa6, 0x79, 0xb9, 0x44, 0x7d, 0x77}}
20
21
INTERFACE_DECL(_EFI_TCP4);
22
INTERFACE_DECL(_EFI_TCP6);
23
24
typedef struct {
25
BOOLEAN UseDefaultAddress;
26
EFI_IPv4_ADDRESS StationAddress;
27
EFI_IPv4_ADDRESS SubnetMask;
28
UINT16 StationPort;
29
EFI_IPv4_ADDRESS RemoteAddress;
30
UINT16 RemotePort;
31
BOOLEAN ActiveFlag;
32
} EFI_TCP4_ACCESS_POINT;
33
34
typedef struct {
35
UINT32 ReceiveBufferSize;
36
UINT32 SendBufferSize;
37
UINT32 MaxSynBackLog;
38
UINT32 ConnectionTimeout;
39
UINT32 DataRetries;
40
UINT32 FinTimeout;
41
UINT32 TimeWaitTimeout;
42
UINT32 KeepAliveProbes;
43
UINT32 KeepAliveTime;
44
UINT32 KeepAliveInterval;
45
BOOLEAN EnableNagle;
46
BOOLEAN EnableTimeStamp;
47
BOOLEAN EnableWindowScaling;
48
BOOLEAN EnableSelectiveAck;
49
BOOLEAN EnablePAthMtuDiscovery;
50
} EFI_TCP4_OPTION;
51
52
typedef struct {
53
// Receiving Filters
54
// I/O parameters
55
UINT8 TypeOfService;
56
UINT8 TimeToLive;
57
58
// Access Point
59
EFI_TCP4_ACCESS_POINT AccessPoint;
60
61
// TCP Control Options
62
EFI_TCP4_OPTION *ControlOption;
63
} EFI_TCP4_CONFIG_DATA;
64
65
typedef enum {
66
Tcp4StateClosed = 0,
67
Tcp4StateListen = 1,
68
Tcp4StateSynSent = 2,
69
Tcp4StateSynReceived = 3,
70
Tcp4StateEstablished = 4,
71
Tcp4StateFinWait1 = 5,
72
Tcp4StateFinWait2 = 6,
73
Tcp4StateClosing = 7,
74
Tcp4StateTimeWait = 8,
75
Tcp4StateCloseWait = 9,
76
Tcp4StateLastAck = 10
77
} EFI_TCP4_CONNECTION_STATE;
78
79
typedef
80
EFI_STATUS
81
(EFIAPI *EFI_TCP4_GET_MODE_DATA) (
82
IN struct _EFI_TCP4 *This,
83
OUT EFI_TCP4_CONNECTION_STATE *Tcp4State OPTIONAL,
84
OUT EFI_TCP4_CONFIG_DATA *Tcp4ConfigData OPTIONAL,
85
OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
86
OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
87
OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
88
);
89
90
typedef
91
EFI_STATUS
92
(EFIAPI *EFI_TCP4_CONFIGURE) (
93
IN struct _EFI_TCP4 *This,
94
IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL
95
);
96
97
typedef
98
EFI_STATUS
99
(EFIAPI *EFI_TCP4_ROUTES) (
100
IN struct _EFI_TCP4 *This,
101
IN BOOLEAN DeleteRoute,
102
IN EFI_IPv4_ADDRESS *SubnetAddress,
103
IN EFI_IPv4_ADDRESS *SubnetMask,
104
IN EFI_IPv4_ADDRESS *GatewayAddress
105
);
106
107
typedef struct {
108
EFI_EVENT Event;
109
EFI_STATUS Status;
110
} EFI_TCP4_COMPLETION_TOKEN;
111
112
typedef struct {
113
EFI_TCP4_COMPLETION_TOKEN CompletionToken;
114
} EFI_TCP4_CONNECTION_TOKEN;
115
116
typedef
117
EFI_STATUS
118
(EFIAPI *EFI_TCP4_CONNECT) (
119
IN struct _EFI_TCP4 *This,
120
IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken
121
);
122
123
typedef struct {
124
EFI_TCP4_COMPLETION_TOKEN CompletionToken;
125
EFI_HANDLE NewChildHandle;
126
} EFI_TCP4_LISTEN_TOKEN;
127
128
typedef
129
EFI_STATUS
130
(EFIAPI *EFI_TCP4_ACCEPT) (
131
IN struct _EFI_TCP4 *This,
132
IN EFI_TCP4_LISTEN_TOKEN *ListenToken
133
);
134
135
#define EFI_CONNECTION_FIN EFIERR(104)
136
#define EFI_CONNECTION_RESET EFIERR(105)
137
#define EFI_CONNECTION_REFUSED EFIERR(106)
138
139
typedef struct {
140
UINT32 FragmentLength;
141
VOID *FragmentBuffer;
142
} EFI_TCP4_FRAGMENT_DATA;
143
144
typedef struct {
145
BOOLEAN UrgentFlag;
146
UINT32 DataLength;
147
UINT32 FragmentCount;
148
EFI_TCP4_FRAGMENT_DATA FragmentTable[1];
149
} EFI_TCP4_RECEIVE_DATA;
150
151
typedef struct {
152
BOOLEAN Push;
153
BOOLEAN Urgent;
154
UINT32 DataLength;
155
UINT32 FragmentCount;
156
EFI_TCP4_FRAGMENT_DATA FragmentTable[1];
157
} EFI_TCP4_TRANSMIT_DATA;
158
159
typedef struct {
160
EFI_TCP4_COMPLETION_TOKEN CompletionToken;
161
union {
162
EFI_TCP4_RECEIVE_DATA *RxData;
163
EFI_TCP4_TRANSMIT_DATA *TxData;
164
} Packet;
165
} EFI_TCP4_IO_TOKEN;
166
167
typedef
168
EFI_STATUS
169
(EFIAPI *EFI_TCP4_TRANSMIT) (
170
IN struct _EFI_TCP4 *This,
171
IN EFI_TCP4_IO_TOKEN *Token
172
);
173
174
typedef
175
EFI_STATUS
176
(EFIAPI *EFI_TCP4_RECEIVE) (
177
IN struct _EFI_TCP4 *This,
178
IN EFI_TCP4_IO_TOKEN *Token
179
);
180
181
typedef struct {
182
EFI_TCP4_COMPLETION_TOKEN CompletionToken;
183
BOOLEAN AbortOnClose;
184
} EFI_TCP4_CLOSE_TOKEN;
185
186
typedef
187
EFI_STATUS
188
(EFIAPI *EFI_TCP4_CLOSE)(
189
IN struct _EFI_TCP4 *This,
190
IN EFI_TCP4_CLOSE_TOKEN *CloseToken
191
);
192
193
typedef
194
EFI_STATUS
195
(EFIAPI *EFI_TCP4_CANCEL)(
196
IN struct _EFI_TCP4 *This,
197
IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL
198
);
199
200
typedef
201
EFI_STATUS
202
(EFIAPI *EFI_TCP4_POLL) (
203
IN struct _EFI_TCP4 *This
204
);
205
206
typedef struct _EFI_TCP4 {
207
EFI_TCP4_GET_MODE_DATA GetModeData;
208
EFI_TCP4_CONFIGURE Configure;
209
EFI_TCP4_ROUTES Routes;
210
EFI_TCP4_CONNECT Connect;
211
EFI_TCP4_ACCEPT Accept;
212
EFI_TCP4_TRANSMIT Transmit;
213
EFI_TCP4_RECEIVE Receive;
214
EFI_TCP4_CLOSE Close;
215
EFI_TCP4_CANCEL Cancel;
216
EFI_TCP4_POLL Poll;
217
} EFI_TCP4;
218
219
typedef enum {
220
Tcp6StateClosed = 0,
221
Tcp6StateListen = 1,
222
Tcp6StateSynSent = 2,
223
Tcp6StateSynReceived = 3,
224
Tcp6StateEstablished = 4,
225
Tcp6StateFinWait1 = 5,
226
Tcp6StateFinWait2 = 6,
227
Tcp6StateClosing = 7,
228
Tcp6StateTimeWait = 8,
229
Tcp6StateCloseWait = 9,
230
Tcp6StateLastAck = 10
231
} EFI_TCP6_CONNECTION_STATE;
232
233
typedef struct {
234
EFI_IPv6_ADDRESS StationAddress;
235
UINT16 StationPort;
236
EFI_IPv6_ADDRESS RemoteAddress;
237
UINT16 RemotePort;
238
BOOLEAN ActiveFlag;
239
} EFI_TCP6_ACCESS_POINT;
240
241
typedef struct {
242
UINT32 ReceiveBufferSize;
243
UINT32 SendBufferSize;
244
UINT32 MaxSynBackLog;
245
UINT32 ConnectionTimeout;
246
UINT32 DataRetries;
247
UINT32 FinTimeout;
248
UINT32 TimeWaitTimeout;
249
UINT32 KeepAliveProbes;
250
UINT32 KeepAliveTime;
251
UINT32 KeepAliveInterval;
252
BOOLEAN EnableNagle;
253
BOOLEAN EnableTimeStamp;
254
BOOLEAN EnableWindbowScaling;
255
BOOLEAN EnableSelectiveAck;
256
BOOLEAN EnablePathMtuDiscovery;
257
} EFI_TCP6_OPTION;
258
259
typedef struct {
260
UINT8 TrafficClass;
261
UINT8 HopLimit;
262
EFI_TCP6_ACCESS_POINT AccessPoint;
263
EFI_TCP6_OPTION *ControlOption;
264
} EFI_TCP6_CONFIG_DATA;
265
266
typedef
267
EFI_STATUS
268
(EFIAPI *EFI_TCP6_GET_MODE_DATA) (
269
IN struct _EFI_TCP6 *This,
270
OUT EFI_TCP6_CONNECTION_STATE *Tcp6State OPTIONAL,
271
OUT EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL,
272
OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
273
OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
274
OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
275
);
276
277
typedef
278
EFI_STATUS
279
(EFIAPI *EFI_TCP6_CONFIGURE) (
280
IN struct _EFI_TCP6 *This,
281
IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL
282
);
283
284
typedef struct {
285
EFI_EVENT Event;
286
EFI_STATUS Status;
287
} EFI_TCP6_COMPLETION_TOKEN;
288
289
typedef struct {
290
EFI_TCP6_COMPLETION_TOKEN CompletionToken;
291
} EFI_TCP6_CONNECTION_TOKEN;
292
293
typedef
294
EFI_STATUS
295
(EFIAPI *EFI_TCP6_CONNECT) (
296
IN struct _EFI_TCP6 *This,
297
IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken
298
);
299
300
typedef struct {
301
EFI_TCP6_COMPLETION_TOKEN CompletionToken;
302
EFI_HANDLE NewChildHandle;
303
} EFI_TCP6_LISTEN_TOKEN;
304
305
typedef
306
EFI_STATUS
307
(EFIAPI *EFI_TCP6_ACCEPT) (
308
IN struct _EFI_TCP6 *This,
309
IN EFI_TCP6_LISTEN_TOKEN *ListenToken
310
);
311
312
typedef struct {
313
UINT32 FragmentLength;
314
VOID *FragmentBuffer;
315
} EFI_TCP6_FRAGMENT_DATA;
316
317
typedef struct {
318
BOOLEAN UrgentFlag;
319
UINT32 DataLength;
320
UINT32 FragmentCount;
321
EFI_TCP6_FRAGMENT_DATA FragmentTable[1];
322
} EFI_TCP6_RECEIVE_DATA;
323
324
typedef struct {
325
BOOLEAN Push;
326
BOOLEAN Urgent;
327
UINT32 DataLength;
328
UINT32 FragmentCount;
329
EFI_TCP6_FRAGMENT_DATA FragmentTable[1];
330
} EFI_TCP6_TRANSMIT_DATA;
331
332
typedef struct {
333
EFI_TCP6_COMPLETION_TOKEN CompletionToken;
334
union {
335
EFI_TCP6_RECEIVE_DATA *RxData;
336
EFI_TCP6_TRANSMIT_DATA *TxData;
337
} Packet;
338
} EFI_TCP6_IO_TOKEN;
339
340
typedef
341
EFI_STATUS
342
(EFIAPI *EFI_TCP6_TRANSMIT) (
343
IN struct _EFI_TCP6 *This,
344
IN EFI_TCP6_IO_TOKEN *Token
345
);
346
347
typedef
348
EFI_STATUS
349
(EFIAPI *EFI_TCP6_RECEIVE) (
350
IN struct _EFI_TCP6 *This,
351
IN EFI_TCP6_IO_TOKEN *Token
352
);
353
354
typedef struct {
355
EFI_TCP6_COMPLETION_TOKEN CompletionToken;
356
BOOLEAN AbortOnClose;
357
} EFI_TCP6_CLOSE_TOKEN;
358
359
typedef
360
EFI_STATUS
361
(EFIAPI *EFI_TCP6_CLOSE)(
362
IN struct _EFI_TCP6 *This,
363
IN EFI_TCP6_CLOSE_TOKEN *CloseToken
364
);
365
366
typedef
367
EFI_STATUS
368
(EFIAPI *EFI_TCP6_CANCEL)(
369
IN struct _EFI_TCP6 *This,
370
IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL
371
);
372
373
typedef
374
EFI_STATUS
375
(EFIAPI *EFI_TCP6_POLL) (
376
IN struct _EFI_TCP6 *This
377
);
378
379
typedef struct _EFI_TCP6 {
380
EFI_TCP6_GET_MODE_DATA GetModeData;
381
EFI_TCP6_CONFIGURE Configure;
382
EFI_TCP6_CONNECT Connect;
383
EFI_TCP6_ACCEPT Accept;
384
EFI_TCP6_TRANSMIT Transmit;
385
EFI_TCP6_RECEIVE Receive;
386
EFI_TCP6_CLOSE Close;
387
EFI_TCP6_CANCEL Cancel;
388
EFI_TCP6_POLL Poll;
389
} EFI_TCP6;
390
391
#endif /* _EFI_TCP_H */
392
393