mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00
ldpd: Option for disabled LDP hello message during TCP
Added option "disable-establish-hello" that disableds sending additional LDP hello multicast messages during TCP session establishment. This option enables per interface: "(config-ldp-af-if)". Signed-off-by: Andrii Melnychenko <a.melnychenko@vyos.io>
This commit is contained in:
parent
ab6d15b42b
commit
8087be8e70
|
@ -63,11 +63,13 @@ if_new(const char *name)
|
||||||
iface->ipv4.af = AF_INET;
|
iface->ipv4.af = AF_INET;
|
||||||
iface->ipv4.iface = iface;
|
iface->ipv4.iface = iface;
|
||||||
iface->ipv4.enabled = 0;
|
iface->ipv4.enabled = 0;
|
||||||
|
iface->ipv4.disable_establish_hello = 0;
|
||||||
|
|
||||||
/* ipv6 */
|
/* ipv6 */
|
||||||
iface->ipv6.af = AF_INET6;
|
iface->ipv6.af = AF_INET6;
|
||||||
iface->ipv6.iface = iface;
|
iface->ipv6.iface = iface;
|
||||||
iface->ipv6.enabled = 0;
|
iface->ipv6.enabled = 0;
|
||||||
|
iface->ipv6.disable_establish_hello = 0;
|
||||||
|
|
||||||
return (iface);
|
return (iface);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ int ldp_vty_allow_broken_lsp(struct vty *, const char *);
|
||||||
int ldp_vty_address_family (struct vty *, const char *, const char *);
|
int ldp_vty_address_family (struct vty *, const char *, const char *);
|
||||||
int ldp_vty_disc_holdtime(struct vty *, const char *, enum hello_type, long);
|
int ldp_vty_disc_holdtime(struct vty *, const char *, enum hello_type, long);
|
||||||
int ldp_vty_disc_interval(struct vty *, const char *, enum hello_type, long);
|
int ldp_vty_disc_interval(struct vty *, const char *, enum hello_type, long);
|
||||||
|
int ldp_vty_disable_establish_hello(struct vty *, const char *);
|
||||||
int ldp_vty_targeted_hello_accept(struct vty *, const char *, const char *);
|
int ldp_vty_targeted_hello_accept(struct vty *, const char *, const char *);
|
||||||
int ldp_vty_nbr_session_holdtime(struct vty *, const char *, struct in_addr, long);
|
int ldp_vty_nbr_session_holdtime(struct vty *, const char *, struct in_addr, long);
|
||||||
int ldp_vty_af_session_holdtime(struct vty *, const char *, long);
|
int ldp_vty_af_session_holdtime(struct vty *, const char *, long);
|
||||||
|
|
|
@ -122,6 +122,15 @@ DEFPY (ldp_discovery_link_interval,
|
||||||
return (ldp_vty_disc_interval(vty, no, HELLO_LINK, interval));
|
return (ldp_vty_disc_interval(vty, no, HELLO_LINK, interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFPY (ldp_disable_establish_hello,
|
||||||
|
ldp_disable_establish_hello_cmd,
|
||||||
|
"[no] disable-establish-hello",
|
||||||
|
NO_STR
|
||||||
|
"Disable sending additional LDP hello message on establishing LDP tcp connection\n")
|
||||||
|
{
|
||||||
|
return ldp_vty_disable_establish_hello(vty, no);
|
||||||
|
}
|
||||||
|
|
||||||
DEFPY (ldp_discovery_targeted_interval,
|
DEFPY (ldp_discovery_targeted_interval,
|
||||||
ldp_discovery_targeted_interval_cmd,
|
ldp_discovery_targeted_interval_cmd,
|
||||||
"[no] discovery targeted-hello interval (1-65535)$interval",
|
"[no] discovery targeted-hello interval (1-65535)$interval",
|
||||||
|
@ -866,9 +875,11 @@ ldp_vty_init (void)
|
||||||
|
|
||||||
install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
|
install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
|
||||||
install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_interval_cmd);
|
install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_interval_cmd);
|
||||||
|
install_element(LDP_IPV4_IFACE_NODE, &ldp_disable_establish_hello_cmd);
|
||||||
|
|
||||||
install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
|
install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
|
||||||
install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_interval_cmd);
|
install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_interval_cmd);
|
||||||
|
install_element(LDP_IPV6_IFACE_NODE, &ldp_disable_establish_hello_cmd);
|
||||||
|
|
||||||
install_element(LDP_L2VPN_NODE, &ldp_bridge_cmd);
|
install_element(LDP_L2VPN_NODE, &ldp_bridge_cmd);
|
||||||
install_element(LDP_L2VPN_NODE, &ldp_mtu_cmd);
|
install_element(LDP_L2VPN_NODE, &ldp_mtu_cmd);
|
||||||
|
|
|
@ -119,6 +119,8 @@ ldp_af_iface_config_write(struct vty *vty, int af)
|
||||||
ia->hello_interval != 0)
|
ia->hello_interval != 0)
|
||||||
vty_out (vty, " discovery hello interval %u\n",
|
vty_out (vty, " discovery hello interval %u\n",
|
||||||
ia->hello_interval);
|
ia->hello_interval);
|
||||||
|
if (ia->disable_establish_hello)
|
||||||
|
vty_out (vty, " disable-establish-hello\n");
|
||||||
|
|
||||||
vty_out (vty, " exit\n");
|
vty_out (vty, " exit\n");
|
||||||
}
|
}
|
||||||
|
@ -632,6 +634,36 @@ ldp_vty_disc_interval(struct vty *vty, const char *negate,
|
||||||
return (CMD_SUCCESS);
|
return (CMD_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ldp_vty_disable_establish_hello(struct vty *vty,
|
||||||
|
const char *negate)
|
||||||
|
{
|
||||||
|
struct iface *iface;
|
||||||
|
struct iface_af *ia;
|
||||||
|
int af;
|
||||||
|
|
||||||
|
switch (vty->node) {
|
||||||
|
case LDP_IPV4_IFACE_NODE:
|
||||||
|
case LDP_IPV6_IFACE_NODE:
|
||||||
|
af = ldp_vty_get_af(vty);
|
||||||
|
iface = VTY_GET_CONTEXT(iface);
|
||||||
|
VTY_CHECK_CONTEXT(iface);
|
||||||
|
|
||||||
|
ia = iface_af_get(iface, af);
|
||||||
|
if (negate)
|
||||||
|
ia->disable_establish_hello = 0;
|
||||||
|
else
|
||||||
|
ia->disable_establish_hello = 1;
|
||||||
|
|
||||||
|
ldp_config_apply(vty, vty_conf);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fatalx("ldp_vty_disable_establish_hello: unexpected node");
|
||||||
|
}
|
||||||
|
|
||||||
|
return (CMD_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ldp_vty_targeted_hello_accept(struct vty *vty, const char *negate,
|
ldp_vty_targeted_hello_accept(struct vty *vty, const char *negate,
|
||||||
const char *acl_from_str)
|
const char *acl_from_str)
|
||||||
|
|
|
@ -1604,6 +1604,7 @@ merge_iface_af(struct iface_af *ia, struct iface_af *xi)
|
||||||
}
|
}
|
||||||
ia->hello_holdtime = xi->hello_holdtime;
|
ia->hello_holdtime = xi->hello_holdtime;
|
||||||
ia->hello_interval = xi->hello_interval;
|
ia->hello_interval = xi->hello_interval;
|
||||||
|
ia->disable_establish_hello = xi->disable_establish_hello;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -332,6 +332,7 @@ struct iface_af {
|
||||||
struct event *hello_timer;
|
struct event *hello_timer;
|
||||||
uint16_t hello_holdtime;
|
uint16_t hello_holdtime;
|
||||||
uint16_t hello_interval;
|
uint16_t hello_interval;
|
||||||
|
int disable_establish_hello;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iface_ldp_sync {
|
struct iface_ldp_sync {
|
||||||
|
|
|
@ -630,8 +630,9 @@ nbr_establish_connection(struct nbr *nbr)
|
||||||
* an adjacency as well.
|
* an adjacency as well.
|
||||||
*/
|
*/
|
||||||
RB_FOREACH(adj, nbr_adj_head, &nbr->adj_tree)
|
RB_FOREACH(adj, nbr_adj_head, &nbr->adj_tree)
|
||||||
send_hello(adj->source.type, adj->source.link.ia,
|
if (!(adj->source.type == HELLO_LINK && adj->source.link.ia->disable_establish_hello))
|
||||||
adj->source.target);
|
send_hello(adj->source.type, adj->source.link.ia,
|
||||||
|
adj->source.target);
|
||||||
|
|
||||||
if (connect(nbr->fd, &remote_su.sa, sockaddr_len(&remote_su.sa)) == -1) {
|
if (connect(nbr->fd, &remote_su.sa, sockaddr_len(&remote_su.sa)) == -1) {
|
||||||
if (errno == EINPROGRESS) {
|
if (errno == EINPROGRESS) {
|
||||||
|
|
Loading…
Reference in a new issue