123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #ifndef _IPXE_FRAGMENT_H
- #define _IPXE_FRAGMENT_H
-
- /** @file
- *
- * Fragment reassembly
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #include <stdint.h>
- #include <ipxe/list.h>
- #include <ipxe/iobuf.h>
- #include <ipxe/retry.h>
-
- /** Fragment reassembly timeout */
- #define FRAGMENT_TIMEOUT ( TICKS_PER_SEC / 2 )
-
- /** A fragment reassembly buffer */
- struct fragment {
- /* List of fragment reassembly buffers */
- struct list_head list;
- /** Reassembled packet */
- struct io_buffer *iobuf;
- /** Length of non-fragmentable portion of reassembled packet */
- size_t hdrlen;
- /** Reassembly timer */
- struct retry_timer timer;
- /** Fragment reassembler */
- struct fragment_reassembler *fragments;
- };
-
- /** A fragment reassembler */
- struct fragment_reassembler {
- /** List of fragment reassembly buffers */
- struct list_head list;
- /**
- * Check if fragment matches fragment reassembly buffer
- *
- * @v fragment Fragment reassembly buffer
- * @v iobuf I/O buffer
- * @v hdrlen Length of non-fragmentable potion of I/O buffer
- * @ret is_fragment Fragment matches this reassembly buffer
- */
- int ( * is_fragment ) ( struct fragment *fragment,
- struct io_buffer *iobuf, size_t hdrlen );
- /**
- * Get fragment offset
- *
- * @v iobuf I/O buffer
- * @v hdrlen Length of non-fragmentable potion of I/O buffer
- * @ret offset Offset
- */
- size_t ( * fragment_offset ) ( struct io_buffer *iobuf, size_t hdrlen );
- /**
- * Check if more fragments exist
- *
- * @v iobuf I/O buffer
- * @v hdrlen Length of non-fragmentable potion of I/O buffer
- * @ret more_frags More fragments exist
- */
- int ( * more_fragments ) ( struct io_buffer *iobuf, size_t hdrlen );
- /** Associated IP statistics */
- struct ip_statistics *stats;
- };
-
- extern struct io_buffer *
- fragment_reassemble ( struct fragment_reassembler *fragments,
- struct io_buffer *iobuf, size_t *hdrlen );
-
- #endif /* _IPXE_FRAGMENT_H */
|