📄 ip.lis
字号:
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 + -