Subversion Repositories Kolibri OS

Rev

Rev 1206 | Blame | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                                 ;;
  3. ;; Copyright (C) KolibriOS team 2012. All rights reserved.         ;;
  4. ;; Distributed under terms of the GNU General Public License       ;;
  5. ;;                                                                 ;;
  6. ;;  IPv6.INC                                                       ;;
  7. ;;                                                                 ;;
  8. ;;  Part of the tcp/ip network stack for KolibriOS                 ;;
  9. ;;                                                                 ;;
  10. ;;    Written by hidnplayr@kolibrios.org                           ;;
  11. ;;                                                                 ;;
  12. ;;          GNU GENERAL PUBLIC LICENSE                             ;;
  13. ;;             Version 2, June 1991                                ;;
  14. ;;                                                                 ;;
  15. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16.  
  17. $Revision: 2731 $
  18.  
  19.  
  20. struct  IPv6_header
  21.  
  22.         VersionTrafficFlow      dd ?    ; Version[0-3], Traffic class[4-11], Flow Label [12-31]
  23.         PayloadLength           dw ?    ; 16 bits, unsigned length of payload (extension headers are part of this)
  24.         NextHeader              db ?    ; Values are same as in IPv4 'Protocol' field
  25.         HopLimit                db ?    ; Decremented by every node, packet is discarded when it reaches 0
  26.         SourceAddress           rd 4    ; 128-bit addresses
  27.         DestinationAddress      rd 4    ;
  28.  
  29. ends
  30.  
  31.  
  32.  
  33.  
  34.  
  35. ;-----------------------------------------------------------------
  36. ;
  37. ; IPv6_input:
  38. ;
  39. ;  Will check if IPv6 Packet isnt damaged
  40. ;  and call appropriate handler. (TCP/UDP/ICMP/..)
  41. ;
  42. ;  It will also re-construct fragmented packets
  43. ;
  44. ;  IN:  Pointer to buffer in [esp]
  45. ;       size of buffer in [esp+4]
  46. ;       pointer to device struct in ebx
  47. ;       pointer to IPv6 header in edx
  48. ;       size of IPv6 packet in ecx
  49. ;  OUT: /
  50. ;
  51. ;-----------------------------------------------------------------
  52. align 4
  53. IPv6_input:
  54.  
  55.         DEBUGF  1,"IPv6_input\nfrom: %x:%x:%x:%x:%x:%x:%x:%x\n",\
  56.         [edx + IPv6_header.SourceAddress + 0]:4,[edx + IPv6_header.SourceAddress + 2]:4,\
  57.         [edx + IPv6_header.SourceAddress + 4]:4,[edx + IPv6_header.SourceAddress + 6]:4,\
  58.         [edx + IPv6_header.SourceAddress + 8]:4,[edx + IPv6_header.SourceAddress + 10]:4,\
  59.         [edx + IPv6_header.SourceAddress + 12]:4,[edx + IPv6_header.SourceAddress + 14]:4
  60.         DEBUGF  1,"to: %x:%x:%x:%x:%x:%x:%x:%x\n",\
  61.         [edx + IPv6_header.DestinationAddress + 0]:4,[edx + IPv6_header.DestinationAddress + 2]:4,\
  62.         [edx + IPv6_header.DestinationAddress + 4]:4,[edx + IPv6_header.DestinationAddress + 6]:4,\
  63.         [edx + IPv6_header.DestinationAddress + 8]:4,[edx + IPv6_header.DestinationAddress + 10]:4,\
  64.         [edx + IPv6_header.DestinationAddress + 12]:4,[edx + IPv6_header.DestinationAddress + 14]:4
  65.  
  66.         sub     ecx, sizeof.IPv6_header
  67.         jb      .dump
  68.  
  69.         movzx   eax, [edx + IPv6.PayloadLength]
  70.         xchg    al, ah
  71.         cmp     eax, ecx
  72.         jb      .dump
  73.  
  74.  
  75.  
  76. ;-------------------------------------------------------------------
  77. ; No, it's just a regular IP packet, pass it to the higher protocols
  78.  
  79.   .handle_it:
  80.  
  81.         movzx   esi, [edx + IPv6_header.VersionAndIHL]          ; Calculate Header length by using IHL field
  82.         and     esi, 0x0000000f                                 ;
  83.         shl     esi, 2                                          ;
  84.  
  85.         movzx   ecx, [edx + IPv6_header.TotalLength]            ; Calculate length of encapsulated Packet
  86.         xchg    cl, ch                                          ;
  87.         sub     ecx, esi                                        ;
  88.  
  89.         lea     edi, [edx + IPv6_header.SourceAddress]          ; make edi ptr to source and dest IPv6 address
  90.         mov     al, [edx + IPv6_header.Protocol]
  91.         add     esi, edx                                        ; make esi ptr to data
  92.  
  93. ;        cmp     al, IP_PROTO_TCP
  94. ;        je      TCP_input
  95.  
  96. ;        cmp     al, IP_PROTO_UDP
  97. ;        je      UDP_input
  98.  
  99. ;        cmp     al, IP_PROTO_ICMP
  100. ;        je      ICMP_input
  101.  
  102.         DEBUGF  2,"IPv6_input - unknown protocol: %u\n", al
  103.  
  104.   .dump:
  105.         DEBUGF  2,"IPv6_input - dumping\n"
  106.  
  107.         add     esp, 4
  108.         call    KernelFree
  109.         ret