aboutsummaryrefslogtreecommitdiff
path: root/src/slirp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/slirp.c')
-rw-r--r--src/slirp.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/slirp.c b/src/slirp.c
index a2876f2..c92a9a9 100644
--- a/src/slirp.c
+++ b/src/slirp.c
@@ -535,10 +535,26 @@ static void ra_timer_handler_cb(void *opaque)
return ra_timer_handler(slirp, NULL);
}
+void slirp_handle_timer(Slirp *slirp, SlirpTimerId id, void *cb_opaque)
+{
+ g_return_if_fail(id >= 0 && id < SLIRP_TIMER_NUM);
+
+ switch (id) {
+ case SLIRP_TIMER_RA:
+ return ra_timer_handler(slirp, cb_opaque);
+ default:
+ abort();
+ }
+}
+
void *slirp_timer_new(Slirp *slirp, SlirpTimerId id, void *cb_opaque)
{
g_return_val_if_fail(id >= 0 && id < SLIRP_TIMER_NUM, NULL);
+ if (slirp->cfg_version >= 4 && slirp->cb->timer_new_opaque) {
+ return slirp->cb->timer_new_opaque(id, cb_opaque, slirp->opaque);
+ }
+
switch (id) {
case SLIRP_TIMER_RA:
g_return_val_if_fail(cb_opaque == NULL, NULL);
@@ -568,6 +584,7 @@ Slirp *slirp_new(const SlirpConfig *cfg, const SlirpCb *callbacks, void *opaque)
slirp_init_once();
+ slirp->cfg_version = cfg->version;
slirp->opaque = opaque;
slirp->cb = callbacks;
slirp->grand = g_rand_new();