switch (up->join_state)
{
case PIM_UPSTREAM_PRUNE:
+ if (!up->fhr)
+ {
+ up->join_state = new_state;
+ up->state_transition = pim_time_monotonic_sec ();
+ }
+ break;
case PIM_UPSTREAM_JOIN_PENDING:
break;
case PIM_UPSTREAM_NOTJOINED:
for (ALL_LIST_ELEMENTS(qpim_upstream_list, up_node, up_nextnode, up)) {
struct in_addr old_rpf_addr;
+ struct interface *old_interface;
enum pim_rpf_result rpf_result;
+ old_interface = up->rpf.source_nexthop.interface;
rpf_result = pim_rpf_update(up, &old_rpf_addr);
if (rpf_result == PIM_RPF_FAILURE)
continue;
/* send Prune(S,G) to the old upstream neighbor */
- pim_joinprune_send(up->rpf.source_nexthop.interface,
- old_rpf_addr,
- &up->sg,
- 0 /* prune */);
+ pim_joinprune_send(old_interface, old_rpf_addr,
+ &up->sg, 0 /* prune */);
/* send Join(S,G) to the current upstream neighbor */
pim_joinprune_send(up->rpf.source_nexthop.interface,