• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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