Subversion Repositories Kolibri OS

Rev

Rev 1733 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                                 ;;
  3. ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved.    ;;
  4. ;; Distributed under terms of the GNU General Public License       ;;
  5. ;;                                                                 ;;
  6. ;;  Part of the tcp/ip network stack for KolibriOS                 ;;
  7. ;;                                                                 ;;
  8. ;;   Written by hidnplayr@kolibrios.org                            ;;
  9. ;;                                                                 ;;
  10. ;;    Based on the code of 4.4BSD                                  ;;
  11. ;;                                                                 ;;
  12. ;;          GNU GENERAL PUBLIC LICENSE                             ;;
  13. ;;             Version 2, June 1991                                ;;
  14. ;;                                                                 ;;
  15. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16.  
  17. $Revision: 1763 $
  18.  
  19. ; Socket states
  20. TCB_CLOSED              equ 0
  21. TCB_LISTEN              equ 1
  22. TCB_SYN_SENT            equ 2
  23. TCB_SYN_RECEIVED        equ 3
  24. TCB_ESTABLISHED         equ 4
  25. TCB_CLOSE_WAIT          equ 5
  26. TCB_FIN_WAIT_1          equ 6
  27. TCB_CLOSING             equ 7
  28. TCB_LAST_ACK            equ 8
  29. TCB_FIN_WAIT_2          equ 9
  30. TCB_TIMED_WAIT          equ 10
  31.  
  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
  43.  
  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
  51.  
  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.  
  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.  
  74. ;
  75. TCP_max_winshift        equ 14
  76. TCP_max_win             equ 65535
  77.  
  78. TCP_re_xmit_thresh      equ 3
  79.  
  80. struct  TCP_segment
  81.         .SourcePort             dw ?
  82.         .DestinationPort        dw ?
  83.         .SequenceNumber         dd ?
  84.         .AckNumber              dd ?
  85.         .DataOffset             db ?    ; DataOffset[0-3 bits] and Reserved[4-7]
  86.         .Flags                  db ?    ; Reserved[0-1 bits]|URG|ACK|PSH|RST|SYN|FIN
  87.         .Window                 dw ?
  88.         .Checksum               dw ?
  89.         .UrgentPointer          dw ?
  90.         .Data:                          ; ..or options
  91. ends
  92.  
  93. align 4
  94. uglobal
  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 ?
  100. endg
  101.  
  102.  
  103. ;-----------------------------------------------------------------
  104. ;
  105. ; TCP_init
  106. ;
  107. ;  This function resets all TCP variables
  108. ;
  109. ;-----------------------------------------------------------------
  110. macro   TCP_init {
  111.  
  112.         xor     eax, eax
  113.         mov     edi, TCP_segments_tx
  114.         mov     ecx, (6*IP_MAX_INTERFACES)
  115.         rep     stosd
  116.  
  117.         pseudo_random   eax
  118.         mov     [TCP_sequence_num], eax
  119.  
  120. }
  121.  
  122.  
  123. include 'tcp_timer.inc'
  124. include 'tcp_subr.inc'
  125. include 'tcp_input.inc'
  126. include 'tcp_output.inc'
  127.  
  128.  
  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:
  158.         add     eax, TCP_segments_tx
  159.         mov     eax, [eax]
  160.         ret
  161.  
  162. .packets_rx:
  163.         add     eax, TCP_segments_rx
  164.         mov     eax, [eax]
  165.         ret
  166.