]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_assert.c
Merge pull request #5494 from opensourcerouting/mlag-module
[mirror_frr.git] / pimd / pim_assert.c
index f68c252a3563120ab00461f20ee847b4fcb46f9f..53ab22754ca1103336300b75138a4c6f829dd25c 100644 (file)
@@ -47,6 +47,7 @@ void pim_ifassert_winner_set(struct pim_ifchannel *ch,
                             struct in_addr winner,
                             struct pim_assert_metric winner_metric)
 {
+       struct pim_interface *pim_ifp = ch->interface->info;
        int winner_changed = (ch->ifassert_winner.s_addr != winner.s_addr);
        int metric_changed = !pim_assert_metric_match(
                &ch->ifassert_winner_metric, &winner_metric);
@@ -81,7 +82,7 @@ void pim_ifassert_winner_set(struct pim_ifchannel *ch,
        ch->ifassert_creation = pim_time_monotonic_sec();
 
        if (winner_changed || metric_changed) {
-               pim_upstream_update_join_desired(ch->upstream);
+               pim_upstream_update_join_desired(pim_ifp->pim, ch->upstream);
                pim_ifchannel_update_could_assert(ch);
                pim_ifchannel_update_assert_tracking_desired(ch);
        }
@@ -146,13 +147,7 @@ static int dispatch_assert(struct interface *ifp, struct in_addr source_addr,
        memset(&sg, 0, sizeof(struct prefix_sg));
        sg.src = source_addr;
        sg.grp = group_addr;
-       ch = pim_ifchannel_add(ifp, &sg, 0);
-       if (!ch) {
-               zlog_warn(
-                       "%s: (S,G)=%s failure creating channel on interface %s",
-                       __PRETTY_FUNCTION__, pim_str_sg_dump(&sg), ifp->name);
-               return -1;
-       }
+       ch = pim_ifchannel_add(ifp, &sg, 0, 0);
 
        switch (ch->ifassert_state) {
        case PIM_IFASSERT_NOINFO:
@@ -264,11 +259,11 @@ int pim_assert_recv(struct interface *ifp, struct pim_neighbor *neigh,
        curr += offset;
        curr_size -= offset;
 
-       if (curr_size != 8) {
+       if (curr_size < 8) {
                char src_str[INET_ADDRSTRLEN];
                pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str));
                zlog_warn(
-                       "%s: preference/metric size is not 8: size=%d from %s on interface %s",
+                       "%s: preference/metric size is less than 8 bytes: size=%d from %s on interface %s",
                        __PRETTY_FUNCTION__, curr_size, src_str, ifp->name);
                return -3;
        }
@@ -417,7 +412,7 @@ int pim_assert_build_msg(uint8_t *pim_msg, int buf_size, struct interface *ifp,
          Add PIM header
        */
        pim_msg_size = pim_msg_curr - pim_msg;
-       pim_msg_build_header(pim_msg, pim_msg_size, PIM_MSG_TYPE_ASSERT);
+       pim_msg_build_header(pim_msg, pim_msg_size, PIM_MSG_TYPE_ASSERT, false);
 
        return pim_msg_size;
 }
@@ -568,7 +563,7 @@ static void pim_assert_timer_set(struct pim_ifchannel *ch, int interval)
                           ch->interface->name);
        }
 
-       thread_add_timer(master, on_assert_timer, ch, interval,
+       thread_add_timer(router->master, on_assert_timer, ch, interval,
                         &ch->t_ifassert_timer);
 }
 
@@ -733,7 +728,7 @@ void assert_action_a5(struct pim_ifchannel *ch)
          winner metric as AssertWinnerMetric(S,G,I).
          Set Assert Timer to Assert_Time.
          If (I is RPF_interface(S)) AND (UpstreamJPState(S,G) == true)
-         set SPTbit(S,G) to TRUE.
+         set SPTbit(S,G) to true.
 */
 static void assert_action_a6(struct pim_ifchannel *ch,
                             struct pim_assert_metric winner_metric)
@@ -742,7 +737,7 @@ static void assert_action_a6(struct pim_ifchannel *ch,
 
        /*
          If (I is RPF_interface(S)) AND (UpstreamJPState(S,G) == true) set
-         SPTbit(S,G) to TRUE.
+         SPTbit(S,G) to true.
        */
        if (ch->upstream->rpf.source_nexthop.interface == ch->interface)
                if (ch->upstream->join_state == PIM_UPSTREAM_JOINED)