📄 uip.lis
字号:
0422 9927 clr R25
0424 5C01 movw R10,R24
0426 04C0 xjmp L93
0428 L92:
0428 E881 ldd R30,y+0
042A F981 ldd R31,y+1
042C A38C ldd R10,z+27
042E BB24 clr R11
0430 L93:
0430 03E0 ldi R16,3
0432 10E0 ldi R17,0
0434 9501 movw R18,R10
0436 0E940000 xcall lsl16
043A 202E mov R2,R16
043C E881 ldd R30,y+0
043E F981 ldd R31,y+1
0440 228E std z+26,R2
0442 .dbline 536
0442 ; 4:
0442 ; uip_connr->nrtx);
0442 ; ++(uip_connr->nrtx);
0442 8881 ldd R24,y+0
0444 9981 ldd R25,y+1
0446 4B96 adiw R24,27
0448 FC01 movw R30,R24
044A 8081 ldd R24,z+0
044C 8F5F subi R24,255 ; addi 1
044E 8083 std z+0,R24
0450 .dbline 544
0450 ;
0450 ; /* Ok, so we need to retransmit. We do this differently
0450 ; depending on which state we are in. In ESTABLISHED, we
0450 ; call upon the application so that it may prepare the
0450 ; data for the retransmit. In SYN_RCVD, we resend the
0450 ; SYNACK that we sent earlier and in LAST_ACK we have to
0450 ; retransmit our FINACK. */
0450 ; UIP_STAT(++uip_stat.tcp.rexmit);
0450 80914700 lds R24,_uip_stat+26+12
0454 90914800 lds R25,_uip_stat+26+12+1
0458 0196 adiw R24,1
045A 90934800 sts _uip_stat+26+12+1,R25
045E 80934700 sts _uip_stat+26+12,R24
0462 .dbline 545
0462 E881 ldd R30,y+0
0464 F981 ldd R31,y+1
0466 818D ldd R24,z+25
0468 9927 clr R25
046A 8F70 andi R24,15
046C 9070 andi R25,0
046E 5C01 movw R10,R24
0470 8130 cpi R24,1
0472 E0E0 ldi R30,0
0474 9E07 cpc R25,R30
0476 09F4 brne X36
0478 13C4 xjmp L100
047A X36:
047A 8230 cpi R24,2
047C E0E0 ldi R30,0
047E 9E07 cpc R25,R30
0480 A9F0 breq L101
0482 8330 cpi R24,3
0484 E0E0 ldi R30,0
0486 9E07 cpc R25,R30
0488 A9F0 breq L105
048A 8430 cpi R24,4
048C E0E0 ldi R30,0
048E 9E07 cpc R25,R30
0490 09F4 brne X37
0492 41C6 xjmp L108
0494 X37:
0494 8630 cpi R24,6
0496 E0E0 ldi R30,0
0498 9E07 cpc R25,R30
049A 09F4 brne X38
049C 3CC6 xjmp L108
049E X38:
049E 8830 cpi R24,8
04A0 E0E0 ldi R30,0
04A2 9E07 cpc R25,R30
04A4 09F4 brne X39
04A6 37C6 xjmp L108
04A8 X39:
04A8 0C944A0B xjmp L112
04AC X5:
04AC .dbline 545
04AC ; switch(uip_connr->tcpstateflags & TS_MASK) {
04AC .dbline 549
04AC ; case SYN_RCVD:
04AC ; /* In the SYN_RCVD state, we should retransmit our
04AC ; SYNACK. */
04AC ; goto tcp_send_synack;
04AC L101:
04AC .dbline 554
04AC ;
04AC ; #if UIP_ACTIVE_OPEN
04AC ; case SYN_SENT:
04AC ; /* In the SYN_SENT state, we retransmit out SYN. */
04AC ; BUF->flags = 0;
04AC 2224 clr R2
04AE 2092EC01 sts _uip_buf+14+33,R2
04B2 .dbline 555
04B2 ; goto tcp_send_syn;
04B2 F9C3 xjmp L104
04B4 L105:
04B4 .dbline 563
04B4 ; #endif /* UIP_ACTIVE_OPEN */
04B4 ;
04B4 ; case ESTABLISHED:
04B4 ; /* In the ESTABLISHED state, we call upon the application
04B4 ; to do the actual retransmit after which we jump into
04B4 ; the code for sending out the packet (the apprexmit
04B4 ; label). */
04B4 ; uip_len = 0;
04B4 2224 clr R2
04B6 3324 clr R3
04B8 3092B601 sts _uip_len+1,R3
04BC 2092B501 sts _uip_len,R2
04C0 .dbline 564
04C0 ; uip_slen = 0;
04C0 3092B401 sts _uip_slen+1,R3
04C4 2092B301 sts _uip_slen,R2
04C8 .dbline 565
04C8 ; uip_flags = UIP_REXMIT;
04C8 84E0 ldi R24,4
04CA 80932000 sts _uip_flags,R24
04CE .dbline 566
04CE ; UIP_APPCALL();
04CE 0E940000 xcall _httpd_appcall
04D2 .dbline 567
04D2 ; goto apprexmit;
04D2 42C7 xjmp L106
04D4 X6:
04D4 .dbline 573
04D4 ;
04D4 ; case FIN_WAIT_1:
04D4 ; case CLOSING:
04D4 ; case LAST_ACK:
04D4 ; /* In all these states we should retransmit a FINACK. */
04D4 ; goto tcp_send_finack;
04D4 .dbline 576
04D4 ;
04D4 ; }
04D4 ; }
04D4 .dbline 577
04D4 L81:
04D4 .dbline 577
04D4 ; } else if((uip_connr->tcpstateflags & TS_MASK) == ESTABLISHED) {
04D4 E881 ldd R30,y+0
04D6 F981 ldd R31,y+1
04D8 818D ldd R24,z+25
04DA 8F70 andi R24,15
04DC 8330 cpi R24,3
04DE 11F0 breq X40
04E0 0C944A0B xjmp L112
04E4 X40:
04E4 .dbline 577
04E4 .dbline 580
04E4 ; /* If there was no need for a retransmission, we poll the
04E4 ; application for new data. */
04E4 ; uip_len = 0;
04E4 2224 clr R2
04E6 3324 clr R3
04E8 3092B601 sts _uip_len+1,R3
04EC 2092B501 sts _uip_len,R2
04F0 .dbline 581
04F0 ; uip_slen = 0;
04F0 3092B401 sts _uip_slen+1,R3
04F4 2092B301 sts _uip_slen,R2
04F8 .dbline 582
04F8 ; uip_flags = UIP_POLL;
04F8 88E0 ldi R24,8
04FA 80932000 sts _uip_flags,R24
04FE .dbline 583
04FE ; UIP_APPCALL();
04FE 0E940000 xcall _httpd_appcall
0502 .dbline 584
0502 ; goto appsend;
0502 B4C6 xjmp L111
0504 X7:
0504 .dbline 586
0504 ; }
0504 ; }
0504 .dbline 587
0504 ; goto drop;
0504 L63:
0504 .dbline 604
0504 ; }
0504 ; #if UIP_UDP
0504 ; if(flag == UIP_UDP_TIMER) {
0504 ; if(uip_udp_conn->lport != 0) {
0504 ; uip_appdata = &uip_buf[UIP_LLH_LEN + 28];
0504 ; uip_len = uip_slen = 0;
0504 ; uip_flags = UIP_POLL;
0504 ; UIP_UDP_APPCALL();
0504 ; goto udp_send;
0504 ; } else {
0504 ; goto drop;
0504 ; }
0504 ; }
0504 ; #endif
0504 ;
0504 ; /* This is where the input processing starts. */
0504 ; UIP_STAT(++uip_stat.ip.recv);
0504 80912300 lds R24,_uip_stat+2
0508 90912400 lds R25,_uip_stat+2+1
050C 0196 adiw R24,1
050E 90932400 sts _uip_stat+2+1,R25
0512 80932300 sts _uip_stat+2,R24
0516 .dbline 610
0516 ;
0516 ;
0516 ; /* Start of IPv4 input header processing code. */
0516 ;
0516 ; /* Check validity of the IP header. */
0516 ; if(BUF->vhl != 0x45) { /* IP version and header length. */
0516 E0E0 ldi R30,<_uip_buf+14
0518 F0E0 ldi R31,>_uip_buf+14
051A 8081 ldd R24,z+0
051C 8534 cpi R24,69
051E A1F0 breq L114
0520 .dbline 610
0520 .dbline 611
0520 ; UIP_STAT(++uip_stat.ip.drop);
0520 80912100 lds R24,_uip_stat
0524 90912200 lds R25,_uip_stat+1
0528 0196 adiw R24,1
052A 90932200 sts _uip_stat+1,R25
052E 80932100 sts _uip_stat,R24
0532 .dbline 612
0532 ; UIP_STAT(++uip_stat.ip.vhlerr);
0532 80912700 lds R24,_uip_stat+6
0536 90912800 lds R25,_uip_stat+6+1
053A 0196 adiw R24,1
053C 90932800 sts _uip_stat+6+1,R25
0540 80932700 sts _uip_stat+6,R24
0544 .dbline 613
0544 ; UIP_LOG("ip: invalid version or header length.");
0544 .dbline 614
0544 ; goto drop;
0544 0C944A0B xjmp L112
0548 L114:
0548 .dbline 621
0548 ; }
0548 ;
0548 ; /* Check the size of the packet. If the size reported to us in
0548 ; uip_len doesn't match the size reported in the IP header, there
0548 ; has been a transmission error and we drop the packet. */
0548 ;
0548 ; if(BUF->len[0] != (uip_len >> 8)) { /* IP length, high byte. */
0548 2090B501 lds R2,_uip_len
054C 3090B601 lds R3,_uip_len+1
0550 232C mov R2,R3
0552 3324 clr R3
0554 4090CD01 lds R4,_uip_buf+14+2
0558 5524 clr R5
055A 4214 cp R4,R2
055C 5304 cpc R5,R3
055E 79F0 breq L118
0560 .dbline 621
0560 .dbline 622
0560 ; uip_len = (uip_len & 0xff) | (BUF->len[0] << 8);
0560 242C mov R2,R4
0562 3324 clr R3
0564 322C mov R3,R2
0566 2224 clr R2
0568 8091B501 lds R24,_uip_len
056C 9091B601 lds R25,_uip_len+1
0570 9070 andi R25,0
0572 8229 or R24,R2
0574 9329 or R25,R3
0576 9093B601 sts _uip_len+1,R25
057A 8093B501 sts _uip_len,R24
057E .dbline 623
057E ; }
057E L118:
057E .dbline 624
057E ; if(BUF->len[1] != (uip_len & 0xff)) { /* IP length, low byte. */
057E 8091B501 lds R24,_uip_len
0582 9091B601 lds R25,_uip_len+1
0586 9070 andi R25,0
0588 2090CE01 lds R2,_uip_buf+14+2+1
058C 3324 clr R3
058E 2816 cp R2,R24
0590 3906 cpc R3,R25
0592 61F0 breq L124
0594 .dbline 624
0594 .dbline 625
0594 ; uip_len = (uip_len & 0xff00) | BUF->len[1];
0594 3324 clr R3
0596 8091B501 lds R24,_uip_len
059A 9091B601 lds R25,_uip_len+1
059E 8070 andi R24,0
05A0 8229 or R24,R2
05A2 9329 or R25,R3
05A4 9093B601 sts _uip_len+1,R25
05A8 8093B501 sts _uip_len,R24
05AC .dbline 626
05AC ; }
05AC L124:
05AC .dbline 629
05AC ;
05AC ; /* Check the fragment flag. */
05AC ; if((BUF->ipoffset[0] & 0x3f) != 0 ||
05AC 8091D101 lds R24,_uip_buf+14+6
05B0 8F73 andi R24,63
05B2 21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -