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>
This commit is contained in:
Donald Sharp 2020-03-19 20:19:50 -04:00
parent c133ddca17
commit d1060698b4
3 changed files with 25 additions and 24 deletions

View File

@ -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;

View File

@ -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 *);

View File

@ -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