X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=pimd%2Fpim_mroute.c;h=3015c4a61bc2f8cca869b1cbc1e395c75e23ba2c;hb=37cfc612fc52a0572d333372dfc8ab9d0fa988de;hp=7fc4f12d27678804f89bd80d664d5b0cc5aa8159;hpb=eda1d29a06581860f4b78d5a49b27922d38d86e4;p=mirror_frr.git diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index 7fc4f12d2..3015c4a61 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -437,6 +437,28 @@ int pim_mroute_msg_wrvifwhole(int fd, struct interface *ifp, const char *buf) pim_ifp->primary_address, up->upstream_register); up->sptbit = PIM_UPSTREAM_SPTBIT_TRUE; + } else { + /* + * At this point pimd is connected to + * the source, it has a parent, we are not + * the RP and the SPTBIT should be set + * since we know *the* S,G is on the SPT. + * The first time this happens, let's cause + * an immediate join to go out so that + * the RP can trim this guy immediately + * if necessary, instead of waiting + * one join/prune send cycle + */ + if (up->sptbit != PIM_UPSTREAM_SPTBIT_TRUE && + up->parent && + up->rpf.source_nexthop.interface != + up->parent->rpf.source_nexthop + .interface) { + up->sptbit = PIM_UPSTREAM_SPTBIT_TRUE; + pim_jp_agg_single_upstream_send( + &up->parent->rpf, up->parent, + true); + } } pim_upstream_keep_alive_timer_start( up, pim_ifp->pim->keep_alive_time);