To support fragments, it is necessary to use a timeout in case not all fragments arrive that are to build a datagram. After each fragment is received, the timer should be reset. A timeout commonly in use is about 60 seconds. After a timeout, the fragments must be discarded. The point is that fragments may have to wait a long time before they can be built into a datagram, so they can not remain in the 64K DMA buffer, which can wrap in a second or so under heavy traffic.
Allocated memory can hold the fragment for later reassembly.
It is not convenient to build the datagram as the fragments are received, because the total size of the expected datagram is unknown until the last fragment has been received that has a zero MF bit. If one allocates a datagram buffer of maximum size, however, it should be possible to do assemble the packets as they are received. To make it more interesting, the order of fragment arrival is not guaranteed, although this is not expected to be a problem within Fermilab. If the maximum size buffer allocation is not used, then one can build a linked list for each datagram whose fragments are in the process of being collected. Frag ments belong to the same datagram if they have the same source IP address and the same identification word in the fragment's IP header.