]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_fsm.c
bgpd: rework icmp enumerate list
[mirror_frr.git] / bgpd / bgp_fsm.c
index 3255aff2a8e080a41404139d5d9b66f2bc4bb995..2fd63531db757d42f7c76906583e251e78758f0d 100644 (file)
@@ -52,6 +52,7 @@
 #include "bgpd/bgp_memory.h"
 #include "bgpd/bgp_keepalives.h"
 #include "bgpd/bgp_io.h"
+#include "bgpd/bgp_zebra.h"
 
 DEFINE_HOOK(peer_backward_transition, (struct peer * peer), (peer))
 DEFINE_HOOK(peer_established, (struct peer * peer), (peer))
@@ -166,8 +167,8 @@ static struct peer *peer_xfer_conn(struct peer *from_peer)
                        zlog_err(
                                "[%s] Dropping pending packet on connection transfer:",
                                peer->host);
-                       u_int16_t type = stream_getc_from(peer->curr,
-                                                         BGP_MARKER_SIZE + 2);
+                       uint16_t type = stream_getc_from(peer->curr,
+                                                        BGP_MARKER_SIZE + 2);
                        bgp_dump_packet(peer, type, peer->curr);
                        stream_free(peer->curr);
                        peer->curr = NULL;
@@ -193,7 +194,6 @@ static struct peer *peer_xfer_conn(struct peer *from_peer)
        peer->as = from_peer->as;
        peer->v_holdtime = from_peer->v_holdtime;
        peer->v_keepalive = from_peer->v_keepalive;
-       peer->routeadv = from_peer->routeadv;
        peer->v_routeadv = from_peer->v_routeadv;
        peer->v_gr_restart = from_peer->v_gr_restart;
        peer->cap = from_peer->cap;
@@ -763,8 +763,8 @@ int bgp_maxmed_onstartup_active(struct bgp *bgp)
 
 void bgp_maxmed_update(struct bgp *bgp)
 {
-       u_char maxmed_active;
-       u_int32_t maxmed_value;
+       uint8_t maxmed_active;
+       uint32_t maxmed_value;
 
        if (bgp->v_maxmed_admin) {
                maxmed_active = 1;
@@ -1143,7 +1143,7 @@ int bgp_stop(struct peer *peer)
        }
 
        /* Reset keepalive and holdtime */
-       if (PEER_OR_GROUP_TIMER_SET(peer)) {
+       if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER)) {
                peer->v_keepalive = peer->keepalive;
                peer->v_holdtime = peer->holdtime;
        } else {
@@ -1199,7 +1199,8 @@ static int bgp_stop_with_error(struct peer *peer)
 
 
 /* something went wrong, send notify and tear down */
-static int bgp_stop_with_notify(struct peer *peer, u_char code, u_char sub_code)
+static int bgp_stop_with_notify(struct peer *peer, uint8_t code,
+                               uint8_t sub_code)
 {
        /* Send notify to remote peer */
        bgp_notify_send(peer, code, sub_code);
@@ -1255,7 +1256,8 @@ static int bgp_connect_check(struct thread *thread)
 
        /* If getsockopt is fail, this is fatal error. */
        if (ret < 0) {
-               zlog_info("can't get sockopt for nonblocking connect");
+               zlog_info("can't get sockopt for nonblocking connect: %d(%s)",
+                         errno, safe_strerror(errno));
                BGP_EVENT_ADD(peer, TCP_fatal_error);
                return -1;
        }
@@ -1266,8 +1268,8 @@ static int bgp_connect_check(struct thread *thread)
                return 1;
        } else {
                if (bgp_debug_neighbor_events(peer))
-                       zlog_debug("%s [Event] Connect failed (%s)", peer->host,
-                                  safe_strerror(errno));
+                       zlog_debug("%s [Event] Connect failed %d(%s)",
+                                  peer->host, status, safe_strerror(status));
                BGP_EVENT_ADD(peer, TCP_connection_open_failed);
                return 0;
        }
@@ -1377,7 +1379,7 @@ int bgp_start(struct peer *peer)
                return 0;
        }
 
-       if (peer->bgp && peer->bgp->vrf_id == VRF_UNKNOWN) {
+       if (peer->bgp->vrf_id == VRF_UNKNOWN) {
                if (bgp_debug_neighbor_events(peer))
                        zlog_err(
                                "%s [FSM] In a VRF that is not initialised yet",
@@ -1393,16 +1395,17 @@ int bgp_start(struct peer *peer)
        else
                connected = 0;
 
-       if (!bgp_find_or_add_nexthop(peer->bgp,
+       if (!bgp_find_or_add_nexthop(peer->bgp, peer->bgp,
                                     family2afi(peer->su.sa.sa_family), NULL,
                                     peer, connected)) {
-#if defined(HAVE_CUMULUS)
-               if (bgp_debug_neighbor_events(peer))
-                       zlog_debug("%s [FSM] Waiting for NHT", peer->host);
+               if (bgp_zebra_num_connects()) {
+                       if (bgp_debug_neighbor_events(peer))
+                               zlog_debug("%s [FSM] Waiting for NHT",
+                                          peer->host);
 
-               BGP_EVENT_ADD(peer, TCP_connection_open_failed);
-               return 0;
-#endif
+                       BGP_EVENT_ADD(peer, TCP_connection_open_failed);
+                       return 0;
+               }
        }
 
        assert(!peer->t_write);