Network stack: real socket numbers, comments, code cleanup

git-svn-id: svn://kolibrios.org@922 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Mihail Semenyako (mike.dld)
2008-11-16 23:05:02 +00:00
parent bbf8c5f14d
commit 22720e823e
8 changed files with 249 additions and 384 deletions

View File

@@ -7,8 +7,6 @@
;; ;;
;; TCP Processes for Menuet OS TCP/IP stack ;;
;; ;;
;; Version 0.6 4th July 2004 ;;
;; ;;
;; Copyright 2002 Mike Hibbett, mikeh@oceanfree.net ;;
;; ;;
;; See file COPYING for details ;;
@@ -125,7 +123,7 @@ proc tcp_tcb_handler stdcall uses ebx
or ebx, ebx
jz .exit
DEBUGF 1, "K : %x: %x-%x-%x-%u\n", ebx, [ebx + SOCKET.LocalPort]:4, [ebx + SOCKET.RemoteIP], [ebx + SOCKET.RemotePort]:4, [ebx + SOCKET.TCBState]
DEBUGF 1, "K : %x-%x: %x-%x-%x-%u\n", [ebx + SOCKET.PID]:2, [ebx + SOCKET.Number]:2, [ebx + SOCKET.LocalPort]:4, [ebx + SOCKET.RemoteIP], [ebx + SOCKET.RemotePort]:4, [ebx + SOCKET.TCBState]
cmp [ebx + SOCKET.TCBTimer], 0
jne .decrement_tcb
@@ -177,7 +175,6 @@ proc tcp_tx_handler stdcall
.next_resendq:
cmp ecx, NUMRESENDENTRIES
je .exit ; None left
;cmp [esi], byte 0xFF ; XTODO: 0xff -> 0
cmp dword[esi + 4], 0
jne @f ; found one
inc ecx
@@ -192,7 +189,6 @@ proc tcp_tx_handler stdcall
jmp .next_resendq ; Timer not zero, so move on
@@:
;mov bl, 0xff ; XTODO: bl -> ebx, 0xff -> 0
xor ebx, ebx
; restart timer, and decrement retries
; After the first resend, back of on next, by a factor of 5
@@ -201,7 +197,6 @@ proc tcp_tx_handler stdcall
jnz @f
; retries now 0, so delete from queue
;xchg [esi], bl ; XTODO: bl -> ebx
xchg [esi + 4], ebx
@@: ; resend packet
@@ -213,10 +208,8 @@ proc tcp_tx_handler stdcall
jne .tth004z
; TODO - try again in 10ms.
;cmp bl, 0xff ; XTODO: 0xff -> 0
test ebx, ebx
jnz @f
;mov [esi], bl ; XTODO: bl -> ebx
mov [esi + 4], ebx
@@: ; Mark it to expire in 10ms - 1 tick
@@ -310,9 +303,6 @@ proc tcp_rx stdcall uses ebx
or ebx, ebx
jz .next_socket.1.exit
cmp [ebx + SOCKET.Status], SOCK_OPEN
jne .next_socket.1
; DEBUGF 1, "K : tcp_rx - 1.dport: %x - %x\n", [edx + 20 + TCP_PACKET.DestinationPort]:4, [ebx + SOCKET.LocalPort]:4
mov ax, [edx + 20 + TCP_PACKET.DestinationPort] ; get the dest. port from the TCP hdr
@@ -349,9 +339,6 @@ proc tcp_rx stdcall uses ebx
or ebx, ebx
jz .next_socket.2.exit
cmp [ebx + SOCKET.Status], SOCK_OPEN
jne .next_socket.2
; DEBUGF 1, "K : tcp_rx - 2.dport: %x - %x\n", [edx + 20 + TCP_PACKET.DestinationPort]:4, [ebx + SOCKET.LocalPort]:4
mov ax, [edx + 20 + TCP_PACKET.DestinationPort] ; get the dest. port from the TCP hdr
@@ -387,9 +374,6 @@ proc tcp_rx stdcall uses ebx
or ebx, ebx
jz .next_socket.3.exit
cmp [ebx + SOCKET.Status], SOCK_OPEN
jne .next_socket.3
; DEBUGF 1, "K : tcp_rx - 3.dport: %x - %x\n", [edx + 20 + TCP_PACKET.DestinationPort]:4, [ebx + SOCKET.LocalPort]:4
mov ax, [edx + 20 + TCP_PACKET.DestinationPort] ; get destination port from the TCP hdr
@@ -415,16 +399,7 @@ proc tcp_rx stdcall uses ebx
DEBUGF 1, "K : tcp_rx - dumped\n"
DEBUGF 1, "K : --------: %x-%x-%x (flags: %x)\n", [edx + 20 + TCP_PACKET.DestinationPort]:4, [edx + IP_PACKET.SourceAddress], [edx + 20 + TCP_PACKET.SourcePort]:4, [edx + 20 + TCP_PACKET.Flags]:2
; mov ebx, net_sockets
;
; .next_socket.4:
; mov ebx, [ebx + SOCKET.NextPtr]
; or ebx, ebx
; jz .next_socket.4.exit
; DEBUGF 1, "K : %x: %x-%x-%x-%u\n", ebx, [ebx + SOCKET.LocalPort]:4, [ebx + SOCKET.RemoteIP], [ebx + SOCKET.RemotePort]:4, [ebx + SOCKET.TCBState]
; jne .next_socket.4
;
; .next_socket.4.exit:
inc [dumped_rx_count]
jmp .exit
@@ -655,7 +630,6 @@ proc tcpStateMachine stdcall, sockAddr:DWORD
.next_resendq:
cmp ecx, NUMRESENDENTRIES
je .call_handler ; None left
;cmp [esi], al ; XTODO: al -> eax
cmp [esi + 4], eax
je @f ; found one
inc ecx
@@ -696,7 +670,6 @@ proc tcpStateMachine stdcall, sockAddr:DWORD
add esi, 8
jmp .next_resendq
;@@: mov byte[esi], 0xff ; XTODO: 0xff -> 0
@@: mov dword[esi + 4], 0
inc ecx
add esi, 8
@@ -845,16 +818,16 @@ proc stateTCB_SYN_RECEIVED stdcall, sockAddr:DWORD
; For now, if the packet is an ACK, process it,
; If not, ignore it
test [edx + 20 + TCP_PACKET.Flags], TH_RST ;xxx
jz .check_ack ;xxx
test [edx + 20 + TCP_PACKET.Flags], TH_RST
jz .check_ack
push [ebx + SOCKET.OrigRemotePort] [ebx + SOCKET.OrigRemoteIP]
pop [ebx + SOCKET.RemoteIP] [ebx + SOCKET.RemotePort]
mov [ebx + SOCKET.TCBState], TCB_LISTEN ;xxx
jmp .exit ;xxx
mov [ebx + SOCKET.TCBState], TCB_LISTEN
jmp .exit
.check_ack: ;xxx
.check_ack:
; Look at control flags - expecting an ACK
test [edx + 20 + TCP_PACKET.Flags], TH_ACK
jz .exit
@@ -871,10 +844,8 @@ proc stateTCB_ESTABLISHED stdcall, sockAddr:DWORD
; OR both...
; Did we receive a FIN or RST?
;xxx test [edx + 20 + TCP_PACKET.Flags], TH_FIN + TH_RST
;xxx jz .check_ack
test [edx + 20 + TCP_PACKET.Flags], TH_FIN ;xxx
jz .check_ack ;xxx
test [edx + 20 + TCP_PACKET.Flags], TH_FIN
jz .check_ack
; It was a fin or reset.
@@ -890,14 +861,12 @@ proc stateTCB_ESTABLISHED stdcall, sockAddr:DWORD
.next_resendq:
cmp ecx, NUMRESENDENTRIES
je .last_resendq ; None left
;cmp [esi], al ; XTODO: al -> eax
cmp [esi + 4], eax
je @f ; found one
inc ecx
add esi, 8
jmp .next_resendq
;@@: mov byte[esi], 0xff ; XTODO: 0xff -> 0
@@: mov dword[esi + 4], 0
inc ecx
add esi, 8
@@ -906,13 +875,6 @@ proc stateTCB_ESTABLISHED stdcall, sockAddr:DWORD
.last_resendq:
popad
;xxx ; was it a reset?
;xxx test [edx + 20 + TCP_PACKET.Flags], TH_RST
;xxx jz @f
;xxx mov [ebx + SOCKET.TCBState], TCB_CLOSED
;xxx jmp .exit
@@: ; Send an ACK to that fin, and enter closewait state
mov [ebx + SOCKET.TCBState], TCB_CLOSE_WAIT
@@ -1158,11 +1120,6 @@ proc stateTCB_LAST_ACK stdcall, sockAddr:DWORD
; delete the socket
stdcall net_socket_free, ebx
; mov edi, ebx
; xor eax, eax
; mov ecx, SOCKETHEADERSIZE
; cld
; rep stosb
.exit:
ret