Subversion Repositories Kolibri OS

Rev

Rev 2362 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1196 hidnplayr 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                                 ;;
2362 hidnplayr 3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved.    ;;
1196 hidnplayr 4
;; Distributed under terms of the GNU General Public License       ;;
5
;;                                                                 ;;
6
;;  Part of the tcp/ip network stack for KolibriOS                 ;;
7
;;                                                                 ;;
1514 hidnplayr 8
;;   Written by hidnplayr@kolibrios.org                            ;;
1196 hidnplayr 9
;;                                                                 ;;
1514 hidnplayr 10
;;    Based on the code of 4.4BSD                                  ;;
11
;;                                                                 ;;
1196 hidnplayr 12
;;          GNU GENERAL PUBLIC LICENSE                             ;;
13
;;             Version 2, June 1991                                ;;
14
;;                                                                 ;;
15
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1159 hidnplayr 16
 
1206 hidnplayr 17
$Revision: 2612 $
1159 hidnplayr 18
 
1514 hidnplayr 19
; Socket states
2612 hidnplayr 20
TCPS_CLOSED             equ 0
21
TCPS_LISTEN             equ 1
22
TCPS_SYN_SENT           equ 2
23
TCPS_SYN_RECEIVED       equ 3
24
TCPS_ESTABLISHED        equ 4
25
TCPS_CLOSE_WAIT         equ 5
26
TCPS_FIN_WAIT_1         equ 6
27
TCPS_CLOSING            equ 7
28
TCPS_LAST_ACK           equ 8
29
TCPS_FIN_WAIT_2         equ 9
30
TCPS_TIMED_WAIT         equ 10
1196 hidnplayr 31
 
1514 hidnplayr 32
; Socket Flags
2612 hidnplayr 33
TF_ACKNOW               equ 1 shl 0     ; ack peer immediately
34
TF_DELACK               equ 1 shl 1     ; ack, but try to delay it
35
TF_NODELAY              equ 1 shl 2     ; don't delay packets to coalesce
36
TF_NOOPT                equ 1 shl 3     ; don't use tcp options
37
TF_SENTFIN              equ 1 shl 4     ; have sent FIN
38
TF_REQ_SCALE            equ 1 shl 5     ; have/will request window scaling
39
TF_RCVD_SCALE           equ 1 shl 6     ; other side has requested scaling
40
TF_REQ_TSTMP            equ 1 shl 7     ; have/will request timestamps
41
TF_RCVD_TSTMP           equ 1 shl 8     ; a timestamp was received in SYN
42
TF_SACK_PERMIT          equ 1 shl 9     ; other side said I could SACK
1249 hidnplayr 43
 
1514 hidnplayr 44
; Segment flags
2612 hidnplayr 45
TH_FIN                  equ 1 shl 0
46
TH_SYN                  equ 1 shl 1
47
TH_RST                  equ 1 shl 2
48
TH_PUSH                 equ 1 shl 3
49
TH_ACK                  equ 1 shl 4
50
TH_URG                  equ 1 shl 5
1318 hidnplayr 51
 
1514 hidnplayr 52
; Segment header options
2612 hidnplayr 53
TCP_OPT_EOL             equ 0           ; End of option list.
54
TCP_OPT_NOP             equ 1           ; No-Operation.
55
TCP_OPT_MAXSEG          equ 2           ; Maximum Segment Size.
56
TCP_OPT_WINDOW          equ 3           ; window scale
57
TCP_OPT_TIMESTAMP       equ 8
1514 hidnplayr 58
 
1519 hidnplayr 59
; Fundamental timer values
2612 hidnplayr 60
TCP_time_MSL            equ 47          ; max segment lifetime (30s)
61
TCP_time_re_min         equ 2           ; min retransmission (1,28s)
62
TCP_time_re_max         equ 100         ; max retransmission (64s)
63
TCP_time_pers_min       equ 8           ; min persist (5,12s)
64
TCP_time_pers_max       equ 94          ; max persist (60,16s)
65
TCP_time_keep_init      equ 118         ; connectione stablishment (75,52s)
66
TCP_time_keep_idle      equ 4608        ; idle time before 1st probe (2h)
67
TCP_time_keep_interval  equ 118         ; between probes when no response (75,52s)
68
TCP_time_rtt_default    equ 5           ; default Round Trip Time (3,2s)
69
TCP_time_srtt_default   equ 0           ;
1519 hidnplayr 70
 
71
; timer constants
2612 hidnplayr 72
TCP_max_rxtshift        equ 12          ; max retransmissions waiting for ACK
73
TCP_max_keepcnt         equ 8           ; max keepalive probes
1519 hidnplayr 74
 
1529 hidnplayr 75
;
2612 hidnplayr 76
TCP_max_winshift        equ 14
77
TCP_max_win             equ 65535
1519 hidnplayr 78
 
2612 hidnplayr 79
TCP_re_xmit_thresh      equ 3
1763 hidnplayr 80
 
2612 hidnplayr 81
TCP_mss_default         equ 1480        ; default max segment size
2305 hidnplayr 82
 
2612 hidnplayr 83
struct  TCP_header
2305 hidnplayr 84
 
2612 hidnplayr 85
        SourcePort              dw ?
86
        DestinationPort         dw ?
87
        SequenceNumber          dd ?
88
        AckNumber               dd ?
89
        DataOffset              db ?    ; DataOffset[0-3 bits] and Reserved[4-7]
90
        Flags                   db ?    ; Reserved[0-1 bits]|URG|ACK|PSH|RST|SYN|FIN
91
        Window                  dw ?
92
        Checksum                dw ?
93
        UrgentPointer           dw ?
94
 
1159 hidnplayr 95
ends
96
 
1196 hidnplayr 97
align 4
98
uglobal
2612 hidnplayr 99
        TCP_headers_tx          rd IP_MAX_INTERFACES
100
        TCP_headers_rx          rd IP_MAX_INTERFACES
101
        TCP_bytes_rx            rq IP_MAX_INTERFACES
102
        TCP_bytes_tx            rq IP_MAX_INTERFACES
103
        TCP_sequence_num        dd ?
1196 hidnplayr 104
endg
105
 
106
 
107
;-----------------------------------------------------------------
108
;
109
; TCP_init
110
;
111
;  This function resets all TCP variables
112
;
113
;-----------------------------------------------------------------
2612 hidnplayr 114
macro   TCP_init {
1196 hidnplayr 115
 
2612 hidnplayr 116
        xor     eax, eax
117
        mov     edi, TCP_headers_tx
118
        mov     ecx, (6*IP_MAX_INTERFACES)
119
        rep     stosd
1196 hidnplayr 120
 
2612 hidnplayr 121
        pseudo_random   eax
122
        mov     [TCP_sequence_num], eax
1196 hidnplayr 123
 
1529 hidnplayr 124
}
1196 hidnplayr 125
 
126
 
1733 hidnplayr 127
include 'tcp_timer.inc'
128
include 'tcp_subr.inc'
129
include 'tcp_input.inc'
130
include 'tcp_output.inc'
1159 hidnplayr 131
 
1529 hidnplayr 132
 
1254 hidnplayr 133
;---------------------------------------------------------------------------
134
;
135
; TCP_API
136
;
137
; This function is called by system function 75
138
;
139
; IN:  subfunction number in bl
140
;      device number in bh
141
;      ecx, edx, .. depends on subfunction
142
;
143
; OUT:
144
;
145
;---------------------------------------------------------------------------
146
align 4
147
TCP_API:
148
 
2612 hidnplayr 149
        movzx   eax, bh
150
        shl     eax, 2
1254 hidnplayr 151
 
2612 hidnplayr 152
        test    bl, bl
153
        jz      .packets_tx     ; 0
154
        dec     bl
155
        jz      .packets_rx     ; 1
1254 hidnplayr 156
 
157
.error:
2612 hidnplayr 158
        mov     eax, -1
159
        ret
1254 hidnplayr 160
 
161
.packets_tx:
2612 hidnplayr 162
        add     eax, TCP_headers_tx
163
        mov     eax, [eax]
164
        ret
1254 hidnplayr 165
 
166
.packets_rx:
2612 hidnplayr 167
        add     eax, TCP_headers_rx
168
        mov     eax, [eax]
169
        ret