1 /*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #ifndef FILLP_H
17 #define FILLP_H
18
19 #include "fillpinc.h"
20 #include "fillp_os.h"
21 #include "hlist.h"
22 #include "mem_pool.h"
23 #include "opt.h"
24 #include "skiplist.h"
25 #include "fillp_pcb.h"
26 #include "fillp_cookie.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #define FILLP_PROTOCOL_VERSION_NUMBER 0
33 #define FILLP_INITIAL_COOKIE_LIFETIME (10 * 1000 * 1000)
34 #define NACK_HISTORY_BY_TIME_INDEX 0
35
36 #define FILLP_LM_TRACE_SEND_MSG(traceFlag, traceObjType, traceHandle, len, sock, traceDesc, traceMsg) do { \
37 if ((g_traceInfo.fillpTraceSend != FILLP_NULL_PTR) \
38 && ((traceFlag) >= (traceObjType))) { \
39 (traceDesc).traceDirection = FILLP_TRACE_DIRECT_SEND; \
40 (*g_traceInfo.fillpTraceSend) (traceObjType, traceHandle, len, (FILLP_UINT32)(sock), \
41 (FILLP_UINT8 *)(void *)&(traceDesc), traceMsg); \
42 } \
43 } while (0)
44
45 /* Message indication */
46 #define FILLP_LM_FILLPMSGTRACE_OUTPUT(traceFlag, traceObjType, traceHandle, len, sock, pTracedesc, traceMsg) do { \
47 if ((g_traceInfo.fillpTraceSend != FILLP_NULL_PTR) \
48 && ((traceFlag) >= (traceObjType))) { \
49 (*g_traceInfo.fillpTraceSend) (traceObjType, traceHandle, len, (FILLP_UINT32)(sock), \
50 pTracedesc, traceMsg); \
51 } \
52 } while (0)
53
54 #define FILLP_LM_FILLPMSGTRACE_OUTPUT_WITHOUT_FT_TRACE_ENABLE_FLAG(traceObjType, traceHandle, len, sock, \
55 traceDesc, traceMsg) do { \
56 if (g_traceInfo.fillpTraceSend != FILLP_NULL_PTR) { \
57 (traceDesc).traceDirection = FILLP_TRACE_DIRECT_RECV; \
58 (*g_traceInfo.fillpTraceSend) (traceObjType, traceHandle, len, (FILLP_UINT32)(sock), \
59 (FILLP_UINT8 *)(void *)&(traceDesc), traceMsg); \
60 } \
61 } while (0)
62
63 #define FILLP_ITEM_RESEND_TRIGGER_NACK 0X01 /* item resend triggered by nack */
64 #define FILLP_ITEM_RESEND_TRIGGER_PACK 0X02 /* item resend triggered by pack */
65 #define FILLP_ITEM_RESEND_TRIGGER_TP 0X03 /* item resend triggered by tail protect */
66 #define FILLP_ITEM_RESEND_TRIGGER_HNACK 0X04 /* item resend triggered by history nack */
67
68 /* these flags is also used in the bitMap of the data option */
69 #define FILLP_ITEM_FLAGS_FRAME_OPT_BITMAP_MASK 0xFFu
70 #define FILLP_ITEM_FLAGS_FRAME_FIRST_FRAG_START 0x00000001u /* mark the item is the 1st pkt
71 of the 1st fragment of the frame */
72 #define FILLP_ITEM_FLAGS_FRAME_LAST_FRAG_START 0x00000002u /* mark the item is the 1st pkt
73 of the last fragment of the frame */
74
75 #define FILLP_ITEM_FLAGS_APP_LIMITED 0x00000100
76 #define FILLP_ITEM_FLAGS_FIRST_PKT 0x00000200
77 #define FILLP_ITEM_FLAGS_LAST_PKT 0x00000400
78 #define FILLP_ITEM_FLAGS_APP_LARGE_DATA 0x00000800
79 #define FILLP_ITEM_FLAGS_REDUNDANT 0x00001000
80
81 #define FILLP_ITEM_FLAGS_FIRST_PKT_FOR_CAL_COST (FILLP_ITEM_FLAGS_APP_LARGE_DATA | FILLP_ITEM_FLAGS_FIRST_PKT)
82 #define FILLP_ITEM_FLAGS_LAST_PKT_FOR_CAL_COST (FILLP_ITEM_FLAGS_APP_LARGE_DATA | FILLP_ITEM_FLAGS_LAST_PKT)
83
84 struct FillpPcbItem {
85 struct NetBuf buf; /* Data -- This has to be the first node in the structure. */
86 struct HlistNode node;
87 struct HlistNode unsendNode;
88 struct HlistNode pktSeqMapNode;
89 struct SkipListNode skipListNode;
90 void *netconn;
91 void *fpcb;
92 FILLP_UINT32 seqNum;
93 FILLP_UINT32 pktNum;
94 FILLP_UINT16 dataLen; /* Data Len */
95 FILLP_UINT16 dataOptLen; /* Data option Len */
96 FILLP_UINT32 dataOptFlag;
97 FILLP_UINT8 sendCount;
98 FILLP_UINT8 resendTrigger;
99 FILLP_UINT32 flags;
100 FILLP_UINT32 infCount; /* send success and flight in cap count */
101 FILLP_LLONG firstSendTimestamp;
102 FILLP_LLONG lastSendTimestamp;
103 FILLP_LLONG appSendTimestamp;
104 FILLP_UINT32 appSendSize;
105
106 FILLP_LLONG rxTimeStamp;
107 struct FillpFrameItem *frame;
108 };
109
FillpPcbEntry(struct HlistNode * node)110 static __inline struct FillpPcbItem *FillpPcbEntry(struct HlistNode *node)
111 {
112 return (struct FillpPcbItem *)((char *)(node) - (uintptr_t)(&(((struct FillpPcbItem *)0)->node)));
113 }
114
FillpPcbPktSeqMapNodeEntry(struct HlistNode * node)115 static __inline struct FillpPcbItem *FillpPcbPktSeqMapNodeEntry(struct HlistNode *node)
116 {
117 return (struct FillpPcbItem *)((char *)(node) - (uintptr_t)(&(((struct FillpPcbItem *)0)->pktSeqMapNode)));
118 }
119
FillpPcbUnsendNodeEntry(struct HlistNode * node)120 static __inline struct FillpPcbItem *FillpPcbUnsendNodeEntry(struct HlistNode *node)
121 {
122 return (struct FillpPcbItem *)((char *)(node) - (uintptr_t)(&(((struct FillpPcbItem *)0)->unsendNode)));
123 }
124
FillpPcbNetbufNodeEntry(char * p)125 static __inline struct NetBuf *FillpPcbNetbufNodeEntry(char *p)
126 {
127 return (struct NetBuf *)((char *)(p) - (uintptr_t)(&(((struct NetBuf *)0)->p)));
128 }
129
130 /* Below structures are exchanged over network, so there should be no padding, so use pack 1 */
131 #pragma pack(1)
132
133 /* To support extension of header is future.
134 1. Each message has parameter optLen which indicates if opt parameter present or not.
135 2. Whenever extension are added then special care need to be taken care such that total packet
136 doesn't spilt in 2 MSS. Current design do not support.
137 3. Data pkt type can't carry any new extension, should use existing MSG or define new MSG type.
138 4. All existing message can be extended at end not in between of current header values.
139 5. some capabilities which both node to agree up on, should use CONN_REQ, CONN_REQ_ACK and CONN_CONFIRM
140 message to exchange.
141 6. extension header should be of format: tag, length, value. Size of extension can be found in first byte
142 after each message type.
143 */
144 struct FillpPktHead {
145 FILLP_UINT16 flag; /* from MSB [0-3]Version [4-7] Pkt type [8]Ext Flag [9-15] Not used */
146 FILLP_UINT16 dataLen;
147 FILLP_UINT32 pktNum;
148 FILLP_UINT32 seqNum;
149 };
150
151 /*
152 * define fillp pack options
153 */
154 #define FILLP_PACK_OPT_HLEN 3
155 #define FILLP_PACK_OPT_HRBB 0x01
156
157 typedef struct InnerfillpPackOption {
158 FILLP_UINT8 type;
159 FILLP_UINT16 len;
160 FILLP_UINT8 value[1];
161 } FillpPackOption;
162
163 typedef struct {
164 FILLP_UINT16 seq;
165 FILLP_UINT16 totalMean;
166 FILLP_UINT32 jitter;
167 FILLP_UINT16 rsv;
168 FILLP_UINT16 windowMean;
169 FILLP_UINT32 windowVar;
170 } FillpPackOptionPktIvarData;
171
172 #define FILLP_PACK_FLAG_WITH_RTT 0x0001
173 #define FILLP_PACK_FLAG_REQURE_RTT 0x0002
174 #define FILLP_PACK_FLAG_WITH_RATE_LIMIT 0x0004
175 #define FILLP_PACK_FLAG_NO_DATA_SEND 0x0008
176 #define FILLP_PACK_FLAG_ADHOC 0x0010
177 #define FILLP_PACK_FLAG_PKT_NUM_SEG 0x0020
178 #define FILLP_PACK_FLAG_OPTS 0x0040
179 #define FILLP_PACK_FLAG_RCV_LIST_BYTES 0x0080
180 #define FILLP_PACK_FLAG_OWD 0x0100
181 #define FILLP_PACK_FLAG_CAL_COST 0x0200U
182 #define FILLP_PACK_FLAG_POWER_SAVE 0x0400
183
184 #define FILLP_PACK_MIN_LEN 32
185 #define FILLP_PACK_NUM_SEG_LEN 40
186 #define FILLP_PACK_OPTS_OFFSET_LEN 42
187 #define FILLP_PACK_RCV_LIST_BYTES_LEN 46
188 #define FILLP_PACK_OWD_LEN 58
189
190 struct FillpPktPack {
191 char head[FILLP_HLEN];
192 FILLP_UINT16 flag;
193 FILLP_UINT16 pktLoss;
194 FILLP_UINT32 rate;
195 FILLP_UINT32 oppositeSetRate;
196 /* recv 0~999,2000~2999, lost 1000~1999, fillp_dataHead->seqNum = 999, lostSeq = 1999.
197 if no packet lost, lostSeq and seqNum will be same */
198 FILLP_UINT32 lostSeq;
199 union {
200 FILLP_UINT32 rtt;
201 FILLP_UINT32 timestamp;
202 } reserved;
203 FILLP_UINT32 bgnPktNum; /* use in appLimited */
204 FILLP_UINT32 endPktNum; /* use in appLimited */
205 FILLP_UINT16 optsOffset; /* options start address relative to the first byte of pack packet */
206 FILLP_UINT32 rcvListBytes; /* data size in recvList */
207 FILLP_UINT32 owdPktSendTs; /* low 32bit send timestamp of the packet which has min owd, calculate minRtt */
208 FILLP_UINT32 owdPackDelay; /* the delta time between min owd packet received and next PACK send */
209 FILLP_UINT32 queueingDelay; /* report current "queueing delay", queueingDelay: current_owd - minOwd */
210 };
211
212 struct FillpPktConnReq {
213 char head[FILLP_HLEN];
214 FILLP_UINT32 cookiePreserveTime; /* for align to 8 bytes */
215 FILLP_UINT32 sendCache; /* client send to server cache , same as server recv cache */
216 FILLP_UINT32 recvCache; /* client recv from server cache, same as server send cache */
217
218 FILLP_ULLONG timestamp; /* Time stamp used for rtt Detective */
219 };
220
221 struct FillpPktFin {
222 char head[FILLP_HLEN];
223 FILLP_UINT16 flag;
224 };
225
226 struct FillpPktNack {
227 char head[FILLP_HLEN];
228 FILLP_UINT32 lastPktNum;
229 };
230
231
232 struct FillpPktNackWithRandnum {
233 struct FillpPktNack nack;
234 FILLP_ULLONG randomNum;
235 };
236
237 struct FillpSeqPktNum {
238 FILLP_UINT32 beginPktNum;
239 FILLP_UINT32 beginSeqNum;
240 FILLP_UINT32 endPktNum;
241 };
242
243 /* define flow control algorithm */
244 #define FILLP_SUPPORT_ALG_BASE 0X00u
245 #define FILLP_SUPPORT_ALG_N(_n) (0X01u << ((_n)-1))
246 #define FILLP_SUPPORT_ALG_1 0X01
247 #define FILLP_SUPPORT_ALG_2 0X02
248 #define FILLP_SUPPORT_ALG_3 0X04
249 #define FILLP_SUPPORT_ALG_MSG 0X08
250 #define FILLP_SUPPORT_ALG_HIGHEST_INDEX 3
251 #define FILLP_SUPPORT_ALG_HIGHEST FILLP_SUPPORT_ALG_N(FILLP_SUPPORT_ALG_HIGHEST_INDEX)
252 #define FILLP_SUPPORT_ALGS FILLP_SUPPORT_ALG_3
253
254 struct FillpPktConnReqAck {
255 char head[FILLP_HLEN];
256 FILLP_UINT16 tagCookie; /* for align to 8 bytes */
257 FILLP_UINT16 cookieLength; /* client send to server cache , same as server recv cache */
258
259 FillpCookieContent cookieContent;
260 FILLP_ULLONG timestamp; /* The same as conn_req->timestamp */
261 };
262
263 struct FillpConnReqAckClient {
264 FILLP_CHAR *cookieContent;
265 FILLP_ULLONG timestamp; /* The same as conn_req->timestamp */
266 FILLP_UINT16 tagCookie; /* for align to 8 bytes */
267 FILLP_UINT16 cookieLength; /* client send to server cache , same as server recv cache */
268 FILLP_UINT16 fcAlgs;
269 FILLP_UINT32 peerCharacters;
270 };
271
272 /* each ext para need value(1 bit) and length(1 bit), so totally need 2 bits */
273 #define FILLP_ONE_EXT_PARA_LENGTH 2
274
275 enum FillpPacketExt {
276 FILLP_PKT_EXT_START,
277 FILLP_PKT_EXT_CONNECT_CONFIRM_CARRY_RTT = 1,
278 FILLP_PKT_EXT_CONNECT_CONFIRM_CARRY_PKT_SIZE,
279 FILLP_PKT_EXT_CONNECT_CARRY_CHARACTER,
280 FILLP_PKT_EXT_CONNECT_CARRY_FC_ALG,
281 FILLP_PKT_EXT_BUTT = 0xff
282 };
283
284 struct FillpPktConnConfirm {
285 char head[FILLP_HLEN];
286 FILLP_UINT16 tagCookie; /* for align to 8 bytes */
287 FILLP_UINT16 cookieLength; /* client send to server cache , same as server recv cache */
288 FillpCookieContent cookieContent;
289 struct sockaddr_in6 remoteAddr; /* 28bytes */ /* Not used, kept because of backward compatibility */
290 };
291
292 struct FillpPktConnConfirmAck {
293 char head[FILLP_HLEN];
294 FILLP_UINT32 sendCache;
295 FILLP_UINT32 recvCache;
296 FILLP_UINT32 pktSize; /* mtu , from server */
297 struct sockaddr_in6 remoteAddr; /* 28bytes */
298 };
299
300 typedef struct InnerfillpDataOption {
301 FILLP_UINT8 type;
302 FILLP_UINT8 len;
303 FILLP_UINT8 value[1];
304 } FillpDataOption;
305
306 #pragma pack()
307
308 #define FILLP_PKT_TYPE_DATA 0x1
309 #define FILLP_PKT_TYPE_NACK 0x3
310 #define FILLP_PKT_TYPE_PACK 0x5
311 #define FILLP_PKT_TYPE_CONN_REQ 0X2
312 #define FILLP_PKT_TYPE_FIN 0x6
313 #define FILLP_PKT_TYPE_CONN_REQ_ACK 0XA
314 #define FILLP_PKT_TYPE_CONN_CONFIRM 0XB
315 #define FILLP_PKT_TYPE_CONN_CONFIRM_ACK 0XC
316 #define FILLP_PKT_TYPE_HISTORY_NACK 0xD
317
318 /*
319 * define fillp data option
320 */
321 #define FILLP_DATA_OFFSET_LEN 2
322 #define FILLP_DATA_OPT_HLEN 2
323
324 /*
325 * define fillp data options
326 */
327 #define FILLP_OPT_TIMESTAMP 0x01
328 #define FILLP_OPT_FRAME_INFO 0x02
329
330 #define FILLP_OPT_FLAG_TIMESTAMP 0x0001
331 #define FILLP_OPT_FLAG_FRAME_INFO 0x0002
332
333 #define FILLP_OPT_TIMESTAMP_LEN 8
334 #define FILLP_OPT_FRAME_INFO_LEN sizeof(struct FillpFrameDataOption)
335
336 #define FILLP_COOKIE_TAG 0X1
337
338 typedef enum InnerfillpClientfourhandshakestateEnum {
339 FILLP_CLIENT_FOUR_HANDSHAKE_STATE_INITIAL = 0,
340 FILLP_CLIENT_FOUR_HANDSHAKE_STATE_REQSENT = 1,
341 FILLP_CLIENT_FOUR_HANDSHAKE_STATE_REQACK_RCVED = 2,
342 FILLP_CLIENT_FOUR_HANDSHAKE_STATE_CONFIRM_SENT = 3,
343 FILLP_CLIENT_FOUR_HANDSHAKE_STATE_CONFIRMACK_RCVED = 4,
344 FILLP_CLIENT_FOUR_HANDSHAKE_STATE_BUTT
345 } FillpClientfourhandshakestateEnum;
346
347 #define FILLP_HEADER_SET_PKT_TYPE(flag, type) ((flag) |= ((FILLP_UINT16)((type)&0x0f) << 8))
348 #define FILLP_PKT_GET_TYPE(flag) (((flag)&0x0f00) >> 8)
349 #define FILLP_PKT_GET_FLAG(flag) ((flag) & 0x00ff)
350
351 #define FILLP_HEADER_SET_PROTOCOL_VERSION(flag, ver) ((flag) |= ((FILLP_UINT16)((ver)&0x0f) << 12))
352 #define FILLP_PKT_GET_PROTCOL_VERSION(flag) (((flag)&0xf000) >> 12)
353
354 /*
355 * PKT_DATA with option or not flag, 1 bit
356 */
357 #define FILLP_HEADER_SET_DAT_WITH_OPTION(flag) ((flag) |= 0x80) // 0x80 -> 0000 0000 1000 0000
358 #define FILLP_PKT_GET_DAT_WITH_OPTION(flag) ((flag)&0x80) // 0x80 -> 0000 0000 1000 0000
359
360 /*
361 * PKT_DATA with flag indicating the last pkt, 1 bit
362 */
363 #define FILLP_HEADER_SET_DAT_WITH_LAST_FLAG(flag) ((flag) |= 0x40) // 0x40 -> 0000 0000 0100 0000
364 #define FILLP_PKT_GET_DAT_WITH_LAST_FLAG(flag) ((flag)&0x40)
365
366 /*
367 * PKT_DATA with flag indicating the first pkt, 1 bit
368 */
369 #define FILLP_HEADER_SET_DAT_WITH_FIRST_FLAG(flag) ((flag) |= 0x20) // 0x40 -> 0000 0000 0010 0000
370 #define FILLP_PKT_GET_DAT_WITH_FIRST_FLAG(flag) ((flag) & 0x20)
371
372 #define FILLP_PKT_DISCONN_MSG_FLAG_WR 0x0001 /* Not send anymore data */
373 #define FILLP_PKT_DISCONN_MSG_FLAG_RD 0x0002 /* Won't read anymore data */
374 #define FILLP_PKT_DISCONN_MSG_FLAG_ACK 0x0004 /* It is an ACK for disconnect message */
375 #define FILLP_PKT_DISCONN_MSG_FLAG_VER 0x0008 /* version imcompatible */
376
377 #define FILLP_PKT_DISCONN_MSG_FLAG_SET_WR(_flag) ((_flag) |= FILLP_PKT_DISCONN_MSG_FLAG_WR)
378 #define FILLP_PKT_DISCONN_MSG_FLAG_SET_RD(_flag) ((_flag) |= FILLP_PKT_DISCONN_MSG_FLAG_RD)
379 #define FILLP_PKT_DISCONN_MSG_FLAG_SET_ACK(_flag) ((_flag) |= FILLP_PKT_DISCONN_MSG_FLAG_ACK)
380 #define FILLP_PKT_DISCONN_MSG_FLAG_SET_VER(_flag) ((_flag) |= FILLP_PKT_DISCONN_MSG_FLAG_VER)
381
382 #define FILLP_PKT_DISCONN_MSG_FLAG_IS_WR(_flag) ((_flag)&FILLP_PKT_DISCONN_MSG_FLAG_WR)
383 #define FILLP_PKT_DISCONN_MSG_FLAG_IS_RD(_flag) ((_flag)&FILLP_PKT_DISCONN_MSG_FLAG_RD)
384 #define FILLP_PKT_DISCONN_MSG_FLAG_IS_ACK(_flag) ((_flag)&FILLP_PKT_DISCONN_MSG_FLAG_ACK)
385 #define FILLP_PKT_DISCONN_MSG_FLAG_IS_VER(_flag) ((_flag) & FILLP_PKT_DISCONN_MSG_FLAG_VER)
386
FillpNumIsbigger(FILLP_UINT32 value1,FILLP_UINT32 value2)387 static __inline FILLP_INT FillpNumIsbigger(FILLP_UINT32 value1, FILLP_UINT32 value2)
388 {
389 return ((FILLP_INT32)(value1 - value2)) > 0;
390 }
391
392 void FillpSendConnConfirmAck(struct FillpPcb *pcb);
393 FILLP_INT FillpSendConnReq(struct FillpPcb *pcb);
394 void FillpSendFin(struct FillpPcb *pcb);
395 void FillpSendFinAck(struct FillpPcb *pcb, struct sockaddr *remoteAddr);
396 void FillpSendRst(struct FillpPcb *pcb, struct sockaddr *remoteAddr);
397 void FillpSendRstWithVersionImcompatible(struct FillpPcb *pcb, struct sockaddr *remoteAddr);
398
399 void FillpGenerateCookie(IN FILLP_CONST struct FillpPcb *pcb, IN struct FillpPktConnReq *req,
400 IN FILLP_CONST struct sockaddr_in6 *remoteAddr, IN FILLP_UINT16 serverPort, OUT FillpCookieContent *stateCookie);
401
402 FILLP_INT FillpValidateCookie(IN FILLP_CONST struct FillpPcb *pcb, IN FILLP_UINT16 serverPort,
403 IN FILLP_CONST struct sockaddr_in6 *clientAddr, IN FILLP_CONST FillpCookieContent *stateCookie);
404
405 void FillpSendConnReqAck(struct FillpPcb *pcb, FILLP_CONST FillpCookieContent *stateCookie, FILLP_ULLONG timestamp);
406
407 void FillpSendConnConfirm(struct FillpPcb *pcb, FILLP_CONST struct FillpConnReqAckClient *reqAck);
408
409 void FillpPackTimerCb(void *argPcb);
410 void FillpFcTimerCb(void *argPcb);
411 void FillpSendTimerCb(void *argPcb);
412
413 void FillpEnableSendTimer(struct FillpPcb *pcb);
414 void FillpDisableSendTimer(struct FillpPcb *pcb);
415 void FillpEnablePackTimer(struct FillpPcb *pcb);
416 void FillpDisablePackTimer(struct FillpPcb *pcb);
417 void FillpEnableFcTimer(struct FillpPcb *pcb);
418 void FillpDisableFcTimer(struct FillpPcb *pcb);
419 void FillpEnableKeepAliveTimer(struct FillpPcb *pcb);
420 void FillpDisableKeepAliveTimer(struct FillpPcb *pcb);
421 void FillpEnableDelayNackTimer(struct FillpPcb *pcb);
422 void FillpDisableDelayNackTimer(struct FillpPcb *pcb);
423 void FillpEnableDataBurstTimer(struct FillpPcb *pcb);
424 void FillpDisableDataBurstTimer(struct FillpPcb *pcb);
425 void FillpEnableConnRetryCheckTimer(struct FillpPcb *pcb);
426 void FillpDisableConnRetryCheckTimer(struct FillpPcb *pcb);
427 void FillpEnableFinCheckTimer(struct FillpPcb *pcb);
428 void FillpDisableFinCheckTimer(struct FillpPcb *pcb);
429
430 void FillpConnReqInput(struct FillpPcb *pcb, FILLP_CONST struct NetBuf *p);
431 void FillpConnReqAckInput(struct FillpPcb *pcb, FILLP_CONST struct NetBuf *p);
432 void FillpConnConnectionEstFailure(struct FillpPcb *pcb, FILLP_CONST struct NetBuf *p);
433 void FillpConnConfirmAckInput(struct FillpPcb *pcb, FILLP_CONST struct NetBuf *p);
434
435 void FillpFinInput(struct FillpPcb *pcb, FILLP_CONST struct NetBuf *p, FILLP_BOOL *pcbFreed);
436
437 struct FtNetconn;
438
439 FILLP_INT32 FillpDecodeExtPara(FILLP_CONST FILLP_UCHAR *buf, FILLP_INT bufLen, struct FtNetconn *conn);
440
441 #ifdef __cplusplus
442 }
443 #endif
444
445 #endif /* FILLP_H */
446