]>
Commit | Line | Data |
---|---|---|
2a6a4076 MA |
1 | #ifndef LIBSLIRP_H |
2 | #define LIBSLIRP_H | |
f0cbd3ec | 3 | |
35ee75f3 MAL |
4 | #include <glib.h> |
5 | #include <stdint.h> | |
6 | #include <stdbool.h> | |
7 | ||
8 | #ifdef _WIN32 | |
9 | #include <winsock2.h> | |
10 | #include <in6addr.h> | |
11 | #else | |
12 | #include <netinet/in.h> | |
13 | #include <arpa/inet.h> | |
14 | #endif | |
6dbe553f | 15 | |
460fec67 JK |
16 | typedef struct Slirp Slirp; |
17 | ||
44b4ff24 | 18 | typedef int (*SlirpWriteCb)(const void *buf, size_t len, void *opaque); |
07abf6d4 | 19 | typedef void (*SlirpTimerCb)(void *opaque); |
44b4ff24 | 20 | |
d846b927 MAL |
21 | /* |
22 | * Callbacks from slirp | |
d846b927 MAL |
23 | */ |
24 | typedef struct SlirpCb { | |
07abf6d4 MAL |
25 | /* |
26 | * Send an ethernet frame to the guest network. The opaque parameter | |
27 | * is the one given to slirp_init(). | |
28 | */ | |
d846b927 | 29 | void (*output)(void *opaque, const uint8_t *pkt, int pkt_len); |
2addc8fb MAL |
30 | /* Print a message for an error due to guest misbehavior. */ |
31 | void (*guest_error)(const char *msg); | |
e6dbff3f MAL |
32 | /* Return the virtual clock value in nanoseconds */ |
33 | int64_t (*clock_get_ns)(void); | |
07abf6d4 MAL |
34 | /* Create a new timer with the given callback and opaque data */ |
35 | void *(*timer_new)(SlirpTimerCb cb, void *opaque); | |
36 | /* Remove and free a timer */ | |
37 | void (*timer_free)(void *timer); | |
38 | /* Modify a timer to expire at @expire_time */ | |
39 | void (*timer_mod)(void *timer, int64_t expire_time); | |
848c7092 MAL |
40 | /* Register a fd for future polling */ |
41 | void (*register_poll_fd)(int fd); | |
f6e5aa36 MAL |
42 | /* Unregister a fd */ |
43 | void (*unregister_poll_fd)(int fd); | |
c21d9594 MAL |
44 | /* Kick the io-thread, to signal that new events may be processed */ |
45 | void (*notify)(void); | |
d846b927 MAL |
46 | } SlirpCb; |
47 | ||
62c1d2c4 | 48 | |
0b11c036 | 49 | Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork, |
9f8bd042 | 50 | struct in_addr vnetmask, struct in_addr vhost, |
0b11c036 | 51 | bool in6_enabled, |
7aac531e YB |
52 | struct in6_addr vprefix_addr6, uint8_t vprefix_len, |
53 | struct in6_addr vhost6, const char *vhostname, | |
0fca92b9 | 54 | const char *tftp_server_name, |
7aac531e YB |
55 | const char *tftp_path, const char *bootfile, |
56 | struct in_addr vdhcp_start, struct in_addr vnameserver, | |
57 | struct in6_addr vnameserver6, const char **vdnssearch, | |
62c1d2c4 | 58 | const char *vdomainname, |
d846b927 | 59 | const SlirpCb *callbacks, |
62c1d2c4 | 60 | void *opaque); |
ad0d8c4c | 61 | void slirp_cleanup(Slirp *slirp); |
f0cbd3ec | 62 | |
a42e9c41 | 63 | void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout); |
f0cbd3ec | 64 | |
8917c3bd | 65 | void slirp_pollfds_poll(GArray *pollfds, int select_error); |
f0cbd3ec | 66 | |
9f8bd042 | 67 | void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len); |
f0cbd3ec | 68 | |
9f8bd042 JK |
69 | int slirp_add_hostfwd(Slirp *slirp, int is_udp, |
70 | struct in_addr host_addr, int host_port, | |
c92ef6a2 | 71 | struct in_addr guest_addr, int guest_port); |
9f8bd042 JK |
72 | int slirp_remove_hostfwd(Slirp *slirp, int is_udp, |
73 | struct in_addr host_addr, int host_port); | |
44b4ff24 MAL |
74 | int slirp_add_exec(Slirp *slirp, const char *cmdline, |
75 | struct in_addr *guest_addr, int guest_port); | |
76 | int slirp_add_guestfwd(Slirp *slirp, SlirpWriteCb write_cb, void *opaque, | |
bb53fc53 | 77 | struct in_addr *guest_addr, int guest_port); |
9bf05444 | 78 | |
b7f43bf2 | 79 | char *slirp_connection_info(Slirp *slirp); |
6dbe553f | 80 | |
9f8bd042 JK |
81 | void slirp_socket_recv(Slirp *slirp, struct in_addr guest_addr, |
82 | int guest_port, const uint8_t *buf, int size); | |
83 | size_t slirp_socket_can_recv(Slirp *slirp, struct in_addr guest_addr, | |
84 | int guest_port); | |
31a60e22 | 85 | |
f0cbd3ec | 86 | #endif |