| #ifndef LIBSLIRP_H |
| #define LIBSLIRP_H |
| |
| #include "qemu-common.h" |
| |
| struct Slirp; |
| typedef struct Slirp Slirp; |
| |
| Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork, |
| struct in_addr vnetmask, struct in_addr vhost, |
| bool in6_enabled, |
| struct in6_addr vprefix_addr6, uint8_t vprefix_len, |
| struct in6_addr vhost6, const char *vhostname, |
| const char *tftp_path, const char *bootfile, |
| struct in_addr vdhcp_start, struct in_addr vnameserver, |
| struct in6_addr vnameserver6, const char **vdnssearch, |
| void *opaque); |
| void slirp_cleanup(Slirp *slirp); |
| |
| /* Setup custom DNS servers to be used. |dns_servers| is an array of |
| * |num_dns_servers| IPv4 host addresses for DNS servers to be used |
| * when translating guest IPv4 DNS addresses (typically from 10.0.2.3 |
| * to 10.0.2.(3 + num_dns_servers - 1). */ |
| void slirp_init_custom_dns_servers(Slirp *slirp, |
| const struct sockaddr_storage *dns_servers, |
| int num_dns_servers); |
| |
| |
| /* Check whether |guest_ip| is the IPv4 address of a guest DNS server. |
| * If that's the case, set |*host_ip| to the corresponding host DNS server |
| * address and return 0. Otherwise, leave |host_ip| untouched and |
| * return -1 */ |
| int slirp_translate_guest_dns(Slirp *slirp, |
| const struct sockaddr_in *guest_ip, |
| struct sockaddr_in *host_ip); |
| |
| /* Same for IPv6 addresses */ |
| int slirp_translate_guest_dns6(Slirp *slirp, |
| const struct sockaddr_in6 *guest_ip6, |
| struct sockaddr_in6 *host_ip6); |
| |
| void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout); |
| |
| void slirp_pollfds_poll(GArray *pollfds, int select_error); |
| |
| void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len); |
| |
| /* you must provide the following functions: */ |
| void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len); |
| |
| int slirp_add_hostfwd(Slirp *slirp, int is_udp, |
| struct in_addr host_addr, int host_port, |
| struct in_addr guest_addr, int guest_port); |
| int slirp_remove_hostfwd(Slirp *slirp, int is_udp, |
| struct in_addr host_addr, int host_port); |
| int slirp_add_exec(Slirp *slirp, int do_pty, const void *args, |
| struct in_addr *guest_addr, int guest_port); |
| |
| void slirp_connection_info(Slirp *slirp, Monitor *mon); |
| |
| void slirp_socket_recv(Slirp *slirp, struct in_addr guest_addr, |
| int guest_port, const uint8_t *buf, int size); |
| size_t slirp_socket_can_recv(Slirp *slirp, struct in_addr guest_addr, |
| int guest_port); |
| |
| #endif |