Unit IPv6

From Ultibo.org
Jump to: navigation, search

Return to Unit Reference


Description


Ultibo IPv6 (Internet Protocol Version 6) unit

Constants



IPv6 specific constants IP6_TRANSPORT_*
IP6_TRANSPORT_NAME = 'IPV6';  


IPv6 header 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


IPv6 extension header 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



IPv6 specific classes

TIP6Buffer = class(TTransportBufferEx)
TIP6TransportAdapter = class(TTransportAdapter)
TIP6TransportBinding = class(TTransportBinding)
TIP6TransportProtocol = class(TTransportProtocol)
TIP6TransportFilter = class(TTransportFilter)
TIP6TransportConfig = class(TTransportConfig)
TIP6Transport = class(TNetworkTransport)
TIP6State = class(TTransportState)
TIP6Options = class(TTransportOptions)
TIP6HostEntry = class(THostEntry)
TIP6RouteEntry = class(TRouteEntry)
TIP6AddressEntry = class(TAddressEntry)
TIP6NetworkEntry = class(TNetworkEntry)
TIP6ServEntry = class(TServEntry)
TIP6ProtoEntry = class(TProtoEntry)


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