Rev 1831 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1196 | hidnplayr | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
||
1763 | hidnplayr | 3 | ;; Copyright (C) KolibriOS team 2004-2011. 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: 2301 $ |
1159 | hidnplayr | 18 | |
1514 | hidnplayr | 19 | ; Socket states |
2301 | 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 |
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 |
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 |
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 |
||
58 | |||
1519 | hidnplayr | 59 | ; Fundamental timer values |
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 | |||
70 | ; timer constants |
||
71 | TCP_max_rxtshift equ 12 ; max retransmissions waiting for ACK |
||
72 | TCP_max_keepcnt equ 8 ; max keepalive probes |
||
73 | |||
1529 | hidnplayr | 74 | ; |
75 | TCP_max_winshift equ 14 |
||
76 | TCP_max_win equ 65535 |
||
1519 | hidnplayr | 77 | |
1763 | hidnplayr | 78 | TCP_re_xmit_thresh equ 3 |
79 | |||
1514 | hidnplayr | 80 | struct TCP_segment |
1159 | hidnplayr | 81 | .SourcePort dw ? |
82 | .DestinationPort dw ? |
||
83 | .SequenceNumber dd ? |
||
84 | .AckNumber dd ? |
||
1196 | hidnplayr | 85 | .DataOffset db ? ; DataOffset[0-3 bits] and Reserved[4-7] |
86 | .Flags db ? ; Reserved[0-1 bits]|URG|ACK|PSH|RST|SYN|FIN |
||
1159 | hidnplayr | 87 | .Window dw ? |
88 | .Checksum dw ? |
||
89 | .UrgentPointer dw ? |
||
1514 | hidnplayr | 90 | .Data: ; ..or options |
1159 | hidnplayr | 91 | ends |
92 | |||
1196 | hidnplayr | 93 | align 4 |
94 | uglobal |
||
1514 | hidnplayr | 95 | TCP_segments_tx rd IP_MAX_INTERFACES |
96 | TCP_segments_rx rd IP_MAX_INTERFACES |
||
97 | TCP_bytes_rx rq IP_MAX_INTERFACES |
||
98 | TCP_bytes_tx rq IP_MAX_INTERFACES |
||
99 | TCP_sequence_num dd ? |
||
1196 | hidnplayr | 100 | endg |
101 | |||
102 | |||
103 | ;----------------------------------------------------------------- |
||
104 | ; |
||
105 | ; TCP_init |
||
106 | ; |
||
107 | ; This function resets all TCP variables |
||
108 | ; |
||
109 | ;----------------------------------------------------------------- |
||
1529 | hidnplayr | 110 | macro TCP_init { |
1196 | hidnplayr | 111 | |
112 | xor eax, eax |
||
1514 | hidnplayr | 113 | mov edi, TCP_segments_tx |
114 | mov ecx, (6*IP_MAX_INTERFACES) |
||
1196 | hidnplayr | 115 | rep stosd |
116 | |||
1529 | hidnplayr | 117 | pseudo_random eax |
118 | mov [TCP_sequence_num], eax |
||
1196 | hidnplayr | 119 | |
1529 | hidnplayr | 120 | } |
1196 | hidnplayr | 121 | |
122 | |||
1733 | hidnplayr | 123 | include 'tcp_timer.inc' |
124 | include 'tcp_subr.inc' |
||
125 | include 'tcp_input.inc' |
||
126 | include 'tcp_output.inc' |
||
1159 | hidnplayr | 127 | |
1529 | hidnplayr | 128 | |
1254 | hidnplayr | 129 | ;--------------------------------------------------------------------------- |
130 | ; |
||
131 | ; TCP_API |
||
132 | ; |
||
133 | ; This function is called by system function 75 |
||
134 | ; |
||
135 | ; IN: subfunction number in bl |
||
136 | ; device number in bh |
||
137 | ; ecx, edx, .. depends on subfunction |
||
138 | ; |
||
139 | ; OUT: |
||
140 | ; |
||
141 | ;--------------------------------------------------------------------------- |
||
142 | align 4 |
||
143 | TCP_API: |
||
144 | |||
145 | movzx eax, bh |
||
146 | shl eax, 2 |
||
147 | |||
148 | test bl, bl |
||
149 | jz .packets_tx ; 0 |
||
150 | dec bl |
||
151 | jz .packets_rx ; 1 |
||
152 | |||
153 | .error: |
||
154 | mov eax, -1 |
||
155 | ret |
||
156 | |||
157 | .packets_tx: |
||
1514 | hidnplayr | 158 | add eax, TCP_segments_tx |
1254 | hidnplayr | 159 | mov eax, [eax] |
160 | ret |
||
161 | |||
162 | .packets_rx: |
||
1514 | hidnplayr | 163 | add eax, TCP_segments_rx |
1254 | hidnplayr | 164 | mov eax, [eax] |
165 | ret |