iPXE
|
Data transfer buffer. More...
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ipxe/xfer.h>
#include <ipxe/iobuf.h>
#include <ipxe/umalloc.h>
#include <ipxe/profile.h>
#include <ipxe/xferbuf.h>
Go to the source code of this file.
Functions | |
FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
void | xferbuf_free (struct xfer_buffer *xferbuf) |
Free data transfer buffer. More... | |
static int | xferbuf_ensure_size (struct xfer_buffer *xferbuf, size_t len) |
Ensure that data transfer buffer is large enough for the specified size. More... | |
int | xferbuf_write (struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len) |
Write to data transfer buffer. More... | |
int | xferbuf_read (struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len) |
Read from data transfer buffer. More... | |
int | xferbuf_deliver (struct xfer_buffer *xferbuf, struct io_buffer *iobuf, struct xfer_metadata *meta) |
Add received data to data transfer buffer. More... | |
static int | xferbuf_malloc_realloc (struct xfer_buffer *xferbuf, size_t len) |
Reallocate malloc()-based data buffer. More... | |
static void | xferbuf_malloc_write (struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len) |
Write data to malloc()-based data buffer. More... | |
static void | xferbuf_malloc_read (struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len) |
Read data from malloc()-based data buffer. More... | |
static int | xferbuf_umalloc_realloc (struct xfer_buffer *xferbuf, size_t len) |
Reallocate umalloc()-based data buffer. More... | |
static void | xferbuf_umalloc_write (struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len) |
Write data to umalloc()-based data buffer. More... | |
static void | xferbuf_umalloc_read (struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len) |
Read data from umalloc()-based data buffer. More... | |
struct xfer_buffer * | xfer_buffer (struct interface *intf) |
Get underlying data transfer buffer. More... | |
Variables | |
static struct profiler xferbuf_deliver_profiler | __profiler |
Data delivery profiler. More... | |
struct xfer_buffer_operations | xferbuf_malloc_operations |
malloc()-based data buffer operations More... | |
struct xfer_buffer_operations | xferbuf_umalloc_operations |
umalloc()-based data buffer operations More... | |
Data transfer buffer.
Definition in file xferbuf.c.
FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
void xferbuf_free | ( | struct xfer_buffer * | xferbuf | ) |
Free data transfer buffer.
xferbuf | Data transfer buffer |
Definition at line 58 of file xferbuf.c.
References xfer_buffer::len, xfer_buffer::op, xfer_buffer::pos, and xfer_buffer_operations::realloc.
Referenced by peerblk_reset(), peermux_free(), validator_free(), and validator_xfer_close().
|
static |
Ensure that data transfer buffer is large enough for the specified size.
xferbuf | Data transfer buffer |
len | Required minimum size |
rc | Return status code |
Definition at line 72 of file xferbuf.c.
References DBGC, len, xfer_buffer::len, xfer_buffer::op, rc, xfer_buffer_operations::realloc, and strerror().
Referenced by xferbuf_write().
int xferbuf_write | ( | struct xfer_buffer * | xferbuf, |
size_t | offset, | ||
const void * | data, | ||
size_t | len | ||
) |
Write to data transfer buffer.
xferbuf | Data transfer buffer |
offset | Starting offset |
data | Data to write |
len | Length of data |
Definition at line 98 of file xferbuf.c.
References data, EOVERFLOW, len, offset, xfer_buffer::op, profile_start(), profile_stop(), rc, xfer_buffer_operations::write, and xferbuf_ensure_size().
Referenced by peerblk_decrypt_write(), peerblk_retrieval_rx(), and xferbuf_deliver().
int xferbuf_read | ( | struct xfer_buffer * | xferbuf, |
size_t | offset, | ||
void * | data, | ||
size_t | len | ||
) |
Read from data transfer buffer.
xferbuf | Data transfer buffer |
offset | Starting offset |
data | Data to write |
len | Length of data |
Definition at line 128 of file xferbuf.c.
References data, ENOENT, len, xfer_buffer::len, offset, xfer_buffer::op, profile_start(), profile_stop(), and xfer_buffer_operations::read.
Referenced by peerblk_decrypt_read().
int xferbuf_deliver | ( | struct xfer_buffer * | xferbuf, |
struct io_buffer * | iobuf, | ||
struct xfer_metadata * | meta | ||
) |
Add received data to data transfer buffer.
xferbuf | Data transfer buffer |
iobuf | I/O buffer |
meta | Data transfer metadata |
rc | Return status code |
Definition at line 152 of file xferbuf.c.
References io_buffer::data, done, free_iob(), iob_len(), len, meta(), xfer_buffer::pos, profile_start(), profile_stop(), rc, XFER_FL_ABS_OFFSET, and xferbuf_write().
Referenced by blktrans_deliver(), downloader_deliver(), efi_pxe_tftp_deliver(), peermux_info_deliver(), and validator_xfer_deliver().
|
static |
|
static |
Write data to malloc()-based data buffer.
xferbuf | Data transfer buffer |
offset | Starting offset |
data | Data to copy |
len | Length of data |
Definition at line 205 of file xferbuf.c.
References xfer_buffer::data, data, len, memcpy(), and offset.
|
static |
Read data from malloc()-based data buffer.
xferbuf | Data transfer buffer |
offset | Starting offset |
data | Data to read |
len | Length of data |
Definition at line 219 of file xferbuf.c.
References xfer_buffer::data, data, len, memcpy(), and offset.
|
static |
Reallocate umalloc()-based data buffer.
xferbuf | Data transfer buffer |
len | New length (or zero to free buffer) |
rc | Return status code |
Definition at line 239 of file xferbuf.c.
References xfer_buffer::data, ENOSPC, len, and urealloc().
|
static |
Write data to umalloc()-based data buffer.
xferbuf | Data transfer buffer |
offset | Starting offset |
data | Data to copy |
len | Length of data |
Definition at line 258 of file xferbuf.c.
References copy_to_user(), xfer_buffer::data, data, len, and offset.
|
static |
Read data from umalloc()-based data buffer.
xferbuf | Data transfer buffer |
offset | Starting offset |
data | Data to read |
len | Length of data |
Definition at line 273 of file xferbuf.c.
References copy_from_user(), xfer_buffer::data, data, len, and offset.
struct xfer_buffer* xfer_buffer | ( | struct interface * | intf | ) |
Get underlying data transfer buffer.
interface | Data transfer interface |
xferbuf | Data transfer buffer, or NULL on error |
This call will check that the xfer_buffer() handler belongs to the destination interface which also provides xfer_deliver() for this interface.
This is done to prevent accidental accesses to a data transfer buffer which may be located behind a non-transparent datapath via a series of pass-through interfaces.
Definition at line 301 of file xferbuf.c.
References dest, interface::intf, intf_get_dest_op, intf_object(), intf_put(), NULL, op, xfer_buffer_TYPE, and xfer_deliver().
Referenced by http_content_buffer(), peerblk_decrypt(), and peermux_block_buffer().
|
static |
struct xfer_buffer_operations xferbuf_malloc_operations |
malloc()-based data buffer operations
Definition at line 226 of file xferbuf.c.
Referenced by xferbuf_malloc_init().
struct xfer_buffer_operations xferbuf_umalloc_operations |
umalloc()-based data buffer operations
Definition at line 281 of file xferbuf.c.
Referenced by xferbuf_umalloc_init().