📄 uip.lis
字号:
007C ; uip_udp_conns[c].lport = 0;
007C ; }
007C ; #endif /* UIP_UDP */
007C ;
007C ;
007C ; /* IPv4 initialization. */
007C ; #if UIP_FIXEDADDR == 0
007C ; uip_hostaddr[0] = uip_hostaddr[1] = 0;
007C ; #endif /* UIP_FIXEDADDR */
007C ;
007C ; }
007C ; /*-----------------------------------------------------------------------------------*/
007C ; #if UIP_ACTIVE_OPEN
007C ; struct uip_conn *
007C ; uip_connect(u16_t *ripaddr, u16_t rport)
007C ; {
007C L18:
007C .dbline 212
007C ; register struct uip_conn *conn, *cconn;
007C ;
007C ; /* Find an unused local port. */
007C ; again:
007C ; ++lastport;
007C 80910400 lds R24,_lastport
0080 90910500 lds R25,_lastport+1
0084 0196 adiw R24,1
0086 90930500 sts _lastport+1,R25
008A 80930400 sts _lastport,R24
008E .dbline 214
008E ;
008E ; if(lastport >= 32000) {
008E 8030 cpi R24,0
0090 EDE7 ldi R30,125
0092 9E07 cpc R25,R30
0094 30F0 brlo L19
0096 .dbline 214
0096 .dbline 215
0096 ; lastport = 4096;
0096 80E0 ldi R24,4096
0098 90E1 ldi R25,16
009A 90930500 sts _lastport+1,R25
009E 80930400 sts _lastport,R24
00A2 .dbline 216
00A2 ; }
00A2 L19:
00A2 .dbline 220
00A2 2224 clr R2
00A4 20920300 sts _c,R2
00A8 1FC0 xjmp L24
00AA L21:
00AA .dbline 220
00AA ;
00AA ; /* Check if this port is already in use, and if so try to find
00AA ; another one. */
00AA ; for(c = 0; c < UIP_CONNS; ++c) {
00AA .dbline 221
00AA ; conn = &uip_conns[c];
00AA 20900300 lds R2,_c
00AE 83E2 ldi R24,35
00B0 829D mul R24,R2
00B2 5001 movw R10,R0
00B4 80E0 ldi R24,<_uip_conns
00B6 90E0 ldi R25,>_uip_conns
00B8 A80E add R10,R24
00BA B91E adc R11,R25
00BC .dbline 222
00BC ; if(conn->tcpstateflags != CLOSED &&
00BC F501 movw R30,R10
00BE 218C ldd R2,z+25
00C0 2220 tst R2
00C2 69F0 breq L25
00C4 00910400 lds R16,_lastport
00C8 10910500 lds R17,_lastport+1
00CC 0E94540B xcall _htons
00D0 F501 movw R30,R10
00D2 2480 ldd R2,z+4
00D4 3580 ldd R3,z+5
00D6 2016 cp R2,R16
00D8 3106 cpc R3,R17
00DA 09F4 brne L25
00DC .dbline 223
00DC ; conn->lport == htons(lastport)) {
00DC .dbline 224
00DC ; goto again;
00DC CFCF xjmp L18
00DE L25:
00DE .dbline 226
00DE L22:
00DE .dbline 220
00DE 80910300 lds R24,_c
00E2 8F5F subi R24,255 ; addi 1
00E4 80930300 sts _c,R24
00E8 L24:
00E8 .dbline 220
00E8 80910300 lds R24,_c
00EC 8A30 cpi R24,10
00EE E8F2 brlo L21
00F0 .dbline 229
00F0 ; }
00F0 ; }
00F0 ;
00F0 ;
00F0 ; conn = 0;
00F0 AA24 clr R10
00F2 BB24 clr R11
00F4 .dbline 230
00F4 2224 clr R2
00F6 20920300 sts _c,R2
00FA 26C0 xjmp L30
00FC L27:
00FC .dbline 230
00FC ; for(c = 0; c < UIP_CONNS; ++c) {
00FC .dbline 231
00FC ; cconn = &uip_conns[c];
00FC 20900300 lds R2,_c
0100 83E2 ldi R24,35
0102 829D mul R24,R2
0104 6001 movw R12,R0
0106 80E0 ldi R24,<_uip_conns
0108 90E0 ldi R25,>_uip_conns
010A C80E add R12,R24
010C D91E adc R13,R25
010E .dbline 232
010E ; if(cconn->tcpstateflags == CLOSED) {
010E F601 movw R30,R12
0110 218C ldd R2,z+25
0112 2220 tst R2
0114 11F4 brne L31
0116 .dbline 232
0116 .dbline 233
0116 ; conn = cconn;
0116 5601 movw R10,R12
0118 .dbline 234
0118 ; break;
0118 1CC0 xjmp L29
011A L31:
011A .dbline 236
011A ; }
011A ; if(cconn->tcpstateflags == TIME_WAIT) {
011A F601 movw R30,R12
011C 818D ldd R24,z+25
011E 8730 cpi R24,7
0120 71F4 brne L33
0122 .dbline 236
0122 .dbline 237
0122 ; if(conn == 0 ||
0122 AA20 tst R10
0124 11F4 brne X0
0126 BB20 tst R11
0128 49F0 breq L37
012A X0:
012A E091AF01 lds R30,_uip_conn
012E F091B001 lds R31,_uip_conn+1
0132 228C ldd R2,z+26
0134 F601 movw R30,R12
0136 328C ldd R3,z+26
0138 2314 cp R2,R3
013A 08F4 brsh L35
013C L37:
013C .dbline 238
013C ; cconn->timer > uip_conn->timer) {
013C .dbline 239
013C ; conn = cconn;
013C 5601 movw R10,R12
013E .dbline 240
013E ; }
013E L35:
013E .dbline 241
013E ; }
013E L33:
013E .dbline 242
013E L28:
013E .dbline 230
013E 80910300 lds R24,_c
0142 8F5F subi R24,255 ; addi 1
0144 80930300 sts _c,R24
0148 L30:
0148 .dbline 230
0148 80910300 lds R24,_c
014C 8A30 cpi R24,10
014E 08F4 brsh X2
0150 D5CF xjmp L27
0152 X2:
0152 L29:
0152 .dbline 244
0152 ; }
0152 ;
0152 ; if(conn == 0) {
0152 AA20 tst R10
0154 29F4 brne L38
0156 BB20 tst R11
0158 19F4 brne L38
015A X1:
015A .dbline 244
015A .dbline 245
015A ; return 0;
015A 0027 clr R16
015C 1127 clr R17
015E 48C0 xjmp L17
0160 L38:
0160 .dbline 248
0160 ; }
0160 ;
0160 ; conn->tcpstateflags = SYN_SENT;
0160 82E0 ldi R24,2
0162 F501 movw R30,R10
0164 818F std z+25,R24
0166 .dbline 250
0166 ;
0166 ; conn->snd_nxt[0] = iss[0];
0166 20900600 lds R2,_iss
016A F501 movw R30,R10
016C 2486 std z+12,R2
016E .dbline 251
016E ; conn->snd_nxt[1] = iss[1];
016E 20900700 lds R2,_iss+1
0172 F501 movw R30,R10
0174 2586 std z+13,R2
0176 .dbline 252
0176 ; conn->snd_nxt[2] = iss[2];
0176 20900800 lds R2,_iss+2
017A F501 movw R30,R10
017C 2686 std z+14,R2
017E .dbline 253
017E ; conn->snd_nxt[3] = iss[3];
017E 20900900 lds R2,_iss+3
0182 F501 movw R30,R10
0184 2786 std z+15,R2
0186 .dbline 255
0186 ;
0186 ; conn->initialmss = conn->mss = UIP_TCP_MSS;
0186 86EA ldi R24,1446
0188 95E0 ldi R25,5
018A F501 movw R30,R10
018C 938B std z+19,R25
018E 828B std z+18,R24
0190 F501 movw R30,R10
0192 958B std z+21,R25
0194 848B std z+20,R24
0196 .dbline 257
0196 ;
0196 ; conn->len = 1; /* TCP length of the SYN is one. */
0196 81E0 ldi R24,1
0198 90E0 ldi R25,0
019A F501 movw R30,R10
019C 918B std z+17,R25
019E 808B std z+16,R24
01A0 .dbline 258
01A0 ; conn->nrtx = 0;
01A0 2224 clr R2
01A2 F501 movw R30,R10
01A4 238E std z+27,R2
01A6 .dbline 259
01A6 ; conn->timer = 1; /* Send the SYN next time around. */
01A6 F501 movw R30,R10
01A8 828F std z+26,R24
01AA .dbline 260
01AA ; conn->rto = UIP_RTO;
01AA 83E0 ldi R24,3
01AC F501 movw R30,R10
01AE 808F std z+24,R24
01B0 .dbline 261
01B0 ; conn->sa = 0;
01B0 F501 movw R30,R10
01B2 268A std z+22,R2
01B4 .dbline 262
01B4 ; conn->sv = 16;
01B4 80E1 ldi R24,16
01B6 F501 movw R30,R10
01B8 878B std z+23,R24
01BA .dbline 263
01BA ; conn->lport = htons(lastport);
01BA 00910400 lds R16,_lastport
01BE 10910500 lds R17,_lastport+1
01C2 0E94540B xcall _htons
01C6 F501 movw R30,R10
01C8 1583 std z+5,R17
01CA 0483 std z+4,R16
01CC .dbline 264
01CC ; conn->rport = rport;
01CC F501 movw R30,R10
01CE F782 std z+7,R15
01D0 E682 std z+6,R14
01D2 .dbline 265
01D2 ; conn->ripaddr[0] = ripaddr[0];
01D2 EE81 ldd R30,y+6
01D4 FF81 ldd R31,y+7
01D6 2080 ldd R2,z+0
01D8 3180 ldd R3,z+1
01DA F501 movw R30,R10
01DC 3182 std z+1,R3
01DE 2082 std z+0,R2
01E0 .dbline 266
01E0 ; conn->ripaddr[1] = ripaddr[1];
01E0 EE81 ldd R30,y+6
01E2 FF81 ldd R31,y+7
01E4 2280 ldd R2,z+2
01E6 3380 ldd R3,z+3
01E8 F501 movw R30,R10
01EA 3382 std z+3,R3
01EC 2282 std z+2,R2
01EE .dbline 268
01EE ;
01EE ; return conn;
01EE 8501 movw R16,R10
01F0 .dbline -2
01F0 L17:
01F0 0E940000 xcall pop_gset5x
01F4 2496 adiw R28,4
01F6 .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -