I am working on a college project related to bgp using quagga.
Let's come straight to the point.
In vty CLI when we enter some command DEFUN executes appropriate function for that command.
e.g. if command is neighbor A.B.C.D remote-as <ASN> , then DEFUN executes neighbor_remote_as function which actually calls peer_remote_as_vty(5) function and this functions calls, ahhh so many other functions....
My work is concerned with bgpd. I need to know which functions are called when update packets (say announcement) are recieved. Not literrraly all functions , but after bgp_redistribute_[add|delete](). Here's the story :o :
The network traffic (update packets) are recieved by stream functions (defined in stream.c file). These stream functions are first called by bgpd through bgp_zclient*** functions (precisely bgp_zebra_init --> zebra_read_ipv4 --> bgp_redistribute_add or delete depending upon ZEBRA_IPV4_ROUTE_ADD or _DELETE)....

Here are some more questions:
Do anyone in this world know what bgp_node_get() does??? Is it this funcion which ultimatly creats adj-in RIB... If yes then is the structure of adj-in RIB a binary tree (caz this function is dealing with bgp_node structure which is a binary tree.), and how to "travel" from stream.h fetching update packets to the creation of forwarding table?

I know it vry hectic to explore this stuff. But if anyone of you have ever ever gone thru this software I beg you, plsss help me....with as much as information you can.

Thanks in advance.
Looking forward for replies.