summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2020-03-19 20:19:50 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2020-03-20 18:01:53 -0400
commitd1060698b49d3c2863bff92b2915c88e956d0c59 (patch)
tree13ad11ddd09638a7597373d186d614485944eeee
parentc133ddca171985ff301ba84f1793a5e77ae9befc (diff)
bgpd: Convert #define of bgp fsm events to an enum
In PR #6052 which fixes issue #5963 the bgp fsm events were confused with the bgp fsm status leading to a bug. Let's start separating those out so these types of failures cannot just easily occur. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--bgpd/bgp_fsm.c6
-rw-r--r--bgpd/bgp_fsm.h2
-rw-r--r--bgpd/bgpd.h41
3 files changed, 25 insertions, 24 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index f4fbfe4c60..d66afa68c0 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -131,7 +131,7 @@ static struct peer *peer_xfer_conn(struct peer *from_peer)
safi_t safi;
int fd;
int status, pstatus;
- unsigned char last_evt, last_maj_evt;
+ enum bgp_fsm_events last_evt, last_maj_evt;
assert(from_peer != NULL);
@@ -2184,7 +2184,7 @@ static const struct {
/* Execute event process. */
int bgp_event(struct thread *thread)
{
- int event;
+ enum bgp_fsm_events event;
struct peer *peer;
int ret;
@@ -2196,7 +2196,7 @@ int bgp_event(struct thread *thread)
return (ret);
}
-int bgp_event_update(struct peer *peer, int event)
+int bgp_event_update(struct peer *peer, enum bgp_fsm_events event)
{
int next;
int ret = 0;
diff --git a/bgpd/bgp_fsm.h b/bgpd/bgp_fsm.h
index 4b8db161d7..15d0b84e78 100644
--- a/bgpd/bgp_fsm.h
+++ b/bgpd/bgp_fsm.h
@@ -111,7 +111,7 @@
/* Prototypes. */
extern void bgp_fsm_event_update(struct peer *peer, int valid);
extern int bgp_event(struct thread *);
-extern int bgp_event_update(struct peer *, int event);
+extern int bgp_event_update(struct peer *, enum bgp_fsm_events event);
extern int bgp_stop(struct peer *peer);
extern void bgp_timer_set(struct peer *);
extern int bgp_routeadv_timer(struct thread *);
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index 769ac32653..d075f3a7bb 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -838,6 +838,24 @@ struct bgp_peer_gr {
bgp_peer_gr_action_ptr action_fun;
};
+/* BGP finite state machine events. */
+enum bgp_fsm_events {
+ BGP_Start = 1,
+ BGP_Stop,
+ TCP_connection_open,
+ TCP_connection_closed,
+ TCP_connection_open_failed,
+ TCP_fatal_error,
+ ConnectRetry_timer_expired,
+ Hold_Timer_expired,
+ KeepAlive_timer_expired,
+ Receive_OPEN_message,
+ Receive_KEEPALIVE_message,
+ Receive_UPDATE_message,
+ Receive_NOTIFICATION_message,
+ Clearing_Completed,
+ BGP_EVENTS_MAX,
+};
/* BGP neighbor structure. */
struct peer {
@@ -902,9 +920,9 @@ struct peer {
/* FSM events, stored for debug purposes.
* Note: uchar used for reduced memory usage.
*/
- unsigned char cur_event;
- unsigned char last_event;
- unsigned char last_major_event;
+ enum bgp_fsm_events cur_event;
+ enum bgp_fsm_events last_event;
+ enum bgp_fsm_events last_major_event;
/* Peer index, used for dumping TABLE_DUMP_V2 format */
uint16_t table_dump_index;
@@ -1561,23 +1579,6 @@ struct bgp_nlri {
#define Deleted 8
#define BGP_STATUS_MAX 9
-/* BGP finite state machine events. */
-#define BGP_Start 1
-#define BGP_Stop 2
-#define TCP_connection_open 3
-#define TCP_connection_closed 4
-#define TCP_connection_open_failed 5
-#define TCP_fatal_error 6
-#define ConnectRetry_timer_expired 7
-#define Hold_Timer_expired 8
-#define KeepAlive_timer_expired 9
-#define Receive_OPEN_message 10
-#define Receive_KEEPALIVE_message 11
-#define Receive_UPDATE_message 12
-#define Receive_NOTIFICATION_message 13
-#define Clearing_Completed 14
-#define BGP_EVENTS_MAX 15
-
/* BGP timers default value. */
#define BGP_INIT_START_TIMER 1
/* The following 3 are RFC defaults that are overridden in bgp_vty.c with