mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 21:47:15 +02:00
pimd: allow MSDP group name 'default'
Don't assign a default group name for non meshed group peers, instead use a flag. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
This commit is contained in:
parent
3bed07f60f
commit
0ce04a08a3
|
@ -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_row = json_object_new_object();
|
||||||
json_object_string_add(json_row, "peer", peer_str);
|
json_object_string_add(json_row, "peer", peer_str);
|
||||||
json_object_string_add(json_row, "local", local_str);
|
json_object_string_add(json_row, "local", local_str);
|
||||||
json_object_string_add(json_row, "meshGroupName",
|
if (mp->flags & PIM_MSDP_PEERF_IN_GROUP)
|
||||||
mp->mesh_group_name);
|
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, "state", state_str);
|
||||||
json_object_string_add(json_row, "upTime", timebuf);
|
json_object_string_add(json_row, "upTime", timebuf);
|
||||||
json_object_string_add(json_row, "keepAliveTimer",
|
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 {
|
} else {
|
||||||
vty_out(vty, "Peer : %s\n", peer_str);
|
vty_out(vty, "Peer : %s\n", peer_str);
|
||||||
vty_out(vty, " Local : %s\n", local_str);
|
vty_out(vty, " Local : %s\n", local_str);
|
||||||
vty_out(vty, " Mesh Group : %s\n",
|
if (mp->flags & PIM_MSDP_PEERF_IN_GROUP)
|
||||||
mp->mesh_group_name);
|
vty_out(vty, " Mesh Group : %s\n",
|
||||||
|
mp->mesh_group_name);
|
||||||
vty_out(vty, " State : %s\n", state_str);
|
vty_out(vty, " State : %s\n", state_str);
|
||||||
vty_out(vty, " Uptime : %s\n", timebuf);
|
vty_out(vty, " Uptime : %s\n", timebuf);
|
||||||
|
|
||||||
|
|
|
@ -761,25 +761,6 @@ char *pim_msdp_state_dump(enum pim_msdp_peer_state state, char *buf,
|
||||||
return 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)
|
static void pim_msdp_peer_state_chg_log(struct pim_msdp_peer *mp)
|
||||||
{
|
{
|
||||||
char state_str[PIM_MSDP_STATE_STRLEN];
|
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 */
|
/* XXX: originator_id setting needs to move to the mesh group */
|
||||||
pim->msdp.originator_id = *local;
|
pim->msdp.originator_id = *local;
|
||||||
pim_msdp_addr2su(&mp->su_local, mp->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->state = PIM_MSDP_INACTIVE;
|
||||||
mp->fd = -1;
|
mp->fd = -1;
|
||||||
strlcpy(mp->last_reset, "-", sizeof(mp->last_reset));
|
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;
|
bool written = false;
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS_RO(pim->msdp.peer_list, node, mp)) {
|
for (ALL_LIST_ELEMENTS_RO(pim->msdp.peer_list, node, mp)) {
|
||||||
/* Non meshed peers have the group name set to 'default'. */
|
/* Skip meshed group peers. */
|
||||||
if (strcmp(mp->mesh_group_name, MSDP_SOLO_PEER_GROUP_NAME))
|
if (mp->flags & PIM_MSDP_PEERF_IN_GROUP)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
vty_out(vty, "%sip msdp peer %pI4 source %pI4\n", spaces,
|
vty_out(vty, "%sip msdp peer %pI4 source %pI4\n", spaces,
|
||||||
|
|
|
@ -97,7 +97,9 @@ enum pim_msdp_peer_flags {
|
||||||
PIM_MSDP_PEERF_NONE = 0,
|
PIM_MSDP_PEERF_NONE = 0,
|
||||||
PIM_MSDP_PEERF_LISTENER = (1 << 0),
|
PIM_MSDP_PEERF_LISTENER = (1 << 0),
|
||||||
#define PIM_MSDP_PEER_IS_LISTENER(mp) (mp->flags & PIM_MSDP_PEERF_LISTENER)
|
#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 {
|
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_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);
|
void pim_msdp_peer_reset_tcp_conn(struct pim_msdp_peer *mp, const char *rc_str);
|
||||||
int pim_msdp_write(struct thread *thread);
|
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,
|
int pim_msdp_config_write(struct pim_instance *pim, struct vty *vty,
|
||||||
const char *spaces);
|
const char *spaces);
|
||||||
bool pim_msdp_peer_config_write(struct vty *vty, struct pim_instance *pim,
|
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);
|
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.
|
* Allocates MSDP peer data structure and starts state machine.
|
||||||
*
|
*
|
||||||
* \param pim PIM instance
|
* \param pim PIM instance
|
||||||
* \param peer_addr peer address
|
* \param peer_addr peer address
|
||||||
* \param local_addr local listening address
|
* \param local_addr local listening address
|
||||||
* \param mesh_group_name mesh group name (or `MSDP_SOLO_PEER_GROUP_NAME` for
|
* \param mesh_group_name mesh group name (or `NULL` for peers without group).
|
||||||
* peers without group).
|
|
||||||
*/
|
*/
|
||||||
struct pim_msdp_peer *pim_msdp_peer_new(struct pim_instance *pim,
|
struct pim_msdp_peer *pim_msdp_peer_new(struct pim_instance *pim,
|
||||||
const struct in_addr *peer_addr,
|
const struct in_addr *peer_addr,
|
||||||
|
|
|
@ -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
|
* If the message group is not set, i.e. "default", then we assume that
|
||||||
* the message must be forwarded.*/
|
* the message must be forwarded.*/
|
||||||
for (ALL_LIST_ELEMENTS_RO(mp->pim->msdp.peer_list, peer_node, peer)) {
|
for (ALL_LIST_ELEMENTS_RO(mp->pim->msdp.peer_list, peer_node, peer)) {
|
||||||
if (!pim_msdp_peer_rpf_check(peer, rp)
|
/* Not a RPF peer, so skip it. */
|
||||||
&& (strcmp(mp->mesh_group_name, peer->mesh_group_name)
|
if (pim_msdp_peer_rpf_check(peer, rp))
|
||||||
|| !strcmp(mp->mesh_group_name,
|
continue;
|
||||||
MSDP_SOLO_PEER_GROUP_NAME))) {
|
/* Don't forward inside the meshed group. */
|
||||||
pim_msdp_pkt_sa_tx_one_to_one_peer(peer, rp, sg);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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(&peer_ip, args->dnode, "./peer-ip");
|
||||||
yang_dnode_get_ip(&source_ip, args->dnode, "./source-ip");
|
yang_dnode_get_ip(&source_ip, args->dnode, "./source-ip");
|
||||||
mp = pim_msdp_peer_new(pim, &peer_ip.ipaddr_v4,
|
mp = pim_msdp_peer_new(pim, &peer_ip.ipaddr_v4,
|
||||||
&source_ip.ipaddr_v4,
|
&source_ip.ipaddr_v4, NULL);
|
||||||
MSDP_SOLO_PEER_GROUP_NAME);
|
|
||||||
nb_running_set_entry(args->dnode, mp);
|
nb_running_set_entry(args->dnode, mp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue