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