uint16_t pim_if_effective_override_interval_msec(struct interface *ifp) { if (pim_if_lan_delay_enabled(ifp)) { struct pim_interface *pim_ifp; pim_ifp = ifp->info; return pim_ifp->pim_neighbors_highest_override_interval_msec; } else { return PIM_DEFAULT_OVERRIDE_INTERVAL_MSEC; } }
uint16_t pim_if_effective_propagation_delay_msec(struct interface *ifp) { if (pim_if_lan_delay_enabled(ifp)) { struct pim_interface *pim_ifp; pim_ifp = ifp->info; return pim_ifp->pim_neighbors_highest_propagation_delay_msec; } else { return PIM_DEFAULT_PROPAGATION_DELAY_MSEC; } }
void pim_neighbor_delete(struct interface *ifp, struct pim_neighbor *neigh, const char *delete_message) { struct pim_interface *pim_ifp; char src_str[100]; pim_ifp = ifp->info; zassert(pim_ifp); pim_inet4_dump("<src?>", neigh->source_addr, src_str, sizeof(src_str)); zlog_info("PIM NEIGHBOR DOWN: neighbor %s on interface %s: %s", src_str, ifp->name, delete_message); neighbor_timer_off(neigh); pim_if_assert_on_neighbor_down(ifp, neigh->source_addr); if (!PIM_OPTION_IS_SET(neigh->hello_options, PIM_OPTION_MASK_LAN_PRUNE_DELAY)) { /* update num. of neighbors without hello option lan_delay */ --pim_ifp->pim_number_of_nonlandelay_neighbors; } if (!PIM_OPTION_IS_SET(neigh->hello_options, PIM_OPTION_MASK_DR_PRIORITY)) { /* update num. of neighbors without dr_pri */ --pim_ifp->pim_dr_num_nondrpri_neighbors; } zassert(neigh->propagation_delay_msec <= pim_ifp->pim_neighbors_highest_propagation_delay_msec); zassert(neigh->override_interval_msec <= pim_ifp->pim_neighbors_highest_override_interval_msec); if (pim_if_lan_delay_enabled(ifp)) { /* will delete a neighbor with highest propagation delay? */ if (neigh->propagation_delay_msec == pim_ifp->pim_neighbors_highest_propagation_delay_msec) { /* then find the next highest propagation delay */ pim_ifp->pim_neighbors_highest_propagation_delay_msec = find_neighbors_next_highest_propagation_delay_msec(ifp, neigh); } /* will delete a neighbor with highest override interval? */ if (neigh->override_interval_msec == pim_ifp->pim_neighbors_highest_override_interval_msec) { /* then find the next highest propagation delay */ pim_ifp->pim_neighbors_highest_override_interval_msec = find_neighbors_next_highest_override_interval_msec(ifp, neigh); } } if (PIM_DEBUG_PIM_TRACE) { zlog_debug("%s: deleting PIM neighbor %s on interface %s", __PRETTY_FUNCTION__, src_str, ifp->name); } listnode_delete(pim_ifp->pim_neighbor_list, neigh); pim_neighbor_free(neigh); }