Hi Bhavin, On Thu, Feb 11, 2010 at 12:00 PM, <[email protected]> wrote: > > (1) Why is pim_mroute_add(&channel_oil->oil) function is called from the > del_oif function in the file pim_zebra.c while we want to delete the > S,G entry from MFC. (Which is done later on in the function del_oif ).
The kernel mroute API expects "struct mfcctl" to define the the whole OIL (output interface list) for an S,G entry in the kernel. In order to add/del specific interfaces to/from the OIL, one is supposed to update the the array mfcctl.mfcc_ttls[] accordingly and then call setsockopt(MRT_ADD_MFC) to deliver that information to the kernel MFC. pim_mroute_add() is used either to add a completely new S,G entry, as well as update the OIL for an existing S,G entry. del_oif() purpose is to remove an specific interface from OIL. It does so by removing the the interface from mfcctl.mfcc_ttls[] and then calling pim_mroute_add() to send such an update towards the kernel. > (2) What is done by the function static int on_rpf_cache_refresh (struct > thread *t) in the file pim_zebra.c since it calls pim_mroute_add which will > add an entry to the MFC? The purpose on_rpf_cache_refresh() is to verify if the RPF information for some S,G entry has changed; if so, the kernel MFC must be updated accordingly. on_rpf_cache_refresh() uses pim_mroute_add() to update an existing S,G entry, not to create a new one. Cheers, Everton
