diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2020-03-19 20:19:50 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2020-03-20 18:01:53 -0400 |
| commit | d1060698b49d3c2863bff92b2915c88e956d0c59 (patch) | |
| tree | 13ad11ddd09638a7597373d186d614485944eeee | |
| parent | c133ddca171985ff301ba84f1793a5e77ae9befc (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.c | 6 | ||||
| -rw-r--r-- | bgpd/bgp_fsm.h | 2 | ||||
| -rw-r--r-- | bgpd/bgpd.h | 41 |
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 |
