Go to the documentation of this file.
39 #ifndef IPV6_FRAG_SUPPORT
40 #define IPV6_FRAG_SUPPORT ENABLED
41 #elif (IPV6_FRAG_SUPPORT != ENABLED && IPV6_FRAG_SUPPORT != DISABLED)
42 #error IPV6_FRAG_SUPPORT parameter is not valid
46 #ifndef IPV6_OVERLAPPING_FRAG_SUPPORT
47 #define IPV6_OVERLAPPING_FRAG_SUPPORT DISABLED
48 #elif (IPV6_OVERLAPPING_FRAG_SUPPORT != ENABLED && IPV6_OVERLAPPING_FRAG_SUPPORT != DISABLED)
49 #error IPV6_OVERLAPPING_FRAG_SUPPORT parameter is not valid
53 #ifndef IPV6_FRAG_TICK_INTERVAL
54 #define IPV6_FRAG_TICK_INTERVAL 1000
55 #elif (IPV6_FRAG_TICK_INTERVAL < 10)
56 #error IPV6_FRAG_TICK_INTERVAL parameter is not valid
61 #ifndef IPV6_MAX_FRAG_DATAGRAMS
62 #define IPV6_MAX_FRAG_DATAGRAMS 4
63 #elif (IPV6_MAX_FRAG_DATAGRAMS < 1)
64 #error IPV6_MAX_FRAG_DATAGRAMS parameter is not valid
68 #ifndef IPV6_MAX_FRAG_DATAGRAM_SIZE
69 #define IPV6_MAX_FRAG_DATAGRAM_SIZE 8192
70 #elif (IPV6_MAX_FRAG_DATAGRAM_SIZE < 1280)
71 #error IPV6_MAX_FRAG_DATAGRAM_SIZE parameter is not valid
75 #ifndef IPV6_FRAG_TIME_TO_LIVE
76 #define IPV6_FRAG_TIME_TO_LIVE 15000
77 #elif (IPV6_FRAG_TIME_TO_LIVE < 1000)
78 #error IPV6_FRAG_TIME_TO_LIVE parameter is not valid
82 #define IPV6_INFINITY 0xFFFF
93 #elif defined(__CWCC__) || defined(_WIN32)
111 #if defined(__CCRX__)
113 #elif defined(__CWCC__) || defined(_WIN32)
154 size_t ipPacketOffset,
size_t fragHeaderOffset,
size_t nextHeaderOffset,
IPv6 (Internet Protocol Version 6)
systime_t timestamp
Time at which the first fragment was received.
systime_t ipv6FragTickCounter
size_t unfragPartLength
Length of the unfragmentable part.
void ipv6FragTick(NetInterface *interface)
Fragment reassembly timeout handler.
size_t fragPartLength
Length of the fragmentable part.
Structure describing a buffer that spans multiple chunks.
typedef __packed_struct
Hole descriptor.
uint16_t firstHole
Index of the first hole.
Structure describing a chunk of data.
Ipv6HoleDesc * ipv6FindHole(Ipv6FragDesc *frag, uint16_t offset)
Retrieve hole descriptor.
#define IPV6_MAX_FRAG_DATAGRAM_SIZE
Fragmented packet descriptor.
uint32_t systime_t
System time.
void ipv6ParseFragmentHeader(NetInterface *interface, const NetBuffer *ipPacket, size_t ipPacketOffset, size_t fragHeaderOffset, size_t nextHeaderOffset, NetRxAncillary *ancillary)
Parse Fragment header and reassemble original datagram.
#define Ipv6FragmentHeader
Ipv6ReassemblyBuffer buffer
Buffer containing the reassembled datagram.
Ipv6FragDesc * ipv6SearchFragQueue(NetInterface *interface, const Ipv6Header *packet, const Ipv6FragmentHeader *header)
Search for a matching datagram in the reassembly queue.
void ipv6DumpHoleList(Ipv6FragDesc *frag)
Dump hole descriptor list.
void ipv6FlushFragQueue(NetInterface *interface)
Flush IPv6 reassembly queue.
error_t ipv6FragmentDatagram(NetInterface *interface, const Ipv6PseudoHeader *pseudoHeader, const NetBuffer *payload, size_t payloadOffset, size_t pathMtu, NetTxAncillary *ancillary)
Fragment IPv6 datagram into smaller packets.
uint32_t identification
Fragment identification field.