/*
 *  Self-announce facility
 *  (c) 2017-2019 Red Hat, Inc.
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 * See the COPYING file in the top-level directory.
 */

#ifndef QEMU_NET_ANNOUNCE_H
#define QEMU_NET_ANNOUNCE_H

#include "qapi/qapi-types-net.h"
#include "qemu/timer.h"

typedef struct AnnounceTimer {
    QEMUTimer *tm;
    AnnounceParameters params;
    QEMUClockType type;
    int round;
} AnnounceTimer;

/* Returns: update the timer to the next time point */
int64_t qemu_announce_timer_step(AnnounceTimer *timer);

/*
 * Delete the underlying timer and other data
 * If 'free_named' true and the timer is a named timer, then remove
 * it from the list of named timers and free the AnnounceTimer itself.
 */
void qemu_announce_timer_del(AnnounceTimer *timer, bool free_named);

/*
 * Under BQL/main thread
 * Reset the timer to the given parameters/type/notifier.
 */
void qemu_announce_timer_reset(AnnounceTimer *timer,
                               AnnounceParameters *params,
                               QEMUClockType type,
                               QEMUTimerCB *cb,
                               void *opaque);

void qemu_announce_self(AnnounceTimer *timer, AnnounceParameters *params);

#endif
