mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 19:02:58 +00:00
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:
parent
4df01a4e66
commit
51e828334e
@ -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;
|
||||||
|
@ -1058,7 +1058,6 @@ 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;
|
||||||
|
Loading…
Reference in New Issue
Block a user