pimd: Allow further refinement of pim join order

When a 'show ip pim join' is issued and we have
(S,G,rpt) being sent back up to us.  We need
to order correctly for this situation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2016-11-07 10:01:50 -05:00
parent 8711a53dbc
commit 340bce7d35

View File

@ -76,17 +76,34 @@ static void *if_list_clean(struct pim_interface *pim_ifp)
static int
pim_ifchannel_compare (struct pim_ifchannel *ch1, struct pim_ifchannel *ch2)
{
if (ntohl(ch1->sg.grp.s_addr) < ntohl(ch2->sg.grp.s_addr))
return -1;
struct pim_interface *pim_ifp1;
struct pim_interface *pim_ifp2;
if (ntohl(ch1->sg.grp.s_addr) > ntohl(ch2->sg.grp.s_addr))
return 1;
if (ntohl(ch1->sg.grp.s_addr) < ntohl(ch2->sg.grp.s_addr))
return -1;
if (ntohl(ch1->sg.src.s_addr) < ntohl(ch2->sg.src.s_addr))
return -1;
if (ntohl(ch1->sg.grp.s_addr) > ntohl(ch2->sg.grp.s_addr))
return 1;
if (ntohl(ch1->sg.src.s_addr) > ntohl(ch2->sg.src.s_addr))
return 1;
if (ntohl(ch1->sg.src.s_addr) < ntohl(ch2->sg.src.s_addr))
return -1;
if (ntohl(ch1->sg.src.s_addr) > ntohl(ch2->sg.src.s_addr))
return 1;
pim_ifp1 = ch1->interface->info;
pim_ifp2 = ch2->interface->info;
if (ntohl(pim_ifp1->primary_address.s_addr) < ntohl(pim_ifp2->primary_address.s_addr))
return -1;
if (ntohl(pim_ifp1->primary_address.s_addr) > ntohl(pim_ifp2->primary_address.s_addr))
return 1;
if (pim_ifp1->mroute_vif_index < pim_ifp2->mroute_vif_index)
return -1;
if (pim_ifp1->mroute_vif_index > pim_ifp2->mroute_vif_index)
return 1;
return 0;
}