]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_msdp.c
Merge pull request #5498 from mjstapp/sharp_with_labels
[mirror_frr.git] / pimd / pim_msdp.c
index a4f87fa1a65c36d68e8530af18939091d6d6cbd3..8a18594fd72969fa968a332edff8f685f406326e 100644 (file)
@@ -126,7 +126,12 @@ static void pim_msdp_sa_upstream_del(struct pim_msdp_sa *sa)
        if (PIM_UPSTREAM_FLAG_TEST_SRC_MSDP(up->flags)) {
                PIM_UPSTREAM_FLAG_UNSET_SRC_MSDP(up->flags);
                sa->flags |= PIM_MSDP_SAF_UP_DEL_IN_PROG;
-               pim_upstream_del(sa->pim, up, __PRETTY_FUNCTION__);
+               up = pim_upstream_del(sa->pim, up, __PRETTY_FUNCTION__);
+               /* re-eval joinDesired; clearing peer-msdp-sa flag can
+                * cause JD to change
+                */
+               if (up)
+                       pim_upstream_update_join_desired(sa->pim, up);
                sa->flags &= ~PIM_MSDP_SAF_UP_DEL_IN_PROG;
        }
 
@@ -445,10 +450,9 @@ static bool pim_msdp_sa_local_add_ok(struct pim_upstream *up)
                return false;
        }
 
-       if (!up->t_ka_timer) {
+       if (!pim_upstream_is_kat_running(up))
                /* stream is not active */
                return false;
-       }
 
        if (!I_am_RP(pim, up->sg.grp)) {
                /* we are not RP for the group */
@@ -680,9 +684,9 @@ void pim_msdp_up_del(struct pim_instance *pim, struct prefix_sg *sg)
 }
 
 /* sa hash and peer list helpers */
-static unsigned int pim_msdp_sa_hash_key_make(void *p)
+static unsigned int pim_msdp_sa_hash_key_make(const void *p)
 {
-       struct pim_msdp_sa *sa = p;
+       const struct pim_msdp_sa *sa = p;
 
        return (jhash_2words(sa->sg.src.s_addr, sa->sg.grp.s_addr, 0));
 }
@@ -1078,7 +1082,7 @@ static enum pim_msdp_err pim_msdp_peer_new(struct pim_instance *pim,
        mp->mesh_group_name = XSTRDUP(MTYPE_PIM_MSDP_MG_NAME, mesh_group_name);
        mp->state = PIM_MSDP_INACTIVE;
        mp->fd = -1;
-       strcpy(mp->last_reset, "-");
+       strlcpy(mp->last_reset, "-", sizeof(mp->last_reset));
        /* higher IP address is listener */
        if (ntohl(mp->local.s_addr) > ntohl(mp->peer.s_addr)) {
                mp->flags |= PIM_MSDP_PEERF_LISTENER;
@@ -1215,9 +1219,9 @@ enum pim_msdp_err pim_msdp_peer_del(struct pim_instance *pim,
 }
 
 /* peer hash and peer list helpers */
-static unsigned int pim_msdp_peer_hash_key_make(void *p)
+static unsigned int pim_msdp_peer_hash_key_make(const void *p)
 {
-       struct pim_msdp_peer *mp = p;
+       const struct pim_msdp_peer *mp = p;
        return (jhash_1word(mp->peer.s_addr, 0));
 }
 
@@ -1256,8 +1260,7 @@ static void pim_msdp_mg_free(struct pim_instance *pim)
        if (PIM_DEBUG_MSDP_EVENTS) {
                zlog_debug("MSDP mesh-group %s deleted", mg->mesh_group_name);
        }
-       if (mg->mesh_group_name)
-               XFREE(MTYPE_PIM_MSDP_MG_NAME, mg->mesh_group_name);
+       XFREE(MTYPE_PIM_MSDP_MG_NAME, mg->mesh_group_name);
 
        if (mg->mbr_list)
                list_delete(&mg->mbr_list);