Rev 2612 | 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: 2614 $ |
1159 | hidnplayr | 18 | |
1514 | hidnplayr | 19 | ; Socket states |
2614 | hidnplayr | 20 | TCPS_CLOSED = 0 |
21 | TCPS_LISTEN = 1 |
||
22 | TCPS_SYN_SENT = 2 |
||
23 | TCPS_SYN_RECEIVED = 3 |
||
24 | TCPS_ESTABLISHED = 4 |
||
25 | TCPS_CLOSE_WAIT = 5 |
||
26 | TCPS_FIN_WAIT_1 = 6 |
||
27 | TCPS_CLOSING = 7 |
||
28 | TCPS_LAST_ACK = 8 |
||
29 | TCPS_FIN_WAIT_2 = 9 |
||
30 | TCPS_TIMED_WAIT = 10 |
||
1196 | hidnplayr | 31 | |
1514 | hidnplayr | 32 | ; Socket Flags |
2614 | hidnplayr | 33 | TF_ACKNOW = 1 shl 0 ; ack peer immediately |
34 | TF_DELACK = 1 shl 1 ; ack, but try to delay it |
||
35 | TF_NODELAY = 1 shl 2 ; don't delay packets to coalesce |
||
36 | TF_NOOPT = 1 shl 3 ; don't use tcp options |
||
37 | TF_SENTFIN = 1 shl 4 ; have sent FIN |
||
38 | TF_REQ_SCALE = 1 shl 5 ; have/will request window scaling |
||
39 | TF_RCVD_SCALE = 1 shl 6 ; other side has requested scaling |
||
40 | TF_REQ_TSTMP = 1 shl 7 ; have/will request timestamps |
||
41 | TF_RCVD_TSTMP = 1 shl 8 ; a timestamp was received in SYN |
||
42 | TF_SACK_PERMIT = 1 shl 9 ; other side said I could SACK |
||
1249 | hidnplayr | 43 | |
1514 | hidnplayr | 44 | ; Segment flags |
2614 | hidnplayr | 45 | TH_FIN = 1 shl 0 |
46 | TH_SYN = 1 shl 1 |
||
47 | TH_RST = 1 shl 2 |
||
48 | TH_PUSH = 1 shl 3 |
||
49 | TH_ACK = 1 shl 4 |
||
50 | TH_URG = 1 shl 5 |
||
1318 | hidnplayr | 51 | |
1514 | hidnplayr | 52 | ; Segment header options |
2614 | hidnplayr | 53 | TCP_OPT_EOL = 0 ; End of option list. |
54 | TCP_OPT_NOP = 1 ; No-Operation. |
||
55 | TCP_OPT_MAXSEG = 2 ; Maximum Segment Size. |
||
56 | TCP_OPT_WINDOW = 3 ; window scale |
||
57 | TCP_OPT_TIMESTAMP = 8 |
||
1514 | hidnplayr | 58 | |
1519 | hidnplayr | 59 | ; Fundamental timer values |
2614 | hidnplayr | 60 | TCP_time_MSL = 47 ; max segment lifetime (30s) |
61 | TCP_time_re_min = 2 ; min retransmission (1,28s) |
||
62 | TCP_time_re_max = 100 ; max retransmission (64s) |
||
63 | TCP_time_pers_min = 8 ; min persist (5,12s) |
||
64 | TCP_time_pers_max = 94 ; max persist (60,16s) |
||
65 | TCP_time_keep_init = 118 ; connectione stablishment (75,52s) |
||
66 | TCP_time_keep_idle = 4608 ; idle time before 1st probe (2h) |
||
67 | TCP_time_keep_interval = 118 ; between probes when no response (75,52s) |
||
68 | TCP_time_rtt_default = 5 ; default Round Trip Time (3,2s) |
||
69 | TCP_time_srtt_default = 0 ; |
||
1519 | hidnplayr | 70 | |
71 | ; timer constants |
||
2614 | hidnplayr | 72 | TCP_max_rxtshift = 12 ; max retransmissions waiting for ACK |
73 | TCP_max_keepcnt = 8 ; max keepalive probes |
||
1519 | hidnplayr | 74 | |
1529 | hidnplayr | 75 | ; |
2614 | hidnplayr | 76 | TCP_max_winshift = 14 |
77 | TCP_max_win = 65535 |
||
1519 | hidnplayr | 78 | |
2614 | hidnplayr | 79 | TCP_re_xmit_thresh = 3 |
1763 | hidnplayr | 80 | |
2614 | hidnplayr | 81 | TCP_mss_default = 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 |
||
2614 | hidnplayr | 99 | TCP_segments_tx rd IP_MAX_INTERFACES |
100 | TCP_segments_rx rd IP_MAX_INTERFACES |
||
2612 | hidnplayr | 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 |
2614 | hidnplayr | 117 | mov edi, TCP_segments_tx |
2612 | hidnplayr | 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 |
||
2614 | hidnplayr | 147 | TCP_api: |
1254 | hidnplayr | 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 | |
2614 | hidnplayr | 157 | .error: |
2612 | hidnplayr | 158 | mov eax, -1 |
159 | ret |
||
1254 | hidnplayr | 160 | |
2614 | hidnplayr | 161 | .packets_tx: |
162 | mov eax, [TCP_segments_tx + eax] |
||
2612 | hidnplayr | 163 | ret |
1254 | hidnplayr | 164 | |
2614 | hidnplayr | 165 | .packets_rx: |
166 | mov eax, [TCP_segments_rx + eax] |
||
2612 | hidnplayr | 167 | ret |