forked from KolibriOS/kolibrios
Collect some more TCP statistics.
git-svn-id: svn://kolibrios.org@5442 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f6f01fd6de
commit
b23bd6c7e3
@ -98,9 +98,9 @@ struct TCP_SOCKET IP_SOCKET
|
||||
;----------------------
|
||||
; Transmit timing stuff
|
||||
t_idle dd ?
|
||||
t_rtt dd ?
|
||||
t_rtt dd ? ; round trip time
|
||||
t_rtseq dd ?
|
||||
t_srtt dd ?
|
||||
t_srtt dd ? ; smoothed round trip time
|
||||
t_rttvar dd ?
|
||||
t_rttmin dd ?
|
||||
max_sndwnd dd ?
|
||||
@ -1974,14 +1974,8 @@ SOCKET_free:
|
||||
jnz .no_tcp
|
||||
|
||||
mov ebx, eax
|
||||
cmp [ebx + STREAM_SOCKET.rcv.start_ptr], 0
|
||||
je @f
|
||||
stdcall kernel_free, [ebx + STREAM_SOCKET.rcv.start_ptr]
|
||||
@@:
|
||||
cmp [ebx + STREAM_SOCKET.snd.start_ptr], 0
|
||||
je @f
|
||||
stdcall kernel_free, [ebx + STREAM_SOCKET.snd.start_ptr]
|
||||
@@:
|
||||
mov eax, ebx
|
||||
.no_tcp:
|
||||
|
||||
|
@ -394,13 +394,18 @@ endl
|
||||
|
||||
pop ecx
|
||||
cmp eax, TCP_PAWS_IDLE
|
||||
jle .drop_after_ack ; TODO: update stats
|
||||
jle .paws_drop
|
||||
push ecx
|
||||
|
||||
mov [ebx + TCP_SOCKET.ts_recent], 0 ; timestamp was invalid, fix it.
|
||||
.no_paws:
|
||||
jmp .opt_loop
|
||||
|
||||
.paws_drop:
|
||||
inc [TCPS_rcvduppack] ; update stats
|
||||
add [TCPS_rcvdupbyte], ecx
|
||||
inc [TCPS_pawsdrop]
|
||||
jmp .drop_after_ack
|
||||
|
||||
.no_options:
|
||||
|
||||
pop ecx
|
||||
@ -630,6 +635,8 @@ endl
|
||||
or [ebx + TCP_SOCKET.t_flags], TF_ACKNOW
|
||||
mov eax, ecx
|
||||
|
||||
inc [TCPS_rcvpartduppack]
|
||||
|
||||
;;; TODO: update stats
|
||||
|
||||
;-----------------------------------------------
|
||||
@ -662,7 +669,7 @@ endl
|
||||
|
||||
mov eax, ebx
|
||||
call TCP_close
|
||||
;;; TODO: update stats
|
||||
inc [TCPS_rcvafterclose]
|
||||
jmp .respond_seg_reset
|
||||
|
||||
;----------------------------------------
|
||||
@ -985,17 +992,14 @@ endl
|
||||
mov eax, [edx + TCP_header.AckNumber]
|
||||
cmp eax, [ebx + TCP_SOCKET.SND_MAX]
|
||||
jbe @f
|
||||
|
||||
;;; TODO: update stats
|
||||
inc [TCPS_rcvacktoomuch]
|
||||
jmp .drop_after_ack
|
||||
|
||||
@@:
|
||||
|
||||
mov edi, [edx + TCP_header.AckNumber]
|
||||
sub edi, [ebx + TCP_SOCKET.SND_UNA] ; now we got the number of acked bytes in edi
|
||||
|
||||
;;; TODO: update stats
|
||||
|
||||
inc [TCPS_rcvackpack]
|
||||
add [TCPS_rcvackbyte], edi
|
||||
DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_input: acceptable ACK for %u bytes\n", edi
|
||||
|
||||
;------------------------------------------
|
||||
@ -1209,6 +1213,8 @@ align 4
|
||||
test [edx + TCP_header.Flags], TH_SYN
|
||||
jz .drop
|
||||
|
||||
inc [TCPS_accepts] ; update stats
|
||||
|
||||
;;; TODO: check if it's a broadcast or multicast, and drop if so
|
||||
|
||||
push dword [edi] ; Ipv4 source addres
|
||||
|
@ -90,10 +90,9 @@ endl
|
||||
|
||||
cmp ebx, [eax + STREAM_SOCKET.snd.size]
|
||||
jae @f
|
||||
|
||||
and dl, not (TH_FIN)
|
||||
|
||||
@@:
|
||||
|
||||
inc ecx
|
||||
jmp .no_force
|
||||
|
||||
@ -113,7 +112,6 @@ endl
|
||||
@@:
|
||||
sub esi, ebx
|
||||
|
||||
|
||||
;------------------------
|
||||
; check for window shrink (107)
|
||||
|
||||
@ -146,7 +144,6 @@ endl
|
||||
|
||||
cmp esi, [eax + TCP_SOCKET.t_maxseg]
|
||||
jbe @f
|
||||
|
||||
mov esi, [eax + TCP_SOCKET.t_maxseg]
|
||||
or [temp_bits], TCP_BIT_SENDALOT
|
||||
@@:
|
||||
@ -160,7 +157,6 @@ endl
|
||||
cmp edi, [eax + STREAM_SOCKET.snd.size]
|
||||
jae @f
|
||||
and dl, not (TH_FIN)
|
||||
|
||||
@@:
|
||||
|
||||
;-------------------------------
|
||||
@ -403,6 +399,50 @@ endl
|
||||
or [temp_bits], TCP_BIT_SENDALOT
|
||||
.no_overflow:
|
||||
|
||||
; Update stats
|
||||
test esi, esi
|
||||
jz .zero_data
|
||||
|
||||
cmp [eax + TCP_SOCKET.t_force], 1
|
||||
jne @f
|
||||
cmp esi, 1
|
||||
jne @f
|
||||
inc [TCPS_sndprobe]
|
||||
jmp .eos
|
||||
@@:
|
||||
|
||||
mov ebx, [eax + TCP_SOCKET.SND_NXT]
|
||||
cmp ebx, [eax + TCP_SOCKET.SND_MAX]
|
||||
jae @f
|
||||
inc [TCPS_sndrexmitpack]
|
||||
add [TCPS_sndrexmitbyte], esi
|
||||
jmp .eos
|
||||
@@:
|
||||
inc [TCPS_sndpack]
|
||||
add [TCPS_sndbyte], esi
|
||||
jmp .eos
|
||||
|
||||
.zero_data:
|
||||
test [eax + TCP_SOCKET.t_flags], TF_ACKNOW
|
||||
jz @f
|
||||
inc [TCPS_sndacks]
|
||||
jmp .eos
|
||||
@@:
|
||||
test dl, TH_SYN + TH_FIN + TH_RST
|
||||
jz @f
|
||||
inc [TCPS_sndctrl]
|
||||
jmp .eos
|
||||
@@:
|
||||
mov ebx, [eax + TCP_SOCKET.SND_UP]
|
||||
cmp ebx, [eax + TCP_SOCKET.SND_UNA]
|
||||
jb @f
|
||||
inc [TCPS_sndurg]
|
||||
jmp .eos
|
||||
@@:
|
||||
inc [TCPS_sndwinup]
|
||||
|
||||
.eos:
|
||||
|
||||
;----------------------------------------------------
|
||||
; Calculate the receive window.
|
||||
; Dont shrink window, but avoid silly window syndrome
|
||||
@ -469,8 +509,8 @@ endl
|
||||
call IPv4_output
|
||||
jz .ip_error
|
||||
|
||||
;-----------------------------------------
|
||||
; Move TCP header from stack to TCP packet
|
||||
;------------------------------------------
|
||||
; Move TCP header from stack to TCP segment
|
||||
|
||||
push ecx
|
||||
mov ecx, [esp + 4]
|
||||
@ -504,7 +544,7 @@ endl
|
||||
test ecx, ecx
|
||||
jz .nodata
|
||||
mov edx, [eax + TCP_SOCKET.SND_NXT]
|
||||
add [eax + TCP_SOCKET.SND_NXT], ecx ; update sequence number <<< CHECKME
|
||||
add [eax + TCP_SOCKET.SND_NXT], ecx ; update sequence number
|
||||
sub edx, [eax + TCP_SOCKET.SND_UNA] ; offset
|
||||
add eax, STREAM_SOCKET.snd
|
||||
call SOCKET_ring_read
|
||||
@ -536,7 +576,7 @@ endl
|
||||
je @f
|
||||
mov [eax + TCP_SOCKET.t_rtt], 1 ; nope, start transmission timer
|
||||
mov [eax + TCP_SOCKET.t_rtseq], edi
|
||||
;TODO: update stats
|
||||
inc [TCPS_segstimed]
|
||||
@@:
|
||||
|
||||
; set retransmission timer if not already set, and not doing an ACK or keepalive probe
|
||||
@ -584,6 +624,7 @@ endl
|
||||
|
||||
call NET_ptr_to_num4
|
||||
inc [TCP_segments_tx + edi]
|
||||
inc [TCPS_sndtotal]
|
||||
|
||||
; update advertised receive window
|
||||
test ecx, ecx
|
||||
|
@ -54,6 +54,8 @@ local .exit
|
||||
; call TCP_output ;;
|
||||
pop ebx
|
||||
|
||||
inc [TCPS_delack] ; update stats
|
||||
|
||||
jmp .loop
|
||||
|
||||
.exit:
|
||||
|
@ -89,6 +89,8 @@ TCP_connect:
|
||||
test [eax + SOCKET.state], SS_ISCONNECTED
|
||||
jnz .eisconn
|
||||
|
||||
inc [TCPS_connattempt] ; update stats
|
||||
|
||||
push eax edx
|
||||
lea ecx, [eax + SOCKET.mutex]
|
||||
call mutex_lock
|
||||
|
Loading…
Reference in New Issue
Block a user