Go to the documentation of this file.
39 #ifndef IPV4_FRAG_SUPPORT
40 #define IPV4_FRAG_SUPPORT ENABLED
41 #elif (IPV4_FRAG_SUPPORT != ENABLED && IPV4_FRAG_SUPPORT != DISABLED)
42 #error IPV4_FRAG_SUPPORT parameter is not valid
46 #ifndef IPV4_OVERLAPPING_FRAG_SUPPORT
47 #define IPV4_OVERLAPPING_FRAG_SUPPORT ENABLED
48 #elif (IPV4_OVERLAPPING_FRAG_SUPPORT != ENABLED && IPV4_OVERLAPPING_FRAG_SUPPORT != DISABLED)
49 #error IPV4_OVERLAPPING_FRAG_SUPPORT parameter is not valid
53 #ifndef IPV4_FRAG_TICK_INTERVAL
54 #define IPV4_FRAG_TICK_INTERVAL 1000
55 #elif (IPV4_FRAG_TICK_INTERVAL < 10)
56 #error IPV4_FRAG_TICK_INTERVAL parameter is not valid
61 #ifndef IPV4_MAX_FRAG_DATAGRAMS
62 #define IPV4_MAX_FRAG_DATAGRAMS 4
63 #elif (IPV4_MAX_FRAG_DATAGRAMS < 1)
64 #error IPV4_MAX_FRAG_DATAGRAMS parameter is not valid
68 #ifndef IPV4_MAX_FRAG_DATAGRAM_SIZE
69 #define IPV4_MAX_FRAG_DATAGRAM_SIZE 8192
70 #elif (IPV4_MAX_FRAG_DATAGRAM_SIZE < 576)
71 #error IPV4_MAX_FRAG_DATAGRAM_SIZE parameter is not valid
75 #ifndef IPV4_FRAG_TIME_TO_LIVE
76 #define IPV4_FRAG_TIME_TO_LIVE 15000
77 #elif (IPV4_FRAG_TIME_TO_LIVE < 1000)
78 #error IPV4_FRAG_TIME_TO_LIVE parameter is not valid
82 #define IPV4_INFINITY 0xFFFF
93 #elif defined(__CWCC__) || defined(_WIN32)
111 #if defined(__CCRX__)
113 #elif defined(__CWCC__) || defined(_WIN32)
systime_t timestamp
Time at which the first fragment was received.
Structure describing a buffer that spans multiple chunks.
Ipv4FragDesc * ipv4SearchFragQueue(NetInterface *interface, const Ipv4Header *packet)
Search for a matching datagram in the reassembly queue.
#define IPV4_MAX_FRAG_DATAGRAM_SIZE
void ipv4ReassembleDatagram(NetInterface *interface, const Ipv4Header *packet, size_t length, NetRxAncillary *ancillary)
IPv4 datagram reassembly algorithm.
void ipv4DumpHoleList(Ipv4FragDesc *frag)
Dump hole descriptor list.
typedef __packed_struct
Hole descriptor.
uint16_t firstHole
Index of the first hole.
Ipv4HoleDesc * ipv4FindHole(Ipv4FragDesc *frag, uint16_t offset)
Retrieve hole descriptor.
Structure describing a chunk of data.
size_t dataLen
Length of the payload.
void ipv4FragTick(NetInterface *interface)
Fragment reassembly timeout handler.
size_t headerLength
Length of the header.
uint32_t systime_t
System time.
Fragmented packet descriptor.
error_t ipv4FragmentDatagram(NetInterface *interface, const Ipv4PseudoHeader *pseudoHeader, uint16_t id, const NetBuffer *payload, size_t payloadOffset, NetTxAncillary *ancillary)
Fragment an IPv4 datagram into smaller packets.
void ipv4FlushFragQueue(NetInterface *interface)
Flush IPv4 reassembly queue.
IPv4 (Internet Protocol Version 4)
Ipv4ReassemblyBuffer buffer
Buffer containing the reassembled datagram.
systime_t ipv4FragTickCounter