]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_upstream.c
pim6d: Changing igmp_enable to gm_enable.
[mirror_frr.git] / pimd / pim_upstream.c
index 24833f5a632353754023f3221b6ae289a8436afb..54a7f59ca44074d6b75fa7d15bafb8481a846c9f 100644 (file)
@@ -178,6 +178,14 @@ static void upstream_channel_oil_detach(struct pim_upstream *up)
 
 }
 
+static void pim_upstream_timers_stop(struct pim_upstream *up)
+{
+       THREAD_OFF(up->t_ka_timer);
+       THREAD_OFF(up->t_rs_timer);
+       THREAD_OFF(up->t_msdp_reg_timer);
+       THREAD_OFF(up->t_join_timer);
+}
+
 struct pim_upstream *pim_upstream_del(struct pim_instance *pim,
                                      struct pim_upstream *up, const char *name)
 {
@@ -207,9 +215,7 @@ struct pim_upstream *pim_upstream_del(struct pim_instance *pim,
        if (pim_up_mlag_is_local(up))
                pim_mlag_up_local_del(pim, up);
 
-       THREAD_OFF(up->t_ka_timer);
-       THREAD_OFF(up->t_rs_timer);
-       THREAD_OFF(up->t_msdp_reg_timer);
+       pim_upstream_timers_stop(up);
 
        if (up->join_state == PIM_UPSTREAM_JOINED) {
                pim_jp_agg_single_upstream_send(&up->rpf, up, 0);
@@ -641,7 +647,7 @@ void pim_upstream_register_reevaluate(struct pim_instance *pim)
  * 2. and along the RPT if SPTbit is not set
  * If forwarding is hw accelerated i.e. control and dataplane components
  * are separate you may not be able to reliably set SPT bit on intermediate
- * routers while still fowarding on the (S,G,rpt).
+ * routers while still forwarding on the (S,G,rpt).
  *
  * This macro is a slight deviation on the RFC and uses "traffic-agnostic"
  * criteria to decide between using the RPT vs. SPT for forwarding.
@@ -832,8 +838,7 @@ 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 */
-       pim_addr_to_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr,
-                          PIMADDR_ANY);
+       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,8 +898,7 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim,
        up->sptbit = PIM_UPSTREAM_SPTBIT_FALSE;
 
        up->rpf.source_nexthop.interface = NULL;
-       pim_addr_to_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr,
-                          PIMADDR_ANY);
+       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 =
@@ -1832,7 +1836,7 @@ int pim_upstream_inherited_olist_decide(struct pim_instance *pim,
                                flag = PIM_OIF_FLAG_PROTO_STAR;
                        else {
                                if (PIM_IF_FLAG_TEST_PROTO_IGMP(ch->flags))
-                                       flag = PIM_OIF_FLAG_PROTO_IGMP;
+                                       flag = PIM_OIF_FLAG_PROTO_GM;
                                if (PIM_IF_FLAG_TEST_PROTO_PIM(ch->flags))
                                        flag |= PIM_OIF_FLAG_PROTO_PIM;
                                if (starch)
@@ -1944,7 +1948,8 @@ void pim_upstream_terminate(struct pim_instance *pim)
        struct pim_upstream *up;
 
        while ((up = rb_pim_upstream_first(&pim->upstream_head))) {
-               pim_upstream_del(pim, up, __func__);
+               if (pim_upstream_del(pim, up, __func__))
+                       pim_upstream_timers_stop(up);
        }
 
        rb_pim_upstream_fini(&pim->upstream_head);
@@ -2055,6 +2060,7 @@ static bool pim_upstream_sg_running_proc(struct pim_upstream *up)
        if ((up->sptbit != PIM_UPSTREAM_SPTBIT_TRUE) &&
            (up->rpf.source_nexthop.interface)) {
                pim_upstream_set_sptbit(up, up->rpf.source_nexthop.interface);
+               pim_upstream_update_could_assert(up);
        }
 
        return rv;
@@ -2109,7 +2115,7 @@ void pim_upstream_add_lhr_star_pimreg(struct pim_instance *pim)
                        continue;
 
                pim_channel_add_oif(up->channel_oil, pim->regiface,
-                                   PIM_OIF_FLAG_PROTO_IGMP, __func__);
+                                   PIM_OIF_FLAG_PROTO_GM, __func__);
        }
 }
 
@@ -2154,18 +2160,17 @@ void pim_upstream_remove_lhr_star_pimreg(struct pim_instance *pim,
 
                if (!nlist) {
                        pim_channel_del_oif(up->channel_oil, pim->regiface,
-                                       PIM_OIF_FLAG_PROTO_IGMP, __func__);
+                                           PIM_OIF_FLAG_PROTO_GM, __func__);
                        continue;
                }
                pim_addr_to_prefix(&g, up->sg.grp);
                apply_new = prefix_list_apply(np, &g);
                if (apply_new == PREFIX_DENY)
                        pim_channel_add_oif(up->channel_oil, pim->regiface,
-                                           PIM_OIF_FLAG_PROTO_IGMP,
-                                               __func__);
+                                           PIM_OIF_FLAG_PROTO_GM, __func__);
                else
                        pim_channel_del_oif(up->channel_oil, pim->regiface,
-                                       PIM_OIF_FLAG_PROTO_IGMP, __func__);
+                                           PIM_OIF_FLAG_PROTO_GM, __func__);
        }
 }