pimd: On RP Allow no output interfaces

On the RP when we receive a register packet for the
same interface that we received the *,G join on
allow the RP to receive the packets but to do
nothing with them.

Additionally check the last_used values even
if the ioctl fails.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2016-08-22 14:59:24 -04:00
parent 4df01a4e66
commit 51e828334e
2 changed files with 6 additions and 3 deletions

View File

@ -364,6 +364,10 @@ pim_mroute_msg_wrvifwhole (int fd, struct interface *ifp, const char *buf)
//No if channel, but upstream we are at the RP. //No if channel, but upstream we are at the RP.
pim_nexthop_lookup (&source, up->upstream_register); pim_nexthop_lookup (&source, up->upstream_register);
pim_register_stop_send(source.interface, &sg, pim_ifp->primary_address, up->upstream_register); pim_register_stop_send(source.interface, &sg, pim_ifp->primary_address, up->upstream_register);
if (!up->channel_oil)
up->channel_oil = pim_channel_oil_add (&sg, pim_ifp->mroute_vif_index);
if (!up->channel_oil->installed)
pim_mroute_add (up->channel_oil);
//Send S bit down the join. //Send S bit down the join.
up->sptbit = PIM_UPSTREAM_SPTBIT_TRUE; up->sptbit = PIM_UPSTREAM_SPTBIT_TRUE;
} }
@ -754,6 +758,7 @@ pim_mroute_update_counters (struct channel_oil *c_oil)
c_oil->cc.oldwrong_if = c_oil->cc.wrong_if; c_oil->cc.oldwrong_if = c_oil->cc.wrong_if;
c_oil->cc.oldlastused = c_oil->cc.lastused; c_oil->cc.oldlastused = c_oil->cc.lastused;
pim_zlookup_sg_statistics (c_oil);
if (ioctl (qpim_mroute_socket_fd, SIOCGETSGCNT, &sgreq)) if (ioctl (qpim_mroute_socket_fd, SIOCGETSGCNT, &sgreq))
{ {
char group_str[100]; char group_str[100];
@ -771,7 +776,6 @@ pim_mroute_update_counters (struct channel_oil *c_oil)
return; return;
} }
pim_zlookup_sg_statistics (c_oil);
c_oil->cc.pktcnt = sgreq.pktcnt; c_oil->cc.pktcnt = sgreq.pktcnt;
c_oil->cc.bytecnt = sgreq.bytecnt; c_oil->cc.bytecnt = sgreq.bytecnt;
c_oil->cc.wrong_if = sgreq.wrong_if; c_oil->cc.wrong_if = sgreq.wrong_if;

View File

@ -1058,8 +1058,7 @@ pim_upstream_inherited_olist (struct pim_upstream *up)
} }
} }
if (output_intf) pim_upstream_switch (up, PIM_UPSTREAM_JOINED);
pim_upstream_switch (up, PIM_UPSTREAM_JOINED);
return output_intf; return output_intf;
} }