]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Merge remote-tracking branch 'frr/pull/10706' into pim6-testing
authorDavid Lamparter <equinox@opensourcerouting.org>
Sat, 30 Apr 2022 13:22:58 +0000 (15:22 +0200)
committerDavid Lamparter <equinox@opensourcerouting.org>
Sat, 30 Apr 2022 13:22:58 +0000 (15:22 +0200)
1  2 
pimd/pim_nb_config.c
pimd/pim_nht.c
pimd/pim_nht.h
pimd/pim_rpf.c

index 39c8ae96763b6a216440760faab20450faa15be8,265c0bb1894ceeef14910497338a16816359b373..2f72c956f39289c7c7437f3c20d21a57f7ef8a77
@@@ -143,9 -144,10 +144,10 @@@ static int pim_cmd_interface_add(struc
        if (!pim_ifp)
                pim_ifp = pim_if_new(ifp, false, true, false, false);
        else
 -              PIM_IF_DO_PIM(pim_ifp->options);
 +              pim_ifp->pim_enable = true;
  
        pim_if_addr_add_all(ifp);
+       pim_upstream_nh_if_update(pim_ifp->pim, ifp);
        pim_if_membership_refresh(ifp);
  
        pim_if_create_pimreg(pim_ifp->pim);
@@@ -169,8 -171,9 +171,9 @@@ static int pim_cmd_interface_delete(str
         */
        pim_sock_delete(ifp, "pim unconfigured on interface");
  
 -      if (!PIM_IF_TEST_IGMP(pim_ifp->options)) {
 +      if (!pim_ifp->igmp_enable) {
                pim_if_addr_del_all(ifp);
+               pim_upstream_nh_if_update(pim_ifp->pim, ifp);
                pim_if_delete(ifp);
        }
  
diff --cc pimd/pim_nht.c
Simple merge
diff --cc pimd/pim_nht.h
index 24c67a229ccbaa3931a40e5b84764b63750bd436,16ff44291faca449c04d287125c7426e8c4a69b1..549329c86ff9fe5bf515f0b7de4cb95ee4973993
@@@ -72,10 -77,11 +77,11 @@@ int pim_ecmp_fib_lookup_if_vif_index(st
  void pim_rp_nexthop_del(struct rp_info *rp_info);
  
  /* for RPF check on BSM message receipt */
 -void pim_nht_bsr_add(struct pim_instance *pim, struct in_addr bsr_addr);
 -void pim_nht_bsr_del(struct pim_instance *pim, struct in_addr bsr_addr);
 +void pim_nht_bsr_add(struct pim_instance *pim, pim_addr bsr_addr);
 +void pim_nht_bsr_del(struct pim_instance *pim, pim_addr bsr_addr);
  /* RPF(bsr_addr) == src_ip%src_ifp? */
 -bool pim_nht_bsr_rpf_check(struct pim_instance *pim, struct in_addr bsr_addr,
 +bool pim_nht_bsr_rpf_check(struct pim_instance *pim, pim_addr bsr_addr,
                           struct interface *src_ifp, pim_addr src_ip);
  
+ void pim_upstream_nh_if_update(struct pim_instance *pim, struct interface *ifp);
  #endif
diff --cc pimd/pim_rpf.c
index 4e812ae3f08085ffa421e19d44b19a461ead19f4,eebe38bb884da13d4989bdcbe78cd12bd8a59e6b..8357536393379f3f750803990f532536efd30c5f
@@@ -122,10 -122,20 +122,17 @@@ bool pim_nexthop_lookup(struct pim_inst
                                        __func__, ifp->name, first_ifindex,
                                        &addr);
                        i++;
 -
 -              } else if (!PIM_IF_TEST_PIM(((struct pim_interface *)ifp->info)
 -                                                  ->options)) {
++              } else if (!((struct pim_interface *)ifp->info)->pim_enable) {
+                       if (PIM_DEBUG_ZEBRA)
+                               zlog_debug(
 -                                      "%s: pim not enabled on input interface %s (ifindex=%d, RPF for source %pI4)",
++                                      "%s: pim not enabled on input interface %s (ifindex=%d, RPF for source %pPA)",
+                                       __func__, ifp->name, first_ifindex,
+                                       &addr);
+                       i++;
 -
 -              } else if (neighbor_needed &&
 -                         !pim_if_connected_to_source(ifp, addr)) {
 -                      nbr = pim_neighbor_find_prefix(
 -                              ifp, &nexthop_tab[i].nexthop_addr);
 +              } else if (neighbor_needed
 +                         && !pim_if_connected_to_source(ifp, addr)) {
 +                      nbr = pim_neighbor_find(ifp,
 +                                              nexthop_tab[i].nexthop_addr);
                        if (PIM_DEBUG_PIM_TRACE_DETAIL)
                                zlog_debug("ifp name: %s, pim nbr: %p",
                                           ifp->name, nbr);