Thank you very much Donald. This is what I was looking for. So thread_add_timer is registered with proper arguments and the registered function rip_interface_wakeup() is called when timer expired.
Thanks once again. I am beginner to this and am trying to understand the code. On Wed, Apr 8, 2015 at 5:11 PM, Donald Sharp <[email protected]> wrote: > rip_interface_wakeup is scheduled to wakeup via this code: > > ri->t_wakeup = thread_add_timer (master, rip_interface_wakeup, > ifp, 1); > > If you look ifp is passed in. thread_add_timer corresponds to: > > /* Add timer event thread. */ > struct thread * > funcname_thread_add_timer (struct thread_master *m, > int (*func) (struct thread *), > void *arg, long timer, const char* funcname) > { > > ifp becomes void *arg for this function, and the value is stored in > thread->arg in thread_get that is eventually called.. > > When the timer pops thread->func is called with thread->arg in > thread_call(); > > donald > > On Wed, Apr 8, 2015 at 1:37 AM, srujan k <[email protected]> wrote: > >> Hi Devteam, >> >> I am going through the source code of RIP. I am not able to understand >> how the function "rip_interface_wakeup" is filled with interface structure. >> >> There is a call ifp = THREAD_ARG (t);, after this call ifp is filled >> with interface detail. I am not able to understand how THREAD_ARG is used >> to fill ifp structure. >> >> >> The thread structure has following details. >> * Thread itself. */ >> struct thread >> { >> thread_type type; /* thread type */ >> thread_type add_type; /* thread type */ >> struct thread *next; /* next pointer of the thread */ >> struct thread *prev; /* previous pointer of the thread */ >> struct thread_master *master; /* pointer to the struct >> thread_master. */ >> int (*func) (struct thread *); /* event function */ >> void *arg; /* event argument */ >> union { >> int val; /* second argument of the event. */ >> int fd; /* file descriptor in case of read/write. */ >> struct timeval sands; /* rest of time sands value. */ >> } u; >> RUSAGE_T ru; /* Indepth usage info. */ >> struct cpu_thread_history *hist; /* cache pointer to cpu_history */ >> * char* funcname;* >> }; >> >> Can some one point to me to understand the code flow to start with. >> >> Regards, >> Srujan >> >> _______________________________________________ >> Quagga-dev mailing list >> [email protected] >> https://lists.quagga.net/mailman/listinfo/quagga-dev >> >> >
_______________________________________________ Quagga-dev mailing list [email protected] https://lists.quagga.net/mailman/listinfo/quagga-dev
