diff options
Diffstat (limited to 'pimd/pim_upstream.c')
| -rw-r--r-- | pimd/pim_upstream.c | 76 |
1 files changed, 35 insertions, 41 deletions
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index a410a1c2ce..24833f5a63 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -302,7 +302,7 @@ void pim_upstream_send_join(struct pim_upstream *up) pim_jp_agg_single_upstream_send(&up->rpf, up, 1 /* join */); } -static int on_join_timer(struct thread *t) +static void on_join_timer(struct thread *t) { struct pim_upstream *up; @@ -312,14 +312,14 @@ static int on_join_timer(struct thread *t) if (PIM_DEBUG_PIM_TRACE) zlog_debug("%s: up %s RPF is not present", __func__, up->sg_str); - return 0; + return; } /* * In the case of a HFR we will not ahve anyone to send this to. */ if (PIM_UPSTREAM_FLAG_TEST_FHR(up->flags)) - return 0; + return; /* * Don't send the join if the outgoing interface is a loopback @@ -330,8 +330,6 @@ static int on_join_timer(struct thread *t) pim_upstream_send_join(up); join_timer_start(up); - - return 0; } static void join_timer_stop(struct pim_upstream *up) @@ -424,8 +422,8 @@ void pim_update_suppress_timers(uint32_t suppress_time) } } -void pim_upstream_join_suppress(struct pim_upstream *up, - struct in_addr rpf_addr, int holdtime) +void pim_upstream_join_suppress(struct pim_upstream *up, struct prefix rpf, + int holdtime) { long t_joinsuppress_msec; long join_timer_remain_msec = 0; @@ -457,7 +455,8 @@ void pim_upstream_join_suppress(struct pim_upstream *up, if (PIM_DEBUG_PIM_TRACE) { char rpf_str[INET_ADDRSTRLEN]; - pim_inet4_dump("<rpf?>", rpf_addr, rpf_str, sizeof(rpf_str)); + + pim_addr_dump("<rpf?>", &rpf, rpf_str, sizeof(rpf_str)); zlog_debug( "%s %s: detected Join%s to RPF'(S,G)=%s: join_timer=%ld msec t_joinsuppress=%ld msec", __FILE__, __func__, up->sg_str, rpf_str, @@ -514,8 +513,10 @@ void pim_upstream_join_timer_decrease_to_t_override(const char *debug_label, if (PIM_DEBUG_PIM_TRACE) { char rpf_str[INET_ADDRSTRLEN]; - pim_inet4_dump("<rpf?>", up->rpf.rpf_addr.u.prefix4, rpf_str, - sizeof(rpf_str)); + + pim_addr_dump("<rpf?>", &up->rpf.rpf_addr, rpf_str, + sizeof(rpf_str)); + zlog_debug( "%s: to RPF'%s=%s: join_timer=%ld msec t_override=%d msec", debug_label, up->sg_str, rpf_str, @@ -831,9 +832,8 @@ void pim_upstream_fill_static_iif(struct pim_upstream *up, up->rpf.source_nexthop.interface = incoming; /* reset other parameters to matched a connected incoming interface */ - up->rpf.source_nexthop.mrib_nexthop_addr.family = AF_INET; - up->rpf.source_nexthop.mrib_nexthop_addr.u.prefix4.s_addr = - PIM_NET_INADDR_ANY; + pim_addr_to_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr, + PIMADDR_ANY); up->rpf.source_nexthop.mrib_metric_preference = ZEBRA_CONNECT_DISTANCE_DEFAULT; up->rpf.source_nexthop.mrib_route_metric = 0; @@ -893,16 +893,13 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim, up->sptbit = PIM_UPSTREAM_SPTBIT_FALSE; up->rpf.source_nexthop.interface = NULL; - up->rpf.source_nexthop.mrib_nexthop_addr.family = AF_INET; - up->rpf.source_nexthop.mrib_nexthop_addr.u.prefix4.s_addr = - PIM_NET_INADDR_ANY; + pim_addr_to_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr, + PIMADDR_ANY); up->rpf.source_nexthop.mrib_metric_preference = router->infinite_assert_metric.metric_preference; up->rpf.source_nexthop.mrib_route_metric = router->infinite_assert_metric.route_metric; - up->rpf.rpf_addr.family = AF_INET; - up->rpf.rpf_addr.u.prefix4.s_addr = PIM_NET_INADDR_ANY; - + pim_addr_to_prefix(&up->rpf.rpf_addr, PIMADDR_ANY); up->ifchannels = list_new(); up->ifchannels->cmp = (int (*)(void *, void *))pim_ifchannel_compare; @@ -962,7 +959,7 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim, if (PIM_DEBUG_PIM_TRACE) { zlog_debug( - "%s: Created Upstream %s upstream_addr %pI4 ref count %d increment", + "%s: Created Upstream %s upstream_addr %pPAs ref count %d increment", __func__, up->sg_str, &up->upstream_addr, up->ref_count); } @@ -1263,7 +1260,7 @@ void pim_upstream_update_join_desired(struct pim_instance *pim, it so that it expires after t_override seconds. */ void pim_upstream_rpf_genid_changed(struct pim_instance *pim, - struct in_addr neigh_addr) + pim_addr neigh_addr) { struct pim_upstream *up; @@ -1271,24 +1268,24 @@ void pim_upstream_rpf_genid_changed(struct pim_instance *pim, * Scan all (S,G) upstreams searching for RPF'(S,G)=neigh_addr */ frr_each (rb_pim_upstream, &pim->upstream_head, up) { - if (PIM_DEBUG_PIM_TRACE) { - char rpf_addr_str[PREFIX_STRLEN]; - pim_addr_dump("<rpf?>", &up->rpf.rpf_addr, rpf_addr_str, - sizeof(rpf_addr_str)); + pim_addr rpf_addr; + + rpf_addr = pim_addr_from_prefix(&up->rpf.rpf_addr); + + if (PIM_DEBUG_PIM_TRACE) zlog_debug( - "%s: matching neigh=%pI4 against upstream (S,G)=%s[%s] joined=%d rpf_addr=%s", + "%s: matching neigh=%pPA against upstream (S,G)=%s[%s] joined=%d rpf_addr=%pPA", __func__, &neigh_addr, up->sg_str, pim->vrf->name, up->join_state == PIM_UPSTREAM_JOINED, - rpf_addr_str); - } + &rpf_addr); /* consider only (S,G) upstream in Joined state */ if (up->join_state != PIM_UPSTREAM_JOINED) continue; /* match RPF'(S,G)=neigh_addr */ - if (up->rpf.rpf_addr.u.prefix4.s_addr != neigh_addr.s_addr) + if (pim_addr_cmp(rpf_addr, neigh_addr)) continue; pim_upstream_join_timer_decrease_to_t_override( @@ -1482,7 +1479,7 @@ struct pim_upstream *pim_upstream_keep_alive_timer_proc( return up; } -static int pim_upstream_keep_alive_timer(struct thread *t) +static void pim_upstream_keep_alive_timer(struct thread *t) { struct pim_upstream *up; @@ -1491,10 +1488,9 @@ static int pim_upstream_keep_alive_timer(struct thread *t) /* pull the stats and re-check */ if (pim_upstream_sg_running_proc(up)) /* kat was restarted because of new activity */ - return 0; + return; pim_upstream_keep_alive_timer_proc(up); - return 0; } void pim_upstream_keep_alive_timer_start(struct pim_upstream *up, uint32_t time) @@ -1516,15 +1512,15 @@ void pim_upstream_keep_alive_timer_start(struct pim_upstream *up, uint32_t time) } /* MSDP on RP needs to know if a source is registerable to this RP */ -static int pim_upstream_msdp_reg_timer(struct thread *t) +static void pim_upstream_msdp_reg_timer(struct thread *t) { struct pim_upstream *up = THREAD_ARG(t); struct pim_instance *pim = up->channel_oil->pim; /* source is no longer active - pull the SA from MSDP's cache */ pim_msdp_sa_local_del(pim, &up->sg); - return 1; } + void pim_upstream_msdp_reg_timer_start(struct pim_upstream *up) { THREAD_OFF(up->t_msdp_reg_timer); @@ -1702,7 +1698,7 @@ const char *pim_reg_state2str(enum pim_reg_state reg_state, char *state_str, return state_str; } -static int pim_upstream_register_stop_timer(struct thread *t) +static void pim_upstream_register_stop_timer(struct thread *t) { struct pim_interface *pim_ifp; struct pim_instance *pim; @@ -1735,7 +1731,7 @@ static int pim_upstream_register_stop_timer(struct thread *t) zlog_debug("%s: up %s RPF is not present", __func__, up->sg_str); up->reg_state = PIM_REG_NOINFO; - return 0; + return; } pim_ifp = up->rpf.source_nexthop.interface->info; @@ -1745,7 +1741,7 @@ static int pim_upstream_register_stop_timer(struct thread *t) "%s: Interface: %s is not configured for pim", __func__, up->rpf.source_nexthop.interface->name); - return 0; + return; } up->reg_state = PIM_REG_JOIN_PENDING; pim_upstream_start_register_stop_timer(up, 1); @@ -1757,15 +1753,13 @@ static int pim_upstream_register_stop_timer(struct thread *t) zlog_debug( "%s: Stop sending the register, because I am the RP and we haven't seen a packet in a while", __func__); - return 0; + return; } pim_null_register_send(up); break; case PIM_REG_NOINFO: break; } - - return 0; } void pim_upstream_start_register_stop_timer(struct pim_upstream *up, @@ -1997,7 +1991,7 @@ static bool pim_upstream_kat_start_ok(struct pim_upstream *up) return false; pim_ifp = ifp->info; - if (pim_ifp->mroute_vif_index != c_oil->oil.mfcc_parent) + if (pim_ifp->mroute_vif_index != *oil_parent(c_oil)) return false; if (pim_if_connected_to_source(up->rpf.source_nexthop.interface, |
