]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: allow MSDP group name 'default'
authorRafael Zalamena <rzalamena@opensourcerouting.org>
Thu, 6 May 2021 14:41:08 +0000 (11:41 -0300)
committerRafael Zalamena <rzalamena@opensourcerouting.org>
Fri, 25 Jun 2021 18:06:20 +0000 (15:06 -0300)
Don't assign a default group name for non meshed group peers, instead
use a flag.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
pimd/pim_cmd.c
pimd/pim_msdp.c
pimd/pim_msdp.h
pimd/pim_msdp_packet.c
pimd/pim_nb_config.c

index 41d70bd27402425b528c01dd1515aacce9de6c3a..544cc6630df35c7b9caa1293c5f6b989fae5c755 100644 (file)
@@ -10149,8 +10149,10 @@ static void ip_msdp_show_peers_detail(struct pim_instance *pim, struct vty *vty,
                        json_row = json_object_new_object();
                        json_object_string_add(json_row, "peer", peer_str);
                        json_object_string_add(json_row, "local", local_str);
-                       json_object_string_add(json_row, "meshGroupName",
-                                              mp->mesh_group_name);
+                       if (mp->flags & PIM_MSDP_PEERF_IN_GROUP)
+                               json_object_string_add(json_row,
+                                                      "meshGroupName",
+                                                      mp->mesh_group_name);
                        json_object_string_add(json_row, "state", state_str);
                        json_object_string_add(json_row, "upTime", timebuf);
                        json_object_string_add(json_row, "keepAliveTimer",
@@ -10174,8 +10176,9 @@ static void ip_msdp_show_peers_detail(struct pim_instance *pim, struct vty *vty,
                } else {
                        vty_out(vty, "Peer : %s\n", peer_str);
                        vty_out(vty, "  Local               : %s\n", local_str);
-                       vty_out(vty, "  Mesh Group          : %s\n",
-                               mp->mesh_group_name);
+                       if (mp->flags & PIM_MSDP_PEERF_IN_GROUP)
+                               vty_out(vty, "  Mesh Group          : %s\n",
+                                       mp->mesh_group_name);
                        vty_out(vty, "  State               : %s\n", state_str);
                        vty_out(vty, "  Uptime              : %s\n", timebuf);
 
index 4ceee295992f72d3c3e1ce0639cafb345cc0b90a..e50f86dfe805cc6324d31bcba8fa7532c7908ab6 100644 (file)
@@ -761,25 +761,6 @@ char *pim_msdp_state_dump(enum pim_msdp_peer_state state, char *buf,
        return buf;
 }
 
-char *pim_msdp_peer_key_dump(struct pim_msdp_peer *mp, char *buf, int buf_size,
-                            bool long_format)
-{
-       char peer_str[INET_ADDRSTRLEN];
-       char local_str[INET_ADDRSTRLEN];
-
-       pim_inet4_dump("<peer?>", mp->peer, peer_str, sizeof(peer_str));
-       if (long_format) {
-               pim_inet4_dump("<local?>", mp->local, local_str,
-                              sizeof(local_str));
-               snprintf(buf, buf_size, "MSDP peer %s local %s mg %s", peer_str,
-                        local_str, mp->mesh_group_name);
-       } else {
-               snprintf(buf, buf_size, "MSDP peer %s", peer_str);
-       }
-
-       return buf;
-}
-
 static void pim_msdp_peer_state_chg_log(struct pim_msdp_peer *mp)
 {
        char state_str[PIM_MSDP_STATE_STRLEN];
@@ -1082,7 +1063,10 @@ struct pim_msdp_peer *pim_msdp_peer_new(struct pim_instance *pim,
        /* XXX: originator_id setting needs to move to the mesh group */
        pim->msdp.originator_id = *local;
        pim_msdp_addr2su(&mp->su_local, mp->local);
-       mp->mesh_group_name = XSTRDUP(MTYPE_PIM_MSDP_MG_NAME, mesh_group_name);
+       if (mesh_group_name)
+               mp->mesh_group_name =
+                       XSTRDUP(MTYPE_PIM_MSDP_MG_NAME, mesh_group_name);
+
        mp->state = PIM_MSDP_INACTIVE;
        mp->fd = -1;
        strlcpy(mp->last_reset, "-", sizeof(mp->last_reset));
@@ -1355,8 +1339,8 @@ bool pim_msdp_peer_config_write(struct vty *vty, struct pim_instance *pim,
        bool written = false;
 
        for (ALL_LIST_ELEMENTS_RO(pim->msdp.peer_list, node, mp)) {
-               /* Non meshed peers have the group name set to 'default'. */
-               if (strcmp(mp->mesh_group_name, MSDP_SOLO_PEER_GROUP_NAME))
+               /* Skip meshed group peers. */
+               if (mp->flags & PIM_MSDP_PEERF_IN_GROUP)
                        continue;
 
                vty_out(vty, "%sip msdp peer %pI4 source %pI4\n", spaces,
index b9b6e0cc36ae4b304117c05c8b4af33b8be97bfb..1a133fd26050bce9d2e7639c2273cdac3242d249 100644 (file)
@@ -97,7 +97,9 @@ enum pim_msdp_peer_flags {
        PIM_MSDP_PEERF_NONE = 0,
        PIM_MSDP_PEERF_LISTENER = (1 << 0),
 #define PIM_MSDP_PEER_IS_LISTENER(mp) (mp->flags & PIM_MSDP_PEERF_LISTENER)
-       PIM_MSDP_PEERF_SA_JUST_SENT = (1 << 1)
+       PIM_MSDP_PEERF_SA_JUST_SENT = (1 << 1),
+       /** Flag to signalize that peer belongs to a group. */
+       PIM_MSDP_PEERF_IN_GROUP = (1 << 2),
 };
 
 struct pim_msdp_peer {
@@ -231,8 +233,6 @@ void pim_msdp_peer_pkt_rxed(struct pim_msdp_peer *mp);
 void pim_msdp_peer_stop_tcp_conn(struct pim_msdp_peer *mp, bool chg_state);
 void pim_msdp_peer_reset_tcp_conn(struct pim_msdp_peer *mp, const char *rc_str);
 int pim_msdp_write(struct thread *thread);
-char *pim_msdp_peer_key_dump(struct pim_msdp_peer *mp, char *buf, int buf_size,
-                            bool long_format);
 int pim_msdp_config_write(struct pim_instance *pim, struct vty *vty,
                          const char *spaces);
 bool pim_msdp_peer_config_write(struct vty *vty, struct pim_instance *pim,
@@ -282,16 +282,13 @@ struct pim_msdp_mg_mbr *pim_msdp_mg_mbr_add(struct pim_instance *pim,
  */
 void pim_msdp_mg_mbr_del(struct pim_msdp_mg *mg, struct pim_msdp_mg_mbr *mbr);
 
-#define MSDP_SOLO_PEER_GROUP_NAME "default"
-
 /**
  * Allocates MSDP peer data structure and starts state machine.
  *
  * \param pim PIM instance
  * \param peer_addr peer address
  * \param local_addr local listening address
- * \param mesh_group_name mesh group name (or `MSDP_SOLO_PEER_GROUP_NAME` for
- *                        peers without group).
+ * \param mesh_group_name mesh group name (or `NULL` for peers without group).
  */
 struct pim_msdp_peer *pim_msdp_peer_new(struct pim_instance *pim,
                                        const struct in_addr *peer_addr,
index 48f1c864afe8c5ac0613580fcceb05bcf5e50745..6d497088274a5a2f0d0fd4e692ea9eb3049a628e 100644 (file)
@@ -522,12 +522,15 @@ static void pim_msdp_pkt_sa_rx_one(struct pim_msdp_peer *mp, struct in_addr rp)
         * If the message group is not set, i.e. "default", then we assume that
         * the message must be forwarded.*/
        for (ALL_LIST_ELEMENTS_RO(mp->pim->msdp.peer_list, peer_node, peer)) {
-               if (!pim_msdp_peer_rpf_check(peer, rp)
-                   && (strcmp(mp->mesh_group_name, peer->mesh_group_name)
-                       || !strcmp(mp->mesh_group_name,
-                                  MSDP_SOLO_PEER_GROUP_NAME))) {
-                       pim_msdp_pkt_sa_tx_one_to_one_peer(peer, rp, sg);
-               }
+               /* Not a RPF peer, so skip it. */
+               if (pim_msdp_peer_rpf_check(peer, rp))
+                       continue;
+               /* Don't forward inside the meshed group. */
+               if ((mp->flags & PIM_MSDP_PEERF_IN_GROUP)
+                   && strcmp(mp->mesh_group_name, peer->mesh_group_name) == 0)
+                       continue;
+
+               pim_msdp_pkt_sa_tx_one_to_one_peer(peer, rp, sg);
        }
 }
 
index d91aa61e787cc79e961b3262d6196d42f21d96f1..3afa6e7e169a4f3b2c903adc6d16c383a0a1822d 100644 (file)
@@ -1121,8 +1121,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_ms
                yang_dnode_get_ip(&peer_ip, args->dnode, "./peer-ip");
                yang_dnode_get_ip(&source_ip, args->dnode, "./source-ip");
                mp = pim_msdp_peer_new(pim, &peer_ip.ipaddr_v4,
-                                      &source_ip.ipaddr_v4,
-                                      MSDP_SOLO_PEER_GROUP_NAME);
+                                      &source_ip.ipaddr_v4, NULL);
                nb_running_set_entry(args->dnode, mp);
                break;
        }