|
iPXE
|
Linux Slirp network driver. More...
#include <stdio.h>#include <string.h>#include <errno.h>#include <ipxe/netdevice.h>#include <ipxe/ethernet.h>#include <ipxe/if_ether.h>#include <ipxe/in.h>#include <ipxe/timer.h>#include <ipxe/retry.h>#include <ipxe/linux.h>#include <ipxe/linux_api.h>#include <ipxe/slirp.h>Go to the source code of this file.
Data Structures | |
| struct | slirp_nic |
| A Slirp network interface. More... | |
| struct | slirp_alarm |
| A Slirp alarm timer. More... | |
Macros | |
| #define | SLIRP_MAX_FDS 128 |
| Maximum number of open file descriptors. | |
Functions | |
| static ssize_t __asmcall | slirp_send_packet (const void *buf, size_t len, void *device) |
| Send packet. | |
| static void __asmcall | slirp_guest_error (const char *msg, void *device) |
| Print an error message. | |
| static int64_t __asmcall | slirp_clock_get_ns (void *device __unused) |
| Get virtual clock. | |
| static void | slirp_expired (struct retry_timer *timer, int over __unused) |
| Handle timer expiry. | |
| static void *__asmcall | slirp_timer_new (void(__asmcall *callback)(void *opaque), void *opaque, void *device) |
| Create a new timer. | |
| static void __asmcall | slirp_timer_free (void *timer, void *device) |
| Delete a timer. | |
| static void __asmcall | slirp_timer_mod (void *timer, int64_t expire, void *device) |
| Set timer expiry time. | |
| static void __asmcall | slirp_register_poll_fd (int fd, void *device) |
| Register file descriptor for polling. | |
| static void __asmcall | slirp_unregister_poll_fd (int fd, void *device) |
| Unregister file descriptor. | |
| static void __asmcall | slirp_notify (void *device) |
| Notify that new events are ready. | |
| static int | slirp_open (struct net_device *netdev) |
| Open network device. | |
| static void | slirp_close (struct net_device *netdev) |
| Close network device. | |
| static int | slirp_transmit (struct net_device *netdev, struct io_buffer *iobuf) |
| Transmit packet. | |
| static int __asmcall | slirp_add_poll (int fd, int events, void *device) |
| Add polling file descriptor. | |
| static int __asmcall | slirp_get_revents (int index, void *device) |
| Get returned events for a file descriptor. | |
| static void | slirp_poll (struct net_device *netdev) |
| Poll for completed and received packets. | |
| static int | slirp_probe (struct linux_device *linux, struct linux_device_request *request) |
| Probe device. | |
| static void | slirp_remove (struct linux_device *linux) |
| Remove device. | |
| LINUX_ROM ("slirp", "libslirp NIC") | |
Variables | |
| static const uint8_t | slirp_default_mac [ETH_ALEN] |
| Default MAC address. | |
| static struct slirp_callbacks | slirp_callbacks |
| Slirp callbacks. | |
| static struct net_device_operations | slirp_operations |
| Network device operations. | |
| struct linux_driver slirp_driver | __linux_driver |
| Slirp driver. | |
Linux Slirp network driver.
Definition in file slirp.c.
| #define SLIRP_MAX_FDS 128 |
Maximum number of open file descriptors.
Definition at line 40 of file slirp.c.
Referenced by slirp_add_poll().
Send packet.
| buf | Data buffer |
| len | Length of data |
| device | Device opaque pointer |
| len | Consumed length (or negative on error) |
Definition at line 83 of file slirp.c.
References __asmcall, alloc_iob(), iob_put, len, memcpy(), netdev, and netdev_rx().
|
static |
Print an error message.
| msg | Error message |
| device | Device opaque pointer |
Definition at line 108 of file slirp.c.
References __asmcall, DBGC, msg(), netdev, and slirp_nic::slirp.
Get virtual clock.
| device | Device opaque pointer |
| clock_ns | Clock time in nanoseconds |
Definition at line 121 of file slirp.c.
References __asmcall, __unused, currticks(), and TICKS_PER_MS.
|
static |
Handle timer expiry.
| timer | Retry timer |
| over | Failure indicator |
Definition at line 134 of file slirp.c.
References __unused, container_of, DBGC, slirp_alarm::opaque, slirp_alarm::slirp, and slirp_nic::slirp.
Referenced by slirp_timer_new().
|
static |
Create a new timer.
| callback | Timer callback |
| opaque | Timer opaque pointer |
| device | Device opaque pointer |
| timer | Timer |
Definition at line 153 of file slirp.c.
References __asmcall, DBGC, malloc(), memset(), netdev, NULL, slirp_alarm::opaque, slirp_alarm::slirp, slirp_nic::slirp, slirp_expired(), and slirp_alarm::timer.
|
static |
Delete a timer.
| timer | Timer |
| device | Device opaque pointer |
Definition at line 184 of file slirp.c.
References __asmcall, DBGC, free, netdev, slirp_alarm::slirp, slirp_nic::slirp, stop_timer(), and slirp_alarm::timer.
Set timer expiry time.
| timer | Timer |
| expire | Expiry time |
| device | Device opaque pointer |
Definition at line 208 of file slirp.c.
References __asmcall, currticks(), DBGC, netdev, slirp_alarm::slirp, slirp_nic::slirp, start_timer_fixed(), TICKS_PER_MS, timeout(), and slirp_alarm::timer.
|
static |
|
static |
|
static |
|
static |
Open network device.
| netdev | Network device |
| rc | Return status code |
Definition at line 294 of file slirp.c.
References DBGC, netdev, and slirp_nic::slirp.
|
static |
|
static |
Transmit packet.
| netdev | Network device |
| iobuf | I/O buffer |
| rc | Return status code |
Definition at line 322 of file slirp.c.
References io_buffer::data, iob_len(), linux_slirp_input(), netdev, netdev_tx_complete(), and slirp_nic::slirp.
|
static |
Add polling file descriptor.
| fd | File descriptor |
| events | Events of interest |
| device | Device opaque pointer |
| index | File descriptor index |
Definition at line 341 of file slirp.c.
References __asmcall, DBGC, DBGCP, index, netdev, slirp_nic::numfds, slirp_nic::pollfds, slirp_nic::slirp, SLIRP_EVENT_ERR, SLIRP_EVENT_HUP, SLIRP_EVENT_IN, SLIRP_EVENT_OUT, SLIRP_EVENT_PRI, and SLIRP_MAX_FDS.
Referenced by slirp_poll().
|
static |
Get returned events for a file descriptor.
| index | File descriptor index |
| device | Device opaque pointer |
| events | Returned events |
Definition at line 381 of file slirp.c.
References __asmcall, DBGC2, index, netdev, slirp_nic::slirp, SLIRP_EVENT_ERR, SLIRP_EVENT_HUP, SLIRP_EVENT_IN, SLIRP_EVENT_OUT, and SLIRP_EVENT_PRI.
Referenced by slirp_poll().
|
static |
Poll for completed and received packets.
| netdev | Network device |
Definition at line 417 of file slirp.c.
References DBGC, ELINUX, error, linux_errno, linux_poll(), linux_slirp_pollfds_fill(), linux_slirp_pollfds_poll(), linux_strerror(), netdev, netdev_rx_err(), NULL, slirp_nic::slirp, slirp_add_poll(), slirp_get_revents(), and timeout().
|
static |
Probe device.
| linux | Linux device |
| request | Device creation request |
| rc | Return status code |
Definition at line 464 of file slirp.c.
References alloc_etherdev(), DBGC, linux_device::dev, ENODEV, ENOMEM, ETH_ALEN, htonl, slirp_config::in6_enabled, slirp_config::in_enabled, linux_apply_settings(), linux_set_drvdata(), linux_slirp_cleanup(), linux_slirp_new(), memcpy(), memset(), device::name, netdev, netdev_init(), netdev_link_up(), netdev_nullify(), netdev_put(), netdev_settings(), rc, register_netdev(), request, in_addr::s_addr, slirp_nic::slirp, slirp_default_mac, slirp_operations, snprintf(), unregister_netdev(), slirp_config::vdhcp_start, slirp_config::version, slirp_config::vhost, slirp_config::vnameserver, slirp_config::vnetmask, and slirp_config::vnetwork.
|
static |
Remove device.
| linux | Linux device |
Definition at line 532 of file slirp.c.
References linux_get_drvdata(), linux_slirp_cleanup(), netdev, netdev_nullify(), netdev_put(), slirp_nic::slirp, and unregister_netdev().
| LINUX_ROM | ( | "slirp" | , |
| "libslirp NIC" | ) |
Default MAC address.
Definition at line 65 of file slirp.c.
Referenced by slirp_probe().
|
static |
Slirp callbacks.
Definition at line 269 of file slirp.c.
|
static |
Network device operations.
Definition at line 443 of file slirp.c.
Referenced by slirp_probe().
| struct linux_driver slirp_driver __linux_driver |
Slirp driver.