/kernel/branches/net/network/socket.inc |
---|
324,7 → 324,7 |
mov [eax + SOCKET.snd_proc], SOCKET_send_tcp |
mov [eax + SOCKET.rcv_proc], SOCKET_receive_tcp |
mov [eax + TCP_SOCKET.t_maxseg], 1480 ;;;;; FIXME |
TCP_init_socket eax |
ret |
498,11 → 498,13 |
mov [eax + TCP_SOCKET.timer_persist], 0 |
mov [eax + TCP_SOCKET.t_state], TCPS_SYN_SENT |
push [TCP_sequence_num] |
add [TCP_sequence_num], 6400 |
pop [eax + TCP_SOCKET.ISS] |
mov [eax + TCP_SOCKET.timer_keepalive], TCP_time_keep_init |
TCP_sendseqinit eax |
; mov [ebx + TCP_SOCKET.timer_retransmission], ;; todo: create macro to set retransmission timer |
/kernel/branches/net/network/tcp.inc |
---|
66,6 → 66,7 |
TCP_time_keep_idle equ 4608 ; idle time before 1st probe (2h) |
TCP_time_keep_interval equ 118 ; between probes when no response (75,52s) |
TCP_time_rtt_default equ 5 ; default Round Trip Time (3,2s) |
TCP_time_srtt_default equ 0 ; |
; timer constants |
TCP_max_rxtshift equ 12 ; max retransmissions waiting for ACK |
77,6 → 78,8 |
TCP_re_xmit_thresh equ 3 |
TCP_mss_default equ 1480 ; default max segment size |
struct TCP_header |
SourcePort dw ? |
/kernel/branches/net/network/tcp_input.inc |
---|
595,6 → 595,8 |
mov [ebx + TCP_SOCKET.t_state], TCPS_ESTABLISHED |
;;; TODO: check if we should scale the connection (567-572) |
mov [ebx + TCP_SOCKET.SND_SCALE], 0 |
;;; TODO: update RTT estimators |
jmp .trim_then_step6 |
1249,25 → 1251,8 |
.update_window: |
DEBUGF 1,"Updating window\n" |
;;; TODO: Keep track of pure window updates |
; Keep track of pure window updates |
; test ecx, ecx |
; jz @f |
; |
; mov eax, [ebx + TCP_SOCKET.SND_WL2] |
; cmp eax, [edx + TCP_header.AckNumber] |
; jne @f |
; |
; ;; mov eax, tiwin |
; cmp eax, [ebx + TCP_SOCKET.SND_WND] |
; jbe @f |
; |
; ;;; update stats |
; |
; @@: |
mov eax, dword [edx + TCP_header.Window] |
cmp eax, [ebx + TCP_SOCKET.max_sndwnd] |
jbe @f |
1275,6 → 1260,8 |
@@: |
mov [ebx + TCP_SOCKET.SND_WND], eax |
DEBUGF 1,"Updating window to %d\n", eax |
push [edx + TCP_header.SequenceNumber] |
pop [ebx + TCP_SOCKET.SND_WL1] |
/kernel/branches/net/network/tcp_output.inc |
---|
100,6 → 100,7 |
@@: |
sub esi, ebx |
;------------------------ |
; check for window shrink (107) |
106,7 → 107,7 |
; If FIN has been set, but not ACKed, but we havent been called to retransmit, esi will be -1 |
; Otherwise, window shrank after we sent into it. |
jns .not_negative |
jae .not_persist |
; enter persist state |
xor esi, esi |
126,7 → 127,7 |
; If window didn't close completely, just wait for an ACK |
.not_negative: |
.not_persist: |
;--------------------------- |
; Send one segment at a time (124) |
291,7 → 292,7 |
.send: |
DEBUGF 1,"Preparing to send a segment\n" |
DEBUGF 1,"Preparing to send a segment socket: %x length: %u flags: %x\n", eax, esi, dl |
mov edi, sizeof.TCP_header ; edi will contain headersize |
/kernel/branches/net/network/tcp_subr.inc |
---|
82,11 → 82,21 |
macro TCP_init_socket socket { |
mov [socket + TCP_SOCKET.t_maxseg], TCP_mss_default |
mov [socket + TCP_SOCKET.t_flags], 0 ; we could also request scale and timestamp |
mov [socket + TCP_SOCKET.t_srtt], TCP_time_srtt_default |
mov [socket + TCP_SOCKET.t_rttvar], TCP_time_rtt_default * 4 |
mov [socket + TCP_SOCKET.t_rttmin], TCP_time_re_min |
;;; TODO: TCP_time_rangeset |
mov [socket + TCP_SOCKET.SND_CWND], TCP_max_win shl TCP_max_winshift |
mov [socket + TCP_SOCKET.SND_SSTHRESH], TCP_max_win shl TCP_max_winshift |
} |
;--------------------------- |