<div dir="ltr"><div>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.<br><br></div>Thanks once again. I am beginner to this and am trying to understand the code. </div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 8, 2015 at 5:11 PM, Donald Sharp <span dir="ltr">&lt;<a href="mailto:sharpd@cumulusnetworks.com" target="_blank">sharpd@cumulusnetworks.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">rip_interface_wakeup is scheduled to wakeup via this code:<div><br></div><div><div><span style="white-space:pre-wrap">        </span>    ri-&gt;t_wakeup = thread_add_timer (master, rip_interface_wakeup,</div><div><span style="white-space:pre-wrap">                                        </span>     ifp, 1);</div></div><div><br></div><div>If you look ifp is passed in.  thread_add_timer corresponds to:</div><div><br></div><div><div>/* Add timer event thread. */</div><div>struct thread *</div><div>funcname_thread_add_timer (struct thread_master *m,</div><div><span style="white-space:pre-wrap">                </span>           int (*func) (struct thread *), </div><div><span style="white-space:pre-wrap">                </span>           void *arg, long timer, const char* funcname)</div><div>{</div></div><div><br></div><div>ifp becomes void *arg for this function, and the value is stored in thread-&gt;arg in thread_get that is eventually called..</div><div><br></div><div>When the timer pops thread-&gt;func is called with thread-&gt;arg in thread_call();</div><div><br></div><div>donald</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Wed, Apr 8, 2015 at 1:37 AM, srujan k <span dir="ltr">&lt;<a href="mailto:srujan.kdas@gmail.com" target="_blank">srujan.kdas@gmail.com</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div><div><div>Hi Devteam,<br><br>I am going through the source 
code of RIP. I am not able to understand how the function 
&quot;rip_interface_wakeup&quot; is filled with interface structure.<br></div><br></div>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.<br><br><br></div><div>The thread structure has following details.<br>* Thread itself. */<br>struct thread<br>{<br>  thread_type type;        /* thread type */<br>  thread_type add_type;        /* thread type */<br>  struct thread *next;        /* next pointer of the thread */   <br>  struct thread *prev;        /* previous pointer of the thread */<br>  struct thread_master *master;    /* pointer to the struct thread_master. */<br>  int (*func) (struct thread *); /* event function */<br>  void *arg;            /* event argument */<br>  union {<br>    int val;            /* second argument of the event. */<br>    int fd;            /* file descriptor in case of read/write. */<br>    struct timeval sands;    /* rest of time sands value. */<br>  } u;<br>  RUSAGE_T ru;            /* Indepth usage info.  */<br>  struct cpu_thread_history *hist; /* cache pointer to cpu_history */<br><b>  char* funcname;</b><br>};<br><br></div><div>Can some one point to me to understand the code flow to start with.<br><br></div><div>Regards,<br></div>Srujan</div>
<br></div></div>_______________________________________________<br>
Quagga-dev mailing list<br>
<a href="mailto:Quagga-dev@lists.quagga.net" target="_blank">Quagga-dev@lists.quagga.net</a><br>
<a href="https://lists.quagga.net/mailman/listinfo/quagga-dev" target="_blank">https://lists.quagga.net/mailman/listinfo/quagga-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>