The fragmented datagrams are learned and maintained in a lookup table with 2048 table locations (corresponding to different hash values) each containing 4 linear search entries, giving a total of 8192 entries. Since more than 4 different datagrams may have the same hash value, datagrams may not always be learned even if there are still available entries corresponding to other hash values.
A record is allocated in the table when the first fragment is received. The record is released from the table when the last fragment is received or when a configurable time-out expires.
Any fragment received that is not a first fragment is looked up in the table and if a matching entry is found it is handled as a matched fragment. If no matching entry is found, it is handled as an unmatched fragment.
All first fragments are handled as matched fragments.
The hash key type used for unmatched fragments is the IP fragment tuple type (see Hash Key Type 30: IP Fragment Tuple). Both IPV4 and IPV6 are supported. The IP fragment tuple hash key type is based on the IP header information as follows:
- IPV4: Destination address, source address, fragment ID and IP protocol
- IPV6: Destination address, source address, fragment ID
It can be configured whether to remove the entry or wait for the time-out, when a last fragment is received before the time-out period expires.