iPXE
fragment.h
Go to the documentation of this file.
1#ifndef _IPXE_FRAGMENT_H
2#define _IPXE_FRAGMENT_H
3
4/** @file
5 *
6 * Fragment reassembly
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <stdint.h>
14#include <ipxe/list.h>
15#include <ipxe/iobuf.h>
16#include <ipxe/retry.h>
17
18/** Fragment reassembly timeout */
19#define FRAGMENT_TIMEOUT ( TICKS_PER_SEC / 2 )
20
21/** A fragment reassembly buffer */
22struct fragment {
23 /* List of fragment reassembly buffers */
25 /** Reassembled packet */
27 /** Length of non-fragmentable portion of reassembled packet */
28 size_t hdrlen;
29 /** Reassembly timer */
31 /** Fragment reassembler */
33};
34
35/** A fragment reassembler */
37 /** List of fragment reassembly buffers */
39 /**
40 * Check if fragment matches fragment reassembly buffer
41 *
42 * @v fragment Fragment reassembly buffer
43 * @v iobuf I/O buffer
44 * @v hdrlen Length of non-fragmentable potion of I/O buffer
45 * @ret is_fragment Fragment matches this reassembly buffer
46 */
47 int ( * is_fragment ) ( struct fragment *fragment,
48 struct io_buffer *iobuf, size_t hdrlen );
49 /**
50 * Get fragment offset
51 *
52 * @v iobuf I/O buffer
53 * @v hdrlen Length of non-fragmentable potion of I/O buffer
54 * @ret offset Offset
55 */
56 size_t ( * fragment_offset ) ( struct io_buffer *iobuf, size_t hdrlen );
57 /**
58 * Check if more fragments exist
59 *
60 * @v iobuf I/O buffer
61 * @v hdrlen Length of non-fragmentable potion of I/O buffer
62 * @ret more_frags More fragments exist
63 */
64 int ( * more_fragments ) ( struct io_buffer *iobuf, size_t hdrlen );
65 /** Associated IP statistics */
67};
68
69extern struct io_buffer *
71 struct io_buffer *iobuf, size_t *hdrlen );
72
73#endif /* _IPXE_FRAGMENT_H */
__SIZE_TYPE__ size_t
Definition stdint.h:6
struct io_buffer * fragment_reassemble(struct fragment_reassembler *fragments, struct io_buffer *iobuf, size_t *hdrlen)
Reassemble packet.
Definition fragment.c:89
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
I/O buffers.
Linked lists.
Retry timers.
A fragment reassembler.
Definition fragment.h:36
struct list_head list
List of fragment reassembly buffers.
Definition fragment.h:38
int(* is_fragment)(struct fragment *fragment, struct io_buffer *iobuf, size_t hdrlen)
Check if fragment matches fragment reassembly buffer.
Definition fragment.h:47
size_t(* fragment_offset)(struct io_buffer *iobuf, size_t hdrlen)
Get fragment offset.
Definition fragment.h:56
struct ip_statistics * stats
Associated IP statistics.
Definition fragment.h:66
int(* more_fragments)(struct io_buffer *iobuf, size_t hdrlen)
Check if more fragments exist.
Definition fragment.h:64
A fragment reassembly buffer.
Definition fragment.h:22
struct io_buffer * iobuf
Reassembled packet.
Definition fragment.h:26
struct list_head list
Definition fragment.h:24
size_t hdrlen
Length of non-fragmentable portion of reassembled packet.
Definition fragment.h:28
struct fragment_reassembler * fragments
Fragment reassembler.
Definition fragment.h:32
struct retry_timer timer
Reassembly timer.
Definition fragment.h:30
A persistent I/O buffer.
Definition iobuf.h:38
IP system statistics.
Definition ipstat.h:45
A doubly-linked list entry (or list head)
Definition list.h:19
A retry timer.
Definition retry.h:22