⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpip.lst

📁 msp430 cs8900a msp430 servermsp430 servermsp430 servermsp430 servermsp430 server
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   0000E2   0424         JEQ     ??ProcessEthIAFrame_4
   \   0000E4   053C         JMP     ??ProcessEthIAFrame_1
    398                      {
    399                        case PROT_ICMP :
    400                          ProcessICMPFrame();
   \                     ??ProcessEthIAFrame_3:
   \   0000E6   B012....     CALL    #ProcessICMPFrame
   \   0000EA   023C         JMP     ??ProcessEthIAFrame_1
    401                          break;
    402                        case PROT_TCP :
    403                          ProcessTCPFrame();
   \                     ??ProcessEthIAFrame_4:
   \   0000EC   B012....     CALL    #ProcessTCPFrame
    404                          break;
    405                        case PROT_UDP :                              // not implemented!
    406                          break;
    407                      }
    408                  }      
    409                break;
    410              }
    411            }
    412          }
   \                     ??ProcessEthIAFrame_1:
   \   0000F0   2152         ADD.W   #0x4, SP
   \   0000F2   3A41         POP.W   R10
   \   0000F4   3041         RET
    413          //------------------------------------------------------------------------------
    414          // easyWEB internal function
    415          // we've just rec'd an ICMP-frame (Internet Control Message Protocol)
    416          // check what to do and branch to the appropriate sub-function
    417          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    418          static void ProcessICMPFrame(void)
   \                     ProcessICMPFrame:
    419          {
   \   000000   0A12         PUSH.W  R10
    420            unsigned int ICMPTypeAndCode;
    421          
    422            ICMPTypeAndCode = ReadFrameBE8900();           // get Message Type and Code
   \   000002   B012....     CALL    #ReadFrameBE8900
   \   000006   0A4C         MOV.W   R12, R10
    423            ReadFrameBE8900();                             // ignore ICMP checksum
   \   000008   B012....     CALL    #ReadFrameBE8900
    424          
    425            switch (ICMPTypeAndCode >> 8)                  // check type
   \   00000C   8A10         SWPB    R10
   \   00000E   3AF0FF00     AND.W   #0xff, R10
   \   000012   7A82         SUB.B   #0x8, R10
   \   000014   0220         JNE     ??ProcessICMPFrame_1
    426            {
    427              case ICMP_ECHO :                             // is echo request?
    428                PrepareICMP_ECHO_REPLY();                  // echo as much as we can...
   \   000016   B012....     CALL    #PrepareICMP_ECHO_REPLY
    429                break;
    430            }
    431          }
   \                     ??ProcessICMPFrame_1:
   \   00001A   3A41         POP.W   R10
   \   00001C   3041         RET
    432          //------------------------------------------------------------------------------
    433          // easyWEB internal function
    434          // we've just rec'd an TCP-frame (Transmission Control Protocol)
    435          // this function mainly implements the TCP state machine according to RFC793
    436          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    437          static void ProcessTCPFrame(void)
   \                     ProcessTCPFrame:
    438          {
   \   000000   0A12         PUSH.W  R10
   \   000002   0B12         PUSH.W  R11
   \   000004   0812         PUSH.W  R8
   \   000006   0912         PUSH.W  R9
   \   000008   0612         PUSH.W  R6
   \   00000A   0712         PUSH.W  R7
   \   00000C   0412         PUSH.W  R4
    439            unsigned int TCPSegSourcePort;                 // segment's source port
    440            unsigned int TCPSegDestPort;                   // segment's destination port
    441            unsigned long TCPSegSeq;                       // segment's sequence number
    442            unsigned long TCPSegAck;                       // segment's acknowledge number
    443            unsigned int TCPCode;                          // TCP code and header length
    444            unsigned char TCPHeaderSize;                   // real TCP header length
    445            unsigned int NrOfDataBytes;                    // real number of data
    446              
    447            TCPSegSourcePort = ReadFrameBE8900();                    // get ports
   \   00000E   B012....     CALL    #ReadFrameBE8900
   \   000012   074C         MOV.W   R12, R7
    448            TCPSegDestPort = ReadFrameBE8900();
   \   000014   B012....     CALL    #ReadFrameBE8900
    449          
    450            if (TCPSegDestPort != TCPLocalPort) return;              // drop segment if port doesn't match
   \   000018   1C92....     CMP.W   &TCPLocalPort, R12
   \   00001C   ....         JEQ     $+6
   \   00001E   3040....     BR      #??ProcessTCPFrame_0
    451          
    452            TCPSegSeq = (unsigned long)ReadFrameBE8900() << 16;      // get segment sequence nr.
   \   000022   B012....     CALL    #ReadFrameBE8900
   \   000026   084C         MOV.W   R12, R8
   \   000028   0943         MOV.W   #0x0, R9
   \   00002A   0948         MOV.W   R8, R9
   \   00002C   0843         MOV.W   #0x0, R8
    453            TCPSegSeq |= ReadFrameBE8900();
   \   00002E   B012....     CALL    #ReadFrameBE8900
   \   000032   0D43         MOV.W   #0x0, R13
   \   000034   08DC         BIS.W   R12, R8
   \   000036   09DD         BIS.W   R13, R9
    454          
    455            TCPSegAck = (unsigned long)ReadFrameBE8900() << 16;      // get segment acknowledge nr.
   \   000038   B012....     CALL    #ReadFrameBE8900
   \   00003C   0A4C         MOV.W   R12, R10
   \   00003E   0B43         MOV.W   #0x0, R11
   \   000040   0B4A         MOV.W   R10, R11
   \   000042   0A43         MOV.W   #0x0, R10
    456            TCPSegAck |= ReadFrameBE8900();
   \   000044   B012....     CALL    #ReadFrameBE8900
   \   000048   0D43         MOV.W   #0x0, R13
   \   00004A   0ADC         BIS.W   R12, R10
   \   00004C   0BDD         BIS.W   R13, R11
    457          
    458            TCPCode = ReadFrameBE8900();                             // get control bits, header length...
   \   00004E   B012....     CALL    #ReadFrameBE8900
   \   000052   064C         MOV.W   R12, R6
    459          
    460            TCPHeaderSize = (TCPCode & DATA_OFS_MASK) >> 10;         // header length in bytes
   \   000054   0C46         MOV.W   R6, R12
   \   000056   3CF000F0     AND.W   #0xf000, R12
   \   00005A   8C10         SWPB    R12
   \   00005C   3CF0FF00     AND.W   #0xff, R12
   \   000060   0C11         RRA.W   R12
   \   000062   0C11         RRA.W   R12
    461            NrOfDataBytes = RecdIPFrameLength - IP_HEADER_SIZE - TCPHeaderSize;     // seg. text length
   \   000064   1442....     MOV.W   &RecdIPFrameLength, R4
   \   000068   3450ECFF     ADD.W   #0xffec, R4
   \   00006C   3CF0FF00     AND.W   #0xff, R12
   \   000070   048C         SUB.W   R12, R4
    462          
    463            if (NrOfDataBytes > MAX_TCP_RX_DATA_SIZE) return;        // drop, packet too large for us :'(
   \   000072   34901902     CMP.W   #0x219, R4
   \   000076   ....         JNC     $+6
   \   000078   3040....     BR      #??ProcessTCPFrame_0
    464          
    465            if (TCPHeaderSize > TCP_HEADER_SIZE)                     // ignore options if any
   \   00007C   7C901500     CMP.B   #0x15, R12
   \   000080   0628         JNC     ??ProcessTCPFrame_1
    466              DummyReadFrame8900(TCPHeaderSize - TCP_HEADER_SIZE);
   \   000082   3CF0FF00     AND.W   #0xff, R12
   \   000086   3C50ECFF     ADD.W   #0xffec, R12
   \   00008A   B012....     CALL    #DummyReadFrame8900
    467          
    468            switch (TCPStateMachine)                                 // implement the TCP state machine
   \                     ??ProcessTCPFrame_1:
   \   00008E   5E42....     MOV.B   &TCPStateMachine, R14
   \   000092   4E83         SUB.B   #0x0, R14
   \   000094   0524         JEQ     ??ProcessTCPFrame_2
   \   000096   5E83         SUB.B   #0x1, R14
   \   000098   3E24         JEQ     ??ProcessTCPFrame_3
   \   00009A   5E83         SUB.B   #0x1, R14
   \   00009C   8B24         JEQ     ??ProcessTCPFrame_4
   \   00009E   F73C         JMP     ??ProcessTCPFrame_5
    469            {                                                        // RFC793
    470              case CLOSED :
    471                if (!(TCPCode & TCP_CODE_RST))
   \                     ??ProcessTCPFrame_2:
   \   0000A0   26B2         BIT.W   #0x4, R6
   \   0000A2   EE2D         JC      ??ProcessTCPFrame_0
    472                {
    473                  TCPRemotePort = TCPSegSourcePort;                  // get remote TCP port
   \   0000A4   8247....     MOV.W   R7, &TCPRemotePort
    474                  
    475                  RemoteMAC[0] = RecdFrameMAC[0];                    // save opponents MAC and IP
   \   0000A8   9242........ MOV.W   &RecdFrameMAC, &RemoteMAC
    476                  RemoteMAC[1] = RecdFrameMAC[1];                    // for later use
   \   0000AE   9242........ MOV.W   &RecdFrameMAC + 2, &RemoteMAC + 2
    477                  RemoteMAC[2] = RecdFrameMAC[2];
   \   0000B4   9242........ MOV.W   &RecdFrameMAC + 4, &RemoteMAC + 4
    478                  RemoteIP[0] = RecdFrameIP[0];
   \   0000BA   9242........ MOV.W   &RecdFrameIP, &RemoteIP
    479                  RemoteIP[1] = RecdFrameIP[1];
   \   0000C0   9242........ MOV.W   &RecdFrameIP + 2, &RemoteIP + 2
    480                  
    481                  if (TCPCode & TCP_CODE_ACK)                        // make the reset sequence
   \   0000C6   36B01000     BIT.W   #0x10, R6
   \   0000CA   0A28         JNC     ??ProcessTCPFrame_6
    482                  {                                                  // acceptable to the other
    483                    PrepareTCP_FRAME(TCPSegAck, 0, TCP_CODE_RST);    // TCP
   \   0000CC   30120400     PUSH.W  #0x4
   \   0000D0   0E43         MOV.W   #0x0, R14
   \   0000D2   0F43         MOV.W   #0x0, R15
   \   0000D4   0C4A         MOV.W   R10, R12
   \   0000D6   0D4B         MOV.W   R11, R13
   \   0000D8   B012....     CALL    #PrepareTCP_FRAME
   \   0000DC   2153         ADD.W   #0x2, SP
   \   0000DE   D03D         JMP     ??ProcessTCPFrame_0
    484                  }
    485                  else
    486                  {
    487                    TCPAckNr = TCPSegSeq + NrOfDataBytes;
   \                     ??ProcessTCPFrame_6:
   \   0000E0   0E44         MOV.W   R4, R14
   \   0000E2   0F43         MOV.W   #0x0, R15
   \   0000E4   085E         ADD.W   R14, R8
   \   0000E6   096F         ADDC.W  R15, R9
   \   0000E8   8248....     MOV.W   R8, &TCPAckNr
   \   0000EC   8249....     MOV.W   R9, &TCPAckNr + 2
    488                    if (TCPCode & (TCP_CODE_SYN | TCP_CODE_FIN)) TCPAckNr++;
   \   0000F0   76B00300     BIT.B   #0x3, R6
   \   0000F4   0424         JEQ     ??ProcessTCPFrame_7
   \   0000F6   9253....     ADD.W   #0x1, &TCPAckNr
   \   0000FA   8263....     ADDC.W  #0x0, &TCPAckNr + 2
    489                    PrepareTCP_FRAME(0, TCPAckNr, TCP_CODE_RST | TCP_CODE_ACK);
   \                     ??ProcessTCPFrame_7:
   \   0000FE   30121400     PUSH.W  #0x14
   \   000102   1E42....     MOV.W   &TCPAckNr, R14
   \   000106   1F42....     MOV.W   &TCPAckNr + 2, R15
   \   00010A   0C43         MOV.W   #0x0, R12
   \   00010C   0D43         MOV.W   #0x0, R13
   \   00010E   B012....     CALL    #PrepareTCP_FRAME
   \   000112   2153         ADD.W   #0x2, SP
   \   000114   B53D         JMP     ??ProcessTCPFrame_0
    490                  }
    491                }
    492                break;
    493              case LISTENING :
    494                if (!(TCPCode & TCP_CODE_RST))                       // ignore segment containing RST
   \                     ??ProcessTCPFrame_3:
   \   000116   26B2         BIT.W   #0x4, R6
   \   000118   B32D         JC      ??ProcessTCPFrame_0
    495                {
    496                  TCPRemotePort = TCPSegSourcePort;                  // get remote TCP port
   \   00011A   8247....     MOV.W   R7, &TCPRemotePort
    497          
    498                  RemoteMAC[0] = RecdFrameMAC[0];                    // save opponents MAC and IP
   \   00011E   9242........ MOV.W   &RecdFrameMAC, &RemoteMAC
    499                  RemoteMAC[1] = RecdFrameMAC[1];                    // for later use
   \   000124   9242........ MOV.W   &RecdFrameMAC + 2, &RemoteMAC + 2
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -