Difference between revisions of "Unit IPv6"

From Ultibo.org
Jump to: navigation, search
Line 111: Line 111:
 
----
 
----
  
''To be documented''
+
 
 +
'''IPv6 header'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PIP6Header = ^TIP6Header;</code>
 +
 
 +
<code>TIP6Header = packed record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: 40 Bytes
 +
|-
 +
| <code>VersionClassLabel:LongWord;</code>
 +
| Version (4 bits)(Always 6) / Traffic Class (8 bits) / Flow Label (20 bits)
 +
|-
 +
| <code>PayloadLength:Word;</code>
 +
| The size of the payload in octets, including any extension headers (The length is set to zero when a Hop-by-Hop extension header carries a Jumbo Payload option)
 +
|-
 +
| <code>NextHeader:Byte;</code>
 +
| Specifies the type of the next header (When extension headers are present in the packet this field indicates which extension header follows)
 +
|-
 +
| <code>HopLimit:Byte;</code>
 +
| This value is decremented by one at each intermediate node visited by the packet. When the counter reaches 0 the packet is discarded (Replaces the time to live field of IPv4)
 +
|-
 +
| <code>SourceIP:TIn6Addr;</code>
 +
| Source IP
 +
|-
 +
| <code>DestIP:TIn6Addr;</code>
 +
| Destination IP
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''IPv6 extension header'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PIP6ExtensionHeader = ^TIP6ExtensionHeader;</code>
 +
 
 +
<code>TIP6ExtensionHeader = packed record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: 2 Bytes (Common Header of all Extension Headers)
 +
|-
 +
| <code>NextHeader:Byte;</code>
 +
| Specifies the type of the next header (If zero discard the packet)
 +
|-
 +
| <code>ExtensionLength:Byte;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''IPv6 pseudo'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PIP6Pseudo = ^TIP6Pseudo;</code>
 +
 
 +
<code>TIP6Pseudo = packed record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: ?? Bytes (Used by UDP/TCP Checksum)
 +
|-
 +
| <code>SourceIP:TIn6Addr;</code>
 +
| Source IP
 +
|-
 +
| <code>DestIP:TIn6Addr;</code>
 +
| Destination IP
 +
|-
 +
| <code>Mbz:Byte;</code>
 +
| Must Be Zero
 +
|-
 +
| <code>Protocol:Byte;</code>
 +
| IP6 Protocol Type IPPROTO_UDP, IPPROTO_TCP etc
 +
|-
 +
| <code>Length:Word;</code>
 +
| Length of UDP/TCP Header and Data
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''IPv6 fragment''' 
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PIP6Fragment = ^TIP6Fragment;</code>
 +
 
 +
<code>TIP6Fragment = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: ?? Bytes (Used by Fragment Buffer)
 +
|-
 +
| <code>Offset:LongWord;</code>
 +
| Offset of this Fragment in the Packet
 +
|-
 +
| <code>Size:Word;</code>
 +
| Size of this Fragment
 +
|-
 +
| <code>Prev:PIP6Fragment;</code>
 +
| Pointer to Prev Fragment
 +
|-
 +
| <code>Next:PIP6Fragment;</code>
 +
| Pointer to Next Fragment
 +
|-
 +
|}
 +
</div></div> 
 +
 +
'''IPv6 packet'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PIP6Packet = ^TIP6Packet;</code>
 +
 
 +
<code>TIP6Packet = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: ?? Bytes (Used by Fragment Buffer)
 +
|-
 +
| <code>Lock:TMutexHandle;</code>
 +
| Packet Lock
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>Id:LongWord;</code>
 +
| IP6 Id
 +
|-
 +
| <code>Dest:TIn6Addr;</code>
 +
| IP6 Dest
 +
|-
 +
| <code>Source:TIn6Addr;</code>
 +
| IP6 Source
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>Data:Pointer;</code>
 +
| Pointer to Data
 +
|-
 +
| <code>Timeout:Int64;</code>
 +
| Packet Timeout
 +
|-
 +
| <code>Total:Word;</code>
 +
| IP Total Length
 +
|-
 +
| <code>Length:Word;</code>
 +
| IP Header Length
 +
|-
 +
| <code>Received:Word;</code>
 +
| Received Bytes
 +
|-
 +
| <code>Prev:PIP6Packet;</code>
 +
| Pointer to Prev Packet
 +
|-
 +
| <code>Next:PIP6Packet;</code>
 +
| Pointer to Next Packet
 +
|-
 +
| <code>First:PIP6Fragment;</code>
 +
| Pointer to First Fragment
 +
|-
 +
| <code>Last:PIP6Fragment;</code>
 +
| Pointer to Last Fragment
 +
|-
 +
|}
 +
</div></div> 
 +
<br />
  
 
=== Class definitions ===
 
=== Class definitions ===

Revision as of 03:02, 20 January 2017

Return to Unit Reference


Description


Ultibo IPv6 (Internet Protocol version 6) unit

To be documented

Constants



IPv6 specific constants IP6_TRANSPORT_*
IP6_TRANSPORT_NAME = 'IPV6';  


IP6 constants IP6_HEADER_*
MIN_IP6_PACKET = 40; Not Counting Adapter Header
MAX_IP6_PACKET = 1500; Not Counting Adapter Header
 
MAX_FRAG_LIFE = 32000; Only wait 32 seconds for the rest of the packet
 
IP6_HEADER_SIZE = 40; SizeOf(TIP6Header); Does Not Allow for Extensions


IP6 extension header constants IP6_HEADER_*
See: https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
 
IP6_HEADER_HOP = 0; Hop-by-hop option header
IP6_HEADER_TCP = 6; Next header is a TCP segment (The payload)
IP6_HEADER_UDP = 17; Next header is a UDP message (The payload)
IP6_HEADER_IPV6 = 41; Next header is a IPv6 packet (IPv6 Encapsulation) (The payload)
IP6_HEADER_ROUTING = 43; Next header is a Routing header
IP6_HEADER_FRAGMENT = 44; Next header is a Fragmentation/reassembly header
IP6_HEADER_GRE = 47; Next header is a GRE header
IP6_HEADER_ESP = 50; Next header is a Encapsulating security payload
IP6_HEADER_AUTH = 51; Next header is a Authentication header
IP6_HEADER_ICMP = 58; Next header is a ICMP for IPv6 message
IP6_HEADER_NONE = 59; There is no next header (Do not process payload)
IP6_HEADER_DEST = 60; Next header is a Destination options header
IP6_HEADER_SCTP = 132; Next header is a SCTP message (The payload)
IP6_HEADER_MOBILITY = 135; Next header is a Mobility header
 
IP6_MTU = MAX_IP6_PACKET;  


Type definitions



IPv6 header

PIP6Header = ^TIP6Header;

TIP6Header = packed record

Note: 40 Bytes
VersionClassLabel:LongWord; Version (4 bits)(Always 6) / Traffic Class (8 bits) / Flow Label (20 bits)
PayloadLength:Word; The size of the payload in octets, including any extension headers (The length is set to zero when a Hop-by-Hop extension header carries a Jumbo Payload option)
NextHeader:Byte; Specifies the type of the next header (When extension headers are present in the packet this field indicates which extension header follows)
HopLimit:Byte; This value is decremented by one at each intermediate node visited by the packet. When the counter reaches 0 the packet is discarded (Replaces the time to live field of IPv4)
SourceIP:TIn6Addr; Source IP
DestIP:TIn6Addr; Destination IP

IPv6 extension header

PIP6ExtensionHeader = ^TIP6ExtensionHeader;

TIP6ExtensionHeader = packed record

Note: 2 Bytes (Common Header of all Extension Headers)
NextHeader:Byte; Specifies the type of the next header (If zero discard the packet)
ExtensionLength:Byte;  

IPv6 pseudo

PIP6Pseudo = ^TIP6Pseudo;

TIP6Pseudo = packed record

Note: ?? Bytes (Used by UDP/TCP Checksum)
SourceIP:TIn6Addr; Source IP
DestIP:TIn6Addr; Destination IP
Mbz:Byte; Must Be Zero
Protocol:Byte; IP6 Protocol Type IPPROTO_UDP, IPPROTO_TCP etc
Length:Word; Length of UDP/TCP Header and Data

IPv6 fragment

PIP6Fragment = ^TIP6Fragment;

TIP6Fragment = record

Note: ?? Bytes (Used by Fragment Buffer)
Offset:LongWord; Offset of this Fragment in the Packet
Size:Word; Size of this Fragment
Prev:PIP6Fragment; Pointer to Prev Fragment
Next:PIP6Fragment; Pointer to Next Fragment

IPv6 packet

PIP6Packet = ^TIP6Packet;

TIP6Packet = record

Note: ?? Bytes (Used by Fragment Buffer)
Lock:TMutexHandle; Packet Lock
 
Id:LongWord; IP6 Id
Dest:TIn6Addr; IP6 Dest
Source:TIn6Addr; IP6 Source
 
Data:Pointer; Pointer to Data
Timeout:Int64; Packet Timeout
Total:Word; IP Total Length
Length:Word; IP Header Length
Received:Word; Received Bytes
Prev:PIP6Packet; Pointer to Prev Packet
Next:PIP6Packet; Pointer to Next Packet
First:PIP6Fragment; Pointer to First Fragment
Last:PIP6Fragment; Pointer to Last Fragment


Class definitions


To be documented

Public variables


None defined

Function declarations



Initialization functions

procedure IP6Init;
Description: To be documented
Note None documented


IPv6 functions

function CheckIP6(ABuffer:Pointer):Boolean;
Description: Verify that the packet is a valid IP6 packet
Buffer Complete packet without Adapter header


function GetIP6Protocol(ABuffer:Pointer):Byte;
Description: To be documented
Buffer Complete packet including Transport header


function GetIP6HeaderOffset(ABuffer:Pointer):Word;
Description: Return Start of the IP6 Header (Start of Packet)
Buffer Complete packet including Transport header


function GetIP6HeaderLength(ABuffer:Pointer):Word;
Description: Return Size of IP6 Header (Including Options)
Buffer Complete packet including Transport header


function GetIP6DataOffset(ABuffer:Pointer):Word;
Description: Return Start of IP6 Packet Data (Length of IP6 Header)
Buffer Complete packet including Transport header


function GetIP6DataLength(ABuffer:Pointer):Word;
Description: Return Size of IP6 Packet Data (IP6 TotalLength - IP6 Header)
Buffer Complete packet including Transport header


function ChecksumIP6(ABuffer:Pointer; AOffset,ALength:Word):Word;
Description: Validate the IP6 Header and Options Checksum on Receive
Buffer Complete packet including Transport header


Return to Unit Reference