]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_zebra.c
Merge pull request #5767 from ton31337/fix/replace_s_addr_0_to_INADDR_ANY
[mirror_frr.git] / pimd / pim_zebra.c
index b6847a273a14d8c752fdfe7081451777c0119053..06507b1f4c60c0144187d609b3c03358ab6d4d73 100644 (file)
 #include "pim_nht.h"
 #include "pim_ssm.h"
 #include "pim_vxlan.h"
+#include "pim_mlag.h"
 
 #undef PIM_DEBUG_IFADDR_DUMP
 #define PIM_DEBUG_IFADDR_DUMP
 
-static struct zclient *zclient = NULL;
+struct zclient *zclient;
 
 
 /* Router-id update message from zebra. */
@@ -271,7 +272,7 @@ void pim_zebra_upstream_rpf_changed(struct pim_instance *pim,
                nbr = pim_neighbor_find(old->source_nexthop.interface,
                                        old->rpf_addr.u.prefix4);
                if (nbr)
-                       pim_jp_agg_remove_group(nbr->upstream_jp_agg, up);
+                       pim_jp_agg_remove_group(nbr->upstream_jp_agg, up, nbr);
 
                /*
                 * We have detected a case where we might need
@@ -324,6 +325,9 @@ void pim_zebra_upstream_rpf_changed(struct pim_instance *pim,
                        up->channel_oil->oil_inherited_rescan = 0;
                }
 
+               if (up->join_state == PIM_UPSTREAM_JOINED)
+                       pim_jp_agg_switch_interface(old, &up->rpf, up);
+
                if (!up->channel_oil->installed)
                        pim_upstream_mroute_add(up->channel_oil,
                                        __PRETTY_FUNCTION__);
@@ -388,16 +392,13 @@ static void pim_zebra_vxlan_replay(void)
 
 void pim_scan_oil(struct pim_instance *pim)
 {
-       struct listnode *node;
-       struct listnode *nextnode;
        struct channel_oil *c_oil;
 
        pim->scan_oil_last = pim_time_monotonic_sec();
        ++pim->scan_oil_events;
 
-       for (ALL_LIST_ELEMENTS(pim->channel_oil_list, node, nextnode, c_oil)) {
+       frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil)
                pim_upstream_mroute_iif_update(c_oil, __func__);
-       }
 }
 
 static int on_rpf_cache_refresh(struct thread *t)
@@ -468,6 +469,9 @@ void pim_zebra_init(void)
        zclient->nexthop_update = pim_parse_nexthop_update;
        zclient->vxlan_sg_add = pim_zebra_vxlan_sg_proc;
        zclient->vxlan_sg_del = pim_zebra_vxlan_sg_proc;
+       zclient->mlag_process_up = pim_zebra_mlag_process_up;
+       zclient->mlag_process_down = pim_zebra_mlag_process_down;
+       zclient->mlag_handle_msg = pim_zebra_mlag_handle_msg;
 
        zclient_init(zclient, ZEBRA_ROUTE_PIM, 0, &pimd_privs);
        if (PIM_DEBUG_PIM_TRACE) {