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

📄 ip.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03F2           ;               if (!type) break;                                                                                       // end of option list
 03F2 EE20              tst R14
 03F4 09F4              brne L86
 03F6                   .dbline 217
 03F6 12C0              xjmp L75
 03F8           L86:
 03F8                   .dbline 218
 03F8           ;               if (type == 1) continue;                                                                        // no length byte (NOP option)
 03F8 8E2D              mov R24,R14
 03FA 8130              cpi R24,1
 03FC 09F4              brne L88
 03FE                   .dbline 218
 03FE 0AC0              xjmp L74
 0400           L88:
 0400                   .dbline 220
 0400           ;                                                                                                                                       //
 0400           ;               if (len < 2) len = 2;                                                                           //
 0400 8C2D              mov R24,R12
 0402 8230              cpi R24,2
 0404 10F4              brsh L90
 0406                   .dbline 220
 0406 82E0              ldi R24,2
 0408 C82E              mov R12,R24
 040A           L90:
 040A                   .dbline 224
 040A 8C2D              mov R24,R12
 040C 9927              clr R25
 040E 0297              sbiw R24,2
 0410 480F              add R20,R24
 0412 591F              adc R21,R25
 0414                   .dbline 225
 0414           L74:
 0414                   .dbline 204
 0414 4A15              cp R20,R10
 0416 5B05              cpc R21,R11
 0418 0CF4              brge X5
 041A ABCF              xjmp L73
 041C           X5:
 041C           L75:
 041C                   .dbline 226
 041C           ;                                                                                                                                       //
 041C           ; 
 041C           ;                                                                                                                                       //
 041C           ;               i += (len - 2);                                                                                         //
 041C           ;       }                                                                                                                               //
 041C           ;       i = j;
 041C A501              movw R20,R10
 041E                   .dbline 230
 041E           ; 
 041E           ;       // done
 041E           ; 
 041E           ;       if (!SendDebugRStr(ip_str15)) return;
 041E 00E0              ldi R16,<_ip_str15
 0420 10E0              ldi R17,>_ip_str15
 0422 0E940000          xcall _SendDebugRStr
 0426 0023              tst R16
 0428 09F4              brne L92
 042A                   .dbline 230
 042A 11C0              xjmp L13
 042C           L92:
 042C                   .dbline 231
 042C 1B01              movw R2,R22
 042E 241A              sub R2,R20
 0430 350A              sbc R3,R21
 0432 3982              std y+1,R3
 0434 2882              std y+0,R2
 0436 20E0              ldi R18,<L82
 0438 30E0              ldi R19,>L82
 043A 00E0              ldi R16,<_ScratchPad
 043C 10E0              ldi R17,>_ScratchPad
 043E 0E940000          xcall _sprintf
 0442                   .dbline 232
 0442 00E0              ldi R16,<_ScratchPad
 0444 10E0              ldi R17,>_ScratchPad
 0446 0E940000          xcall _SendDebugStr
 044A 0023              tst R16
 044C 01F4              brne L94
 044E                   .dbline 232
 044E           L94:
 044E                   .dbline -2
 044E           L13:
 044E 2496              adiw R28,4
 0450 0E940000          xcall pop_gset5
 0454                   .dbline 0 ; func end
 0454 0895              ret
 0456                   .dbsym r j 10 I
 0456                   .dbsym r i 20 I
 0456                   .dbsym r len 12 c
 0456                   .dbsym r type 14 c
 0456                   .dbsym r TotalBytes 22 I
 0456                   .dbsym r HeaderIdx 10 I
 0456                   .dbend
 0456                   .dbfunc e IP_FireWalled _IP_FireWalled fc
 0456           ;              i -> R10,R11
 0456           ;            dw1 -> y+2
                        .even
 0456           _IP_FireWalled::
 0456 0E940000          xcall push_gset3
 045A 2697              sbiw R28,6
 045C                   .dbline -1
 045C                   .dbline 241
 045C           ;       sprintf((char*)ScratchPad, "%u\n", TotalBytes - i);
 045C           ;       if (!SendDebugStr((char*)ScratchPad)) return;
 045C           ; }
 045C           ; 
 045C           ; #endif
 045C           ; 
 045C           ; // **************************************************************************
 045C           ; // fire wall
 045C           ; 
 045C           ; bool IP_FireWalled(void)
 045C           ; {     // return TRUE is we are fire walling it
 045C                   .dbline 246
 045C           ;       int     i;
 045C           ;       u32     dw1;
 045C           ; //    u32 dw2;
 045C           ; 
 045C           ;       if (PPP.THEIR_IP.ip32)
 045C 40E0              ldi R20,0
 045E 50E0              ldi R21,0
 0460 60E0              ldi R22,0
 0462 70E0              ldi R23,0
 0464 40901300          lds R4,_PPP+17+2
 0468 50901400          lds R5,_PPP+17+2+1
 046C 20901100          lds R2,_PPP+17
 0470 30901200          lds R3,_PPP+17+1
 0474 2416              cp R2,R20
 0476 3506              cpc R3,R21
 0478 4606              cpc R4,R22
 047A 5706              cpc R5,R23
 047C 79F0              breq L97
 047E                   .dbline 247
 047E           ;       {
 047E                   .dbline 248
 047E           ;               if (IP_Header->SourceIP.ip32 == PPP.THEIR_IP.ip32) return false;                // it's the PPP server - allow it
 047E E0910000          lds R30,_IP_Header
 0482 F0910100          lds R31,_IP_Header+1
 0486 6484              ldd R6,z+12
 0488 7584              ldd R7,z+13
 048A 8684              ldd R8,z+14
 048C 9784              ldd R9,z+15
 048E 6214              cp R6,R2
 0490 7304              cpc R7,R3
 0492 8404              cpc R8,R4
 0494 9504              cpc R9,R5
 0496 11F4              brne L100
 0498                   .dbline 248
 0498 0027              clr R16
 049A 6BC0              xjmp L96
 049C           L100:
 049C                   .dbline 249
 049C           ;       }
 049C           L97:
 049C                   .dbline 250
 049C           ;       if (IP_Header->SourceIP.ip32 == PPP.DNS1_IP.ip32) return false;                         // it's the primary dns server - allow it
 049C 40901700          lds R4,_PPP+21+2
 04A0 50901800          lds R5,_PPP+21+2+1
 04A4 20901500          lds R2,_PPP+21
 04A8 30901600          lds R3,_PPP+21+1
 04AC E0910000          lds R30,_IP_Header
 04B0 F0910100          lds R31,_IP_Header+1
 04B4 6484              ldd R6,z+12
 04B6 7584              ldd R7,z+13
 04B8 8684              ldd R8,z+14
 04BA 9784              ldd R9,z+15
 04BC 6214              cp R6,R2
 04BE 7304              cpc R7,R3
 04C0 8404              cpc R8,R4
 04C2 9504              cpc R9,R5
 04C4 11F4              brne L103
 04C6                   .dbline 250
 04C6 0027              clr R16
 04C8 54C0              xjmp L96
 04CA           L103:
 04CA                   .dbline 251
 04CA           ;       if (IP_Header->SourceIP.ip32 == PPP.DNS2_IP.ip32) return false;                         // it's the secondary dns server - allow it
 04CA 40901B00          lds R4,_PPP+25+2
 04CE 50901C00          lds R5,_PPP+25+2+1
 04D2 20901900          lds R2,_PPP+25
 04D6 30901A00          lds R3,_PPP+25+1
 04DA E0910000          lds R30,_IP_Header
 04DE F0910100          lds R31,_IP_Header+1
 04E2 6484              ldd R6,z+12
 04E4 7584              ldd R7,z+13
 04E6 8684              ldd R8,z+14
 04E8 9784              ldd R9,z+15
 04EA 6214              cp R6,R2
 04EC 7304              cpc R7,R3
 04EE 8404              cpc R8,R4
 04F0 9504              cpc R9,R5
 04F2 11F4              brne L106
 04F4                   .dbline 251
 04F4 0027              clr R16
 04F6 3DC0              xjmp L96
 04F8           L106:
 04F8                   .dbline 253
 04F8           ;                                                                                                                                                               //
 04F8           ;       for (i = 0; ; i++)
 04F8 AA24              clr R10
 04FA BB24              clr R11
 04FC           L109:
 04FC                   .dbline 254
 04FC           ;       {
 04FC                   .dbline 255
 04FC           ;               rmemcpy((char*)&dw1, AllowedIP[i], 4);                                                                  //
 04FC 84E0              ldi R24,4
 04FE 90E0              ldi R25,0
 0500 9983              std y+1,R25
 0502 8883              std y+0,R24
 0504 04E0              ldi R16,4
 0506 10E0              ldi R17,0
 0508 9501              movw R18,R10
 050A 0E940000          xcall empy16s
 050E 9801              movw R18,R16
 0510 80E0              ldi R24,<_AllowedIP
 0512 90E0              ldi R25,>_AllowedIP
 0514 280F              add R18,R24
 0516 391F              adc R19,R25
 0518 8E01              movw R16,R28
 051A 0E5F              subi R16,254  ; offset = 2
 051C 1F4F              sbci R17,255
 051E 0E940000          xcall _rmemcpy
 0522                   .dbline 256
 0522           ;               if (!dw1) break;                                                                                                                // end of list
 0522 40E0              ldi R20,0
 0524 50E0              ldi R21,0
 0526 60E0              ldi R22,0
 0528 70E0              ldi R23,0
 052A FE01              movw R30,R28
 052C 2280              ldd R2,z+2
 052E 3380              ldd R3,z+3
 0530 4480              ldd R4,z+4
 0532 5580              ldd R5,z+5
 0534 2416              cp R2,R20
 0536 3506              cpc R3,R21
 0538 4606              cpc R4,R22
 053A 5706              cpc R5,R23
 053C 09F4              brne L113
 053E                   .dbline 256
 053E 18C0              xjmp L111
 0540           L113:
 0540                   .dbline 257
 0540           ;               if (IP_Header->SourceIP.ip32 == dw1) return false;                                              // allow it
 0540 FE01              movw R30,R28
 0542 2280              ldd R2,z+2
 0544 3380              ldd R3,z+3
 0546 4480              ldd R4,z+4
 0548 5580              ldd R5,z+5
 054A E0910000          lds R30,_IP_Header
 054E F0910100          lds R31,_IP_Header+1
 0552 6484              ldd R6,z+12
 0554 7584              ldd R7,z+13
 0556 8684              ldd R8,z+14
 0558 9784              ldd R9,z+15
 055A 6214              cp R6,R2
 055C 7304              cpc R7,R3
 055E 8404              cpc R8,R4
 0560 9504              cpc R9,R5
 0562 11F4              brne L115
 0564                   .dbline 257
 0564 0027              clr R16
 0566 05C0              xjmp L96
 0568           L115:
 0568                   .dbline 258
 0568           L110:
 0568                   .dbline 253
 0568 C501              movw R24,R10
 056A 0196              adiw R24,1
 056C 5C01              movw R10,R24
 056E                   .dbline 253
 056E C6CF              xjmp L109
 0570           L111:
 0570                   .dbline 266
 0570           ;       }
 0570           ; 
 0570           ; //    rmemcpy((char*)&dw1, SubnetMask, 4);                                                                            //
 0570           ; //    dw2 = IP_Header->SourceIP.ip32 & dw1;                                                                           //
 0570           ; //    dw1 &= PPP.OUR_IP.ip32;                                                                                                         //
 0570           ; //    if (dw1 != dw2) return true;                                                                                            // different subnet - firewall it
 0570           ; 
 0570           ; //    return false;                                                                                                                                   // let it thru
 0570           ;       return true;                                                                                                                                    // firewall it
 0570 01E0              ldi R16,1
 0572                   .dbline -2
 0572           L96:
 0572 2696              adiw R28,6
 0574 0E940000          xcall pop_gset3
 0578                   .dbline 0 ; func end
 0578 0895              ret
 057A                   .dbsym r i 10 I
 057A                   .dbsym l dw1 2 l
 057A                   .dbend
 057A                   .dbfunc e IP_Checksum _IP_Checksum fl
 057A           ;              q -> R10,R11
 057A           ;       checksum -> y+0
 057A           ;              i -> R12,R13
 057A           ;            len -> R14,R15

⌨️ 快捷键说明

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