📄 tcp.lis
字号:
000A 2C97 sbiw R28,12
000C .dbline -1
000C .dbline 147
000C ;
000C ; // TCP A TCP B
000C ; // 1. CLOSED LISTEN
000C ; //
000C ; // 2. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED
000C ; // 3. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED
000C ; // 4. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED
000C ; //
000C ; // 5. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED
000C ; // 6. etc
000C ; //
000C ; //
000C ; //
000C ; // 7. FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> --> CLOSE-WAIT
000C ; // 8. FIN-WAIT-2 <-- <SEQ=300><ACK=101><CTL=ACK> <-- CLOSE-WAIT
000C ; // 9. TIME-WAIT <-- <SEQ=300><ACK=101><CTL=FIN,ACK> <-- LAST-ACK
000C ; // 10. TIME-WAIT --> <SEQ=101><ACK=301><CTL=ACK> --> CLOSED
000C ; // 11. (2 MSL)
000C ; // CLOSED
000C ;
000C ; /*
000C ; * Copyright (C) 2003-2004 by Clive Moss All rights reserved.
000C ; *
000C ; * Help & Contributions from D.J.Armstrong
000C ;
000C ; * Redistribution and use in source and binary forms, with or without
000C ; * modification, are permitted provided that the following conditions
000C ; * are met:
000C ; *
000C ; * 1. Redistributions of source code must retain the above copyright
000C ; * notice, this list of conditions and the following disclaimer.
000C ; * 2. Redistributions in binary form must reproduce the above copyright
000C ; * notice, this list of conditions and the following disclaimer in the
000C ; * documentation and/or other materials provided with the distribution.
000C ; * 3. Neither the name of the copyright holders nor the names of
000C ; * contributors may be used to endorse or promote products derived
000C ; * from this software without specific prior written permission.
000C ; *
000C ; * THIS SOFTWARE IS PROVIDED BY CLIVE MOSS 'AS IS' AND ANY EXPRESS OR
000C ; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
000C ; * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
000C ; * ARE DISCLAIMED.
000C ; * IN NO EVENT SHALL CLIVE MOSS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
000C ; * INDIRECT, INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
000C ; * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
000C ; * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
000C ; * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
000C ; * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
000C ; * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
000C ; * SUCH DAMAGE.
000C ; */
000C ;
000C ; //#ifdef CPU_eZ8
000C ; // #pragma stkck // enable stack checking
000C ; //#endif
000C ;
000C ; #include <string.h>
000C ; #include <stdlib.h>
000C ; #include <stdio.h>
000C ;
000C ; #include "common.h"
000C ; #include "ppp.h"
000C ; #include "ip.h"
000C ; #include "tcp.h"
000C ;
000C ; #ifdef Debug
000C ; flash char tcp_str1[] = " TCPHdr: SrcPrt:";
000C ; flash char tcp_str2[] = " DestPrt:";
000C ; flash char tcp_str3[] = " SeqNum:";
000C ; flash char tcp_str4[] = " AckNum:";
000C ; flash char tcp_str5[] = " DataOfs:";
000C ; flash char tcp_str6[] = " CBits:";
000C ; flash char tcp_str7[] = "-URG";
000C ; flash char tcp_str8[] = "-ACK";
000C ; flash char tcp_str9[] = "-PSH";
000C ; flash char tcp_str10[] = "-RST";
000C ; flash char tcp_str11[] = "-SYN";
000C ; flash char tcp_str12[] = "-FIN";
000C ; flash char tcp_str13[] = " WinSize:";
000C ; flash char tcp_str14[] = " Chksum:";
000C ; flash char tcp_str15[] = " UrgPtr:";
000C ; flash char tcp_str16[] = " option:";
000C ; flash char tcp_str17[] = " DataBytes:";
000C ; flash char tcp_str18[] = " Conn RESET\n";
000C ; flash char tcp_str19[] = " Conn ACCEPTED\n";
000C ; flash char tcp_str20[] = " Conn ESTABLISHED\n";
000C ; flash char tcp_str21[] = " - BLOCKED\n";
000C ;
000C ; flash char tcp_str22[] = "TCP Skt State: ";
000C ; flash char tcp_str23[] = "CLOSED\n";
000C ; flash char tcp_str24[] = "LISTEN\n";
000C ; flash char tcp_str25[] = "SYN_SENT\n";
000C ; flash char tcp_str26[] = "SYN_RECEIVED\n";
000C ; flash char tcp_str27[] = "ESTABLISHED\n";
000C ; flash char tcp_str28[] = "FIN_WAIT_1\n";
000C ; flash char tcp_str29[] = "FIN_WAIT_2\n";
000C ; flash char tcp_str30[] = "CLOSE_WAIT\n";
000C ; flash char tcp_str31[] = "CLOSING\n";
000C ; flash char tcp_str32[] = "LAST_ACK\n";
000C ; flash char tcp_str33[] = "TIME_WAIT\n";
000C ; flash char tcp_str34[] = "UNKNOWN\n";
000C ;
000C ; flash char tcp_Str35[] = "*** failed to get mem for socket\n";
000C ;
000C ; flash char tcp_str40[] = "*** TCP chksum err\n";
000C ;
000C ; flash char TCP_Str50[] = " Connect Time: ";
000C ; flash char TCP_Str51[] = " Last Rx Data: ";
000C ; flash char TCP_Str52[] = "Their Max Seg Size: ";
000C ; flash char TCP_Str53[] = " Their Seq Num: ";
000C ; flash char TCP_Str54[] = " Our Seq Num: ";
000C ; flash char TCP_Str55[] = " Their Win Size: ";
000C ; flash char TCP_Str56[] = " Last Bytes Sent: ";
000C ; flash char TCP_Str57[] = " Their IP: ";
000C ; flash char TCP_Str58[] = " Remote Port: ";
000C ; flash char TCP_Str59[] = " Local Port: ";
000C ; flash char TCP_Str60[] = " Round Trip Time: ";
000C ; flash char TCP_Str61[] = " Retries: ";
000C ; flash char TCP_Str62[] = " Retry Timer: ";
000C ; flash char TCP_Str63[] = " TxBufferRd: ";
000C ; flash char TCP_Str64[] = " TxBufferWr: ";
000C ; flash char TCP_Str65[] = " RxBufferRd: ";
000C ; flash char TCP_Str66[] = " RxBufferWr: ";
000C ; #endif
000C ;
000C ; #ifdef CPU_eZ8
000C ; near u16 TCP_TmpPort = 0; // this is usedfor deciding what source port to use when making out going tcp connections
000C ; #endif
000C ; #ifdef CPU_ATmega128
000C ; u16 TCP_TmpPort = 0; // "
000C ; #endif
000C ;
000C ; #ifdef StaticTCPSocket
000C ; T_TCP_Socket TCP_Static_Socket; // static socket
000C ; T_TCP_Socket *TCP_Socket = (T_TCP_Socket*)&TCP_Static_Socket; // set the pointer to point to it
000C ; #else
000C ; T_TCP_Socket *TCP_Socket = NULL; // it'll be dynamically allocated
000C ; #endif
000C ;
000C ; T_TCP_Header *TCP_Header = NULL; // points to the tcp header in a tx or rx packet
000C ;
000C ; //*****************************************************************************************************
000C ;
000C ; #ifdef Debug
000C ;
000C ; void TCP_DisplayHeader(int HeaderIdx, int TotalBytes)
000C ; { // display the tcp header details
000C .dbline 175
000C ; u8 b, type, len;
000C ; int i, j;
000C ; u16 w;
000C ; u32 dw;
000C ;
000C ; /*
000C ; 0 1 2 3
000C ; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
000C ; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
000C ; | Source Port | Destination Port |
000C ; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
000C ; | Sequence Number |
000C ; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
000C ; | Acknowledgment Number |
000C ; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
000C ; | Data | |U|A|P|R|S|F| |
000C ; | Offset| Reserved |R|C|S|S|Y|I| Window |
000C ; | | |G|K|H|T|N|N| |
000C ; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
000C ; | Checksum | Urgent Pointer |
000C ; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
000C ; | Options | Padding | < optional
000C ; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
000C ; */
000C ;
000C ; // display the header
000C ;
000C ; if (!SendDebugRStr(tcp_str1)) return;
000C 00E0 ldi R16,<_tcp_str1
000E 10E0 ldi R17,>_tcp_str1
0010 0E940000 xcall _SendDebugRStr
0014 0023 tst R16
0016 09F4 brne L2
0018 .dbline 175
0018 0EC2 xjmp L1
001A L2:
001A .dbline 176
001A ; sprintf((char*)ScratchPad, "%u", ntohs(TCP_Header->SourcePort));
001A E0910400 lds R30,_TCP_Header
001E F0910500 lds R31,_TCP_Header+1
0022 0081 ldd R16,z+0
0024 1181 ldd R17,z+1
0026 0E940000 xcall _ntohs
002A 1983 std y+1,R17
002C 0883 std y+0,R16
002E 20E0 ldi R18,<L4
0030 30E0 ldi R19,>L4
0032 00E0 ldi R16,<_ScratchPad
0034 10E0 ldi R17,>_ScratchPad
0036 0E940000 xcall _sprintf
003A .dbline 177
003A ; if (!SendDebugStr((char*)ScratchPad)) return;
003A 00E0 ldi R16,<_ScratchPad
003C 10E0 ldi R17,>_ScratchPad
003E 0E940000 xcall _SendDebugStr
0042 0023 tst R16
0044 09F4 brne L5
0046 .dbline 177
0046 F7C1 xjmp L1
0048 L5:
0048 .dbline 179
0048 ;
0048 ; if (!SendDebugRStr(tcp_str2)) return;
0048 00E0 ldi R16,<_tcp_str2
004A 10E0 ldi R17,>_tcp_str2
004C 0E940000 xcall _SendDebugRStr
0050 0023 tst R16
0052 09F4 brne L7
0054 .dbline 179
0054 F0C1 xjmp L1
0056 L7:
0056 .dbline 180
0056 ; sprintf((char*)ScratchPad, "%u", ntohs(TCP_Header->DestPort));
0056 E0910400 lds R30,_TCP_Header
005A F0910500 lds R31,_TCP_Header+1
005E 0281 ldd R16,z+2
0060 1381 ldd R17,z+3
0062 0E940000 xcall _ntohs
0066 1983 std y+1,R17
0068 0883 std y+0,R16
006A 20E0 ldi R18,<L4
006C 30E0 ldi R19,>L4
006E 00E0 ldi R16,<_ScratchPad
0070 10E0 ldi R17,>_ScratchPad
0072 0E940000 xcall _sprintf
0076 .dbline 181
0076 ; if (!SendDebugStr((char*)ScratchPad)) return;
0076 00E0 ldi R16,<_ScratchPad
0078 10E0 ldi R17,>_ScratchPad
007A 0E940000 xcall _SendDebugStr
007E 0023 tst R16
0080 09F4 brne L9
0082 .dbline 181
0082 D9C1 xjmp L1
0084 L9:
0084 .dbline 183
0084 ;
0084 ; if (!SendDebugRStr(tcp_str3)) return;
0084 00E0 ldi R16,<_tcp_str3
0086 10E0 ldi R17,>_tcp_str3
0088 0E940000 xcall _SendDebugRStr
008C 0023 tst R16
008E 09F4 brne L11
0090 .dbline 183
0090 D2C1 xjmp L1
0092 L11:
0092 .dbline 184
0092 ; dw = ntohl(TCP_Header->SequenceNum);
0092 E0910400 lds R30,_TCP_Header
0096 F0910500 lds R31,_TCP_Header+1
009A 0481 ldd R16,z+4
009C 1581 ldd R17,z+5
009E 2681 ldd R18,z+6
00A0 3781 ldd R19,z+7
00A2 0E940000 xcall _ntohl
00A6 FE01 movw R30,R28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -