Line data Source code
1 : /* 2 : * Copyright (c) 2017 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #ifndef vnsw_agent_task_timer_api_h 6 : #define vnsw_agent_task_timer_api_h 7 : 8 : #include "mcast_common.h" 9 : #include <time.h> 10 : #include "task_int.h" 11 : #include "task_thread_api.h" 12 : 13 : typedef struct task_timer_ task_timer; 14 : 15 : typedef void (*timer_callback)(task_timer *, time_t); 16 : 17 : typedef struct task_timer_root_ { 18 : int placeholder; 19 : } task_timer_root; 20 : 21 : typedef struct task_timer_ { 22 : task *tp; 23 : void *agent_timer_map; 24 : timer_callback callback; 25 : int timeout; 26 : boolean oneshot; 27 : void *tdata; 28 : boolean rescheduled; 29 : task_thread deleted_entry; 30 : } task_timer; 31 : 32 1 : THREAD_TO_STRUCT(task_timer_list_entry, task_timer, deleted_entry); 33 : 34 : typedef struct utime_t_ { 35 : time_t ut_sec; 36 : time_t ut_usec; 37 : } utime_t; 38 : 39 : #define MSECS_PER_SEC 1000 40 : #define USECS_PER_MSEC 1000 41 : 42 : extern void task_timer_init(task *tp); 43 : extern void task_timer_cleanup_deleted(task *tp); 44 : extern task_timer *task_timer_create_idle_leaf(task *tp, const char *name, 45 : flag_t flags, task_timer *parent, 46 : timer_callback tjob, void *data); 47 : extern void task_timer_delete(task_timer *timer); 48 : extern void task_timer_smear_auto_parent_timers(task_timer_root *root); 49 : extern void task_timer_uset_alt_root_auto_parent_oneshot(task_timer_root *root, 50 : task_timer *timer, utime_t *offset, uint32_t jitter); 51 : extern void task_timer_reset(task_timer *timer); 52 : extern task_timer_root *task_timer_get_auto_parent_root(void); 53 : extern void *task_timer_data(task_timer *timer); 54 : extern void task_timer_utime_left(task_timer *timer, utime_t *remaining); 55 : extern boolean task_timer_running(task_timer *timer); 56 : 57 : #endif /* vnsw_agent_task_timer_api_h */