mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-25 22:30:52 +00:00
Merge pull request #16782 from pguibert6WIND/fix_nexthop_set_failed_message
bgpd: fix 'nexthop_set failed' error message often displayed
This commit is contained in:
commit
b5e266b032
@ -1799,18 +1799,14 @@ bgp_connect_fail(struct peer_connection *connection)
|
|||||||
*/
|
*/
|
||||||
static void bgp_connect_in_progress_update_connection(struct peer *peer)
|
static void bgp_connect_in_progress_update_connection(struct peer *peer)
|
||||||
{
|
{
|
||||||
if (bgp_getsockname(peer) < 0) {
|
bgp_updatesockname(peer);
|
||||||
if (!peer->su_remote &&
|
if (!peer->su_remote && !BGP_CONNECTION_SU_UNSPEC(peer->connection)) {
|
||||||
!BGP_CONNECTION_SU_UNSPEC(peer->connection)) {
|
/* if connect initiated, then dest port and dest addresses are well known */
|
||||||
/* if connect initiated, then dest port and dest addresses are well known */
|
peer->su_remote = sockunion_dup(&peer->connection->su);
|
||||||
peer->su_remote = sockunion_dup(&peer->connection->su);
|
if (sockunion_family(peer->su_remote) == AF_INET)
|
||||||
if (sockunion_family(peer->su_remote) == AF_INET)
|
peer->su_remote->sin.sin_port = htons(peer->port);
|
||||||
peer->su_remote->sin.sin_port =
|
else if (sockunion_family(peer->su_remote) == AF_INET6)
|
||||||
htons(peer->port);
|
peer->su_remote->sin6.sin6_port = htons(peer->port);
|
||||||
else if (sockunion_family(peer->su_remote) == AF_INET6)
|
|
||||||
peer->su_remote->sin6.sin6_port =
|
|
||||||
htons(peer->port);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -861,8 +861,7 @@ int bgp_connect(struct peer_connection *connection)
|
|||||||
htons(peer->port), ifindex);
|
htons(peer->port), ifindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* After TCP connection is established. Get local address and port. */
|
void bgp_updatesockname(struct peer *peer)
|
||||||
int bgp_getsockname(struct peer *peer)
|
|
||||||
{
|
{
|
||||||
if (peer->su_local) {
|
if (peer->su_local) {
|
||||||
sockunion_free(peer->su_local);
|
sockunion_free(peer->su_local);
|
||||||
@ -876,6 +875,12 @@ int bgp_getsockname(struct peer *peer)
|
|||||||
|
|
||||||
peer->su_local = sockunion_getsockname(peer->connection->fd);
|
peer->su_local = sockunion_getsockname(peer->connection->fd);
|
||||||
peer->su_remote = sockunion_getpeername(peer->connection->fd);
|
peer->su_remote = sockunion_getpeername(peer->connection->fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* After TCP connection is established. Get local address and port. */
|
||||||
|
int bgp_getsockname(struct peer *peer)
|
||||||
|
{
|
||||||
|
bgp_updatesockname(peer);
|
||||||
|
|
||||||
if (!bgp_zebra_nexthop_set(peer->su_local, peer->su_remote,
|
if (!bgp_zebra_nexthop_set(peer->su_local, peer->su_remote,
|
||||||
&peer->nexthop, peer)) {
|
&peer->nexthop, peer)) {
|
||||||
|
@ -23,6 +23,7 @@ extern void bgp_close_vrf_socket(struct bgp *bgp);
|
|||||||
extern void bgp_close(void);
|
extern void bgp_close(void);
|
||||||
extern int bgp_connect(struct peer_connection *connection);
|
extern int bgp_connect(struct peer_connection *connection);
|
||||||
extern int bgp_getsockname(struct peer *peer);
|
extern int bgp_getsockname(struct peer *peer);
|
||||||
|
extern void bgp_updatesockname(struct peer *peer);
|
||||||
|
|
||||||
extern int bgp_md5_set_prefix(struct bgp *bgp, struct prefix *p,
|
extern int bgp_md5_set_prefix(struct bgp *bgp, struct prefix *p,
|
||||||
const char *password);
|
const char *password);
|
||||||
|
Loading…
Reference in New Issue
Block a user