]> Git Repo - qemu.git/blob - slirp/libslirp.h
slirp: replace qemu_set_nonblock()
[qemu.git] / slirp / libslirp.h
1 #ifndef LIBSLIRP_H
2 #define LIBSLIRP_H
3
4 #include "qemu-common.h"
5
6 typedef struct Slirp Slirp;
7
8 typedef int (*SlirpWriteCb)(const void *buf, size_t len, void *opaque);
9 typedef void (*SlirpTimerCb)(void *opaque);
10
11 /*
12  * Callbacks from slirp
13  */
14 typedef struct SlirpCb {
15     /*
16      * Send an ethernet frame to the guest network. The opaque parameter
17      * is the one given to slirp_init().
18      */
19     void (*output)(void *opaque, const uint8_t *pkt, int pkt_len);
20     /* Print a message for an error due to guest misbehavior.  */
21     void (*guest_error)(const char *msg);
22     /* Return the virtual clock value in nanoseconds */
23     int64_t (*clock_get_ns)(void);
24     /* Create a new timer with the given callback and opaque data */
25     void *(*timer_new)(SlirpTimerCb cb, void *opaque);
26     /* Remove and free a timer */
27     void (*timer_free)(void *timer);
28     /* Modify a timer to expire at @expire_time */
29     void (*timer_mod)(void *timer, int64_t expire_time);
30     /* Register a fd for future polling */
31     void (*register_poll_fd)(int fd);
32 } SlirpCb;
33
34
35 Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
36                   struct in_addr vnetmask, struct in_addr vhost,
37                   bool in6_enabled,
38                   struct in6_addr vprefix_addr6, uint8_t vprefix_len,
39                   struct in6_addr vhost6, const char *vhostname,
40                   const char *tftp_server_name,
41                   const char *tftp_path, const char *bootfile,
42                   struct in_addr vdhcp_start, struct in_addr vnameserver,
43                   struct in6_addr vnameserver6, const char **vdnssearch,
44                   const char *vdomainname,
45                   const SlirpCb *callbacks,
46                   void *opaque);
47 void slirp_cleanup(Slirp *slirp);
48
49 void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout);
50
51 void slirp_pollfds_poll(GArray *pollfds, int select_error);
52
53 void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
54
55 int slirp_add_hostfwd(Slirp *slirp, int is_udp,
56                       struct in_addr host_addr, int host_port,
57                       struct in_addr guest_addr, int guest_port);
58 int slirp_remove_hostfwd(Slirp *slirp, int is_udp,
59                          struct in_addr host_addr, int host_port);
60 int slirp_add_exec(Slirp *slirp, const char *cmdline,
61                    struct in_addr *guest_addr, int guest_port);
62 int slirp_add_guestfwd(Slirp *slirp, SlirpWriteCb write_cb, void *opaque,
63                    struct in_addr *guest_addr, int guest_port);
64
65 char *slirp_connection_info(Slirp *slirp);
66
67 void slirp_socket_recv(Slirp *slirp, struct in_addr guest_addr,
68                        int guest_port, const uint8_t *buf, int size);
69 size_t slirp_socket_can_recv(Slirp *slirp, struct in_addr guest_addr,
70                              int guest_port);
71
72 #endif
This page took 0.027865 seconds and 4 git commands to generate.