Subversion Repositories Kolibri OS

Rev

Rev 1206 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1206 Rev 2731
Line -... Line 1...
-
 
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
1
 
110