iPXE
slirp.h
Go to the documentation of this file.
1#ifndef _IPXE_SLIRP_H
2#define _IPXE_SLIRP_H
3
4/** @file
5 *
6 * Linux Slirp network driver
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER );
11
12#include <stdint.h>
13#include <stdbool.h>
14
15/** Ready to be read */
16#define SLIRP_EVENT_IN 0x01
17
18/** Ready to be written */
19#define SLIRP_EVENT_OUT 0x02
20
21/** Exceptional condition */
22#define SLIRP_EVENT_PRI 0x04
23
24/** Error condition */
25#define SLIRP_EVENT_ERR 0x08
26
27/** Hang up */
28#define SLIRP_EVENT_HUP 0x10
29
30/** Slirp device configuration */
32 /** Configuration version */
34 /** Restrict to host loopback connections only */
36 /** IPv4 is enabled */
38 /** IPv4 network */
40 /** IPv4 netmask */
42 /** IPv4 host server address */
43 struct in_addr vhost;
44 /** IPv6 is enabled */
46 /** IPv6 prefix */
48 /** IPv6 prefix length */
50 /** IPv6 host server address */
52 /** Client hostname */
53 const char *vhostname;
54 /** TFTP server name */
55 const char *tftp_server_name;
56 /** TFTP path prefix */
57 const char *tftp_path;
58 /** Boot filename */
59 const char *bootfile;
60 /** DHCPv4 start address */
62 /** DNS IPv4 address */
64 /** DNS IPv6 address */
66 /** DNS search list */
67 const char **vdnssearch;
68 /** Domain name */
69 const char *vdomainname;
70 /** Interface MTU */
71 size_t if_mtu;
72 /** Interface MRU */
73 size_t if_mru;
74 /** Disable host loopback connections */
76 /** Enable emulation (apparently unsafe) */
78};
79
80/** Slirp device callbacks */
82 /**
83 * Send packet
84 *
85 * @v buf Data buffer
86 * @v len Length of data
87 * @v device Device opaque pointer
88 * @ret len Consumed length (or negative on error)
89 */
90 ssize_t ( __asmcall * send_packet ) ( const void *buf, size_t len,
91 void *device );
92 /**
93 * Print an error message
94 *
95 * @v msg Error message
96 * @v device Device opaque pointer
97 */
98 void ( __asmcall * guest_error ) ( const char *msg, void *device );
99 /**
100 * Get virtual clock
101 *
102 * @v device Device opaque pointer
103 * @ret clock_ns Clock time in nanoseconds
104 */
105 int64_t ( __asmcall * clock_get_ns ) ( void *device );
106 /**
107 * Create a new timer
108 *
109 * @v callback Timer callback
110 * @v opaque Timer opaque pointer
111 * @v device Device opaque pointer
112 * @ret timer Timer
113 */
114 void * ( __asmcall * timer_new ) ( void ( __asmcall * callback )
115 ( void *opaque ),
116 void *opaque, void *device );
117 /**
118 * Delete a timer
119 *
120 * @v timer Timer
121 * @v device Device opaque pointer
122 */
123 void ( __asmcall * timer_free ) ( void *timer, void *device );
124 /**
125 * Set timer expiry time
126 *
127 * @v timer Timer
128 * @v expire Expiry time
129 * @v device Device opaque pointer
130 */
131 void ( __asmcall * timer_mod ) ( void *timer, int64_t expire,
132 void *device );
133 /**
134 * Register file descriptor for polling
135 *
136 * @v fd File descriptor
137 * @v device Device opaque pointer
138 */
139 void ( __asmcall * register_poll_fd ) ( int fd, void *device );
140 /**
141 * Unregister file descriptor
142 *
143 * @v fd File descriptor
144 * @v device Device opaque pointer
145 */
146 void ( __asmcall * unregister_poll_fd ) ( int fd, void *device );
147 /**
148 * Notify that new events are ready
149 *
150 * @v device Device opaque pointer
151 */
152 void ( __asmcall * notify ) ( void *device );
153};
154
155#endif /* _IPXE_SLIRP_H */
#define __asmcall
Declare a function with standard calling conventions.
Definition compiler.h:15
unsigned int uint32_t
Definition stdint.h:12
unsigned char uint8_t
Definition stdint.h:10
signed long ssize_t
Definition stdint.h:7
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
Definition message.c:62
IP6 address structure.
Definition in.h:51
IP address structure.
Definition in.h:42
Slirp device callbacks.
Definition slirp.h:81
void(__asmcall *register_poll_fd)(int fd
Register file descriptor for polling.
void(__asmcall *notify)(void *device)
Notify that new events are ready.
int64_t expire
Definition slirp.h:131
void(__asmcall *timer_free)(void *timer
Delete a timer.
size_t void * device
Definition slirp.h:91
size_t len
Definition slirp.h:90
void *__asmcall * timer_new(void(__asmcall *callback)(void *opaque), void *opaque, void *device)
Create a new timer.
void(__asmcall *unregister_poll_fd)(int fd
Unregister file descriptor.
void(__asmcall *guest_error)(const char *msg
Print an error message.
int64_t(__asmcall *clock_get_ns)(void *device)
Get virtual clock.
Slirp device configuration.
Definition slirp.h:31
int restricted
Restrict to host loopback connections only.
Definition slirp.h:35
bool disable_host_loopback
Disable host loopback connections.
Definition slirp.h:75
bool in6_enabled
IPv6 is enabled.
Definition slirp.h:45
struct in_addr vnameserver6
DNS IPv6 address.
Definition slirp.h:65
struct in_addr vhost
IPv4 host server address.
Definition slirp.h:43
bool in_enabled
IPv4 is enabled.
Definition slirp.h:37
const char ** vdnssearch
DNS search list.
Definition slirp.h:67
uint32_t version
Configuration version.
Definition slirp.h:33
size_t if_mtu
Interface MTU.
Definition slirp.h:71
struct in6_addr vprefix_addr6
IPv6 prefix.
Definition slirp.h:47
struct in_addr vnetmask
IPv4 netmask.
Definition slirp.h:41
size_t if_mru
Interface MRU.
Definition slirp.h:73
struct in_addr vnameserver
DNS IPv4 address.
Definition slirp.h:63
const char * bootfile
Boot filename.
Definition slirp.h:59
const char * tftp_server_name
TFTP server name.
Definition slirp.h:55
const char * tftp_path
TFTP path prefix.
Definition slirp.h:57
bool enable_emu
Enable emulation (apparently unsafe)
Definition slirp.h:77
const char * vdomainname
Domain name.
Definition slirp.h:69
const char * vhostname
Client hostname.
Definition slirp.h:53
struct in_addr vdhcp_start
DHCPv4 start address.
Definition slirp.h:61
uint8_t vprefix_len
IPv6 prefix length.
Definition slirp.h:49
struct in_addr vnetwork
IPv4 network.
Definition slirp.h:39
struct in6_addr vhost6
IPv6 host server address.
Definition slirp.h:51
A timer.
Definition timer.h:29