]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_msg.c
zebra: Allow ns delete to happen after under/over flow checks
[mirror_frr.git] / pimd / pim_msg.c
index 04f1f4846f89d667ea959fa3208831144600308e..63688f87e055d92fd918996ab1a53d12f3c58289 100644 (file)
@@ -36,6 +36,7 @@
 #include "pim_rpf.h"
 #include "pim_register.h"
 #include "pim_jp_agg.h"
+#include "pim_oil.h"
 
 void pim_msg_build_header(uint8_t *pim_msg, size_t pim_msg_size,
                          uint8_t pim_msg_type)
@@ -104,13 +105,16 @@ size_t pim_msg_get_jp_group_size(struct list *sources)
        struct pim_jp_sources *js;
        size_t size = 0;
 
+       if (!sources)
+               return 0;
+
        size += sizeof(struct pim_encoded_group_ipv4);
        size += 4; // Joined sources (2) + Pruned Sources (2)
 
        size += sizeof(struct pim_encoded_source_ipv4) * sources->count;
 
        js = listgetdata(listhead(sources));
-       if (js && js->up->sg.src.s_addr == INADDR_ANY) {
+       if (js && js->up->sg.src.s_addr == INADDR_ANY && js->is_join) {
                struct pim_upstream *child, *up;
                struct listnode *up_node;
 
@@ -195,7 +199,8 @@ size_t pim_msg_build_jp_groups(struct pim_jp_groups *grp,
                        grp->prunes++;
 
                if (source->up->sg.src.s_addr == INADDR_ANY) {
-                       struct pim_rpf *rpf = pim_rp_g(source->up->sg.grp);
+                       struct pim_instance *pim = source->up->channel_oil->pim;
+                       struct pim_rpf *rpf = pim_rp_g(pim, source->up->sg.grp);
                        bits = PIM_ENCODE_SPARSE_BIT | PIM_ENCODE_WC_BIT
                               | PIM_ENCODE_RPT_BIT;
                        stosend = rpf->rpf_addr.u.prefix4;