iPXE
xfer.h
Go to the documentation of this file.
1#ifndef _IPXE_XFER_H
2#define _IPXE_XFER_H
3
4/** @file
5 *
6 * Data transfer interfaces
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <stddef.h>
14#include <stdarg.h>
15#include <ipxe/interface.h>
16
17struct xfer_metadata;
18struct io_buffer;
19struct sockaddr;
20struct net_device;
21
22/** Data transfer metadata */
24 /** Flags
25 *
26 * This is the bitwise OR of zero or more @c XFER_FL_XXX
27 * constants.
28 */
29 unsigned int flags;
30 /** Offset of data within stream
31 *
32 * This is an absolute offset if the @c XFER_FL_ABS_OFFSET
33 * flag is set, otherwise a relative offset. (A freshly
34 * zeroed @c xfer_metadata structure therefore represents a
35 * relative offset of zero, i.e. no offset from the current
36 * position.)
37 */
39 /** Source socket address, or NULL */
40 struct sockaddr *src;
41 /** Destination socket address, or NULL */
42 struct sockaddr *dest;
43 /** Network device, or NULL */
45};
46
47/** Offset is absolute */
48#define XFER_FL_ABS_OFFSET 0x0001
49
50/** Sender is relinquishing use of half-duplex channel */
51#define XFER_FL_OVER 0x0002
52
53/** This is the final data transfer */
54#define XFER_FL_OUT 0x0004
55
56/** Data content represents a command or status message
57 *
58 * The flag @c XFER_FL_RESPONSE is used to distinguish between a
59 * command message and a status message.
60 */
61#define XFER_FL_CMD_STAT 0x0008
62
63/** Data content is a response */
64#define XFER_FL_RESPONSE 0x0010
65
66/* Data transfer interface operations */
67
68extern int xfer_vredirect ( struct interface *intf, int type,
69 va_list args );
70#define xfer_vredirect_TYPE( object_type ) \
71 typeof ( int ( object_type, int type, va_list args ) )
72
73extern size_t xfer_window ( struct interface *intf );
74#define xfer_window_TYPE( object_type ) \
75 typeof ( size_t ( object_type ) )
76
77extern void xfer_window_changed ( struct interface *intf );
78#define xfer_window_changed_TYPE( object_type ) \
79 typeof ( void ( object_type ) )
80
81extern struct io_buffer * xfer_alloc_iob ( struct interface *intf,
82 size_t len );
83#define xfer_alloc_iob_TYPE( object_type ) \
84 typeof ( struct io_buffer * ( object_type, size_t len ) )
85
86extern int xfer_deliver ( struct interface *intf,
87 struct io_buffer *iobuf,
88 struct xfer_metadata *meta );
89#define xfer_deliver_TYPE( object_type ) \
90 typeof ( int ( object_type, struct io_buffer *iobuf, \
91 struct xfer_metadata *meta ) )
92
93/* Data transfer interface helper functions */
94
95extern int xfer_redirect ( struct interface *xfer, int type, ... );
96extern int xfer_deliver_iob ( struct interface *intf,
97 struct io_buffer *iobuf );
98extern int xfer_deliver_raw_meta ( struct interface *intf, const void *data,
99 size_t len, struct xfer_metadata *meta );
100extern int xfer_deliver_raw ( struct interface *intf,
101 const void *data, size_t len );
102extern int xfer_vprintf ( struct interface *intf,
103 const char *format, va_list args );
104extern int __attribute__ (( format ( printf, 2, 3 ) ))
105xfer_printf ( struct interface *intf, const char *format, ... );
106extern int xfer_seek ( struct interface *intf, off_t offset );
107extern int xfer_check_order ( struct xfer_metadata *meta, size_t *pos,
108 size_t len );
109
110#endif /* _IPXE_XFER_H */
signed long off_t
Definition stdint.h:8
uint16_t offset
Offset to command line.
Definition bzimage.h:3
ring len
Length.
Definition dwmac.h:226
uint32_t type
Operating system type.
Definition ena.h:1
uint8_t data[48]
Additional event data.
Definition ena.h:11
uint8_t meta
Metadata flags.
Definition ena.h:3
#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
#define __attribute__(x)
Definition compiler.h:10
Object interfaces.
__builtin_va_list va_list
Definition stdarg.h:7
An object interface.
Definition interface.h:125
A persistent I/O buffer.
Definition iobuf.h:38
A network device.
Definition netdevice.h:353
Generalized socket address structure.
Definition socket.h:97
Data transfer metadata.
Definition xfer.h:23
struct net_device * netdev
Network device, or NULL.
Definition xfer.h:44
unsigned int flags
Flags.
Definition xfer.h:29
struct sockaddr * dest
Destination socket address, or NULL.
Definition xfer.h:42
off_t offset
Offset of data within stream.
Definition xfer.h:38
struct sockaddr * src
Source socket address, or NULL.
Definition xfer.h:40
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition vsprintf.c:465
int xfer_check_order(struct xfer_metadata *meta, size_t *pos, size_t len)
Check that data is delivered strictly in order.
Definition xfer.c:378
int xfer_printf(struct interface *intf, const char *format,...)
Deliver formatted string.
Definition xfer.c:335
int xfer_seek(struct interface *intf, off_t offset)
Seek to position.
Definition xfer.c:352
size_t xfer_window(struct interface *intf)
Check flow control window.
Definition xfer.c:117
int xfer_vprintf(struct interface *intf, const char *format, va_list args)
Deliver formatted string.
Definition xfer.c:301
int xfer_deliver(struct interface *intf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram.
Definition xfer.c:195
struct io_buffer * xfer_alloc_iob(struct interface *intf, size_t len)
Allocate I/O buffer.
Definition xfer.c:159
void xfer_window_changed(struct interface *intf)
Report change of flow control window.
Definition xfer.c:147
int xfer_deliver_raw_meta(struct interface *intf, const void *data, size_t len, struct xfer_metadata *meta)
Deliver datagram as raw data.
Definition xfer.c:269
int xfer_vredirect(struct interface *intf, int type, va_list args)
Send redirection event.
Definition xfer.c:63
int xfer_redirect(struct interface *xfer, int type,...)
Send redirection event.
Definition xfer.c:239
int const char * format
Definition xfer.h:105
int xfer_deliver_iob(struct interface *intf, struct io_buffer *iobuf)
Deliver datagram as I/O buffer without metadata.
Definition xfer.c:256
int xfer_deliver_raw(struct interface *intf, const void *data, size_t len)
Deliver datagram as raw data without metadata.
Definition xfer.c:289