Skip to content

Commit

Permalink
Merge pull request #14464 from opensourcerouting/fix/dampening_crash
Browse files Browse the repository at this point in the history
bgpd: Fix dampening info crash
  • Loading branch information
donaldsharp authored Sep 23, 2023
2 parents 4f0db0d + e0a8795 commit 7d12e26
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 15 deletions.
10 changes: 7 additions & 3 deletions bgpd/bgp_damp.c
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ void bgp_damp_info_vty(struct vty *vty, struct bgp_path_info *path, afi_t afi,
{
struct bgp_damp_info *bdi;
time_t t_now, t_diff;
char timebuf[BGP_UPTIME_LEN];
char timebuf[BGP_UPTIME_LEN] = {};
int penalty;
struct bgp_damp_config *bdc = &damp[afi][safi];

Expand All @@ -570,7 +570,9 @@ void bgp_damp_info_vty(struct vty *vty, struct bgp_path_info *path, afi_t afi,

/* If dampening is not enabled or there is no dampening information,
return immediately. */
if (!bdc || !bdi)
if (!CHECK_FLAG(path->peer->bgp->af_flags[afi][safi],
BGP_CONFIG_DAMPENING) ||
!bdi)
return;

/* Calculate new penalty. */
Expand Down Expand Up @@ -624,7 +626,9 @@ const char *bgp_damp_reuse_time_vty(struct vty *vty, struct bgp_path_info *path,

/* If dampening is not enabled or there is no dampening information,
return immediately. */
if (!bdc || !bdi)
if (!CHECK_FLAG(path->peer->bgp->af_flags[afi][safi],
BGP_CONFIG_DAMPENING) ||
!bdi)
return NULL;

/* Calculate new penalty. */
Expand Down
2 changes: 1 addition & 1 deletion bgpd/bgp_mplsvpn.c
Original file line number Diff line number Diff line change
Expand Up @@ -3142,7 +3142,7 @@ int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd,
return CMD_WARNING;
}
table = bgp->rib[afi][SAFI_MPLS_VPN];
return bgp_show_table_rd(vty, bgp, SAFI_MPLS_VPN, table, prd, type,
return bgp_show_table_rd(vty, bgp, afi, SAFI_MPLS_VPN, table, prd, type,
output_arg, show_flags);
}

Expand Down
20 changes: 10 additions & 10 deletions bgpd/bgp_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -9824,7 +9824,7 @@ static void damp_route_vty_out(struct vty *vty, const struct prefix *p,
{
struct attr *attr = path->attr;
int len;
char timebuf[BGP_UPTIME_LEN];
char timebuf[BGP_UPTIME_LEN] = {};
json_object *json_path = NULL;

if (use_json)
Expand Down Expand Up @@ -9883,7 +9883,7 @@ static void flap_route_vty_out(struct vty *vty, const struct prefix *p,
{
struct attr *attr = path->attr;
struct bgp_damp_info *bdi;
char timebuf[BGP_UPTIME_LEN];
char timebuf[BGP_UPTIME_LEN] = {};
int len;
json_object *json_path = NULL;

Expand Down Expand Up @@ -11085,7 +11085,7 @@ static int bgp_show_community(struct vty *vty, struct bgp *bgp,
const char *comstr, int exact, afi_t afi,
safi_t safi, uint16_t show_flags);

static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi,
static int bgp_show_table(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
struct bgp_table *table, enum bgp_show_type type,
void *output_arg, const char *rd, int is_last,
unsigned long *output_cum, unsigned long *total_cum,
Expand Down Expand Up @@ -11446,12 +11446,12 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi,
if (type == bgp_show_type_dampend_paths
|| type == bgp_show_type_damp_neighbor)
damp_route_vty_out(vty, dest_p, pi, display,
AFI_IP, safi, use_json,
afi, safi, use_json,
json_paths);
else if (type == bgp_show_type_flap_statistics
|| type == bgp_show_type_flap_neighbor)
flap_route_vty_out(vty, dest_p, pi, display,
AFI_IP, safi, use_json,
afi, safi, use_json,
json_paths);
else {
if (detail_routes || detail_json) {
Expand Down Expand Up @@ -11607,7 +11607,7 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi,
return CMD_SUCCESS;
}

int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, safi_t safi,
int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
struct bgp_table *table, struct prefix_rd *prd_match,
enum bgp_show_type type, void *output_arg,
uint16_t show_flags)
Expand Down Expand Up @@ -11636,7 +11636,7 @@ int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, safi_t safi,

memcpy(&prd, dest_p, sizeof(struct prefix_rd));
prefix_rd2str(&prd, rd, sizeof(rd), bgp->asnotation);
bgp_show_table(vty, bgp, safi, itable, type, output_arg,
bgp_show_table(vty, bgp, afi, safi, itable, type, output_arg,
rd, next == NULL, &output_cum,
&total_cum, &json_header_depth,
show_flags, RPKI_NOT_BEING_USED);
Expand Down Expand Up @@ -11686,7 +11686,7 @@ static int bgp_show(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
table = bgp->rib[afi][safi];
/* use MPLS and ENCAP specific shows until they are merged */
if (safi == SAFI_MPLS_VPN) {
return bgp_show_table_rd(vty, bgp, safi, table, NULL, type,
return bgp_show_table_rd(vty, bgp, afi, safi, table, NULL, type,
output_arg, show_flags);
}

Expand All @@ -11699,7 +11699,7 @@ static int bgp_show(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
if (safi == SAFI_EVPN)
return bgp_evpn_show_all_routes(vty, bgp, type, use_json, 0);

return bgp_show_table(vty, bgp, safi, table, type, output_arg, NULL, 1,
return bgp_show_table(vty, bgp, afi, safi, table, type, output_arg, NULL, 1,
NULL, NULL, &json_header_depth, show_flags,
rpki_target_state);
}
Expand Down Expand Up @@ -12023,7 +12023,7 @@ static void bgp_show_path_info(const struct prefix_rd *pfx_rd,
|| CHECK_FLAG(pi->flags, BGP_PATH_SELECTED))))
route_vty_out_detail(vty, bgp, bgp_node,
bgp_dest_get_prefix(bgp_node), pi,
AFI_IP, safi, rpki_curr_state,
afi, safi, rpki_curr_state,
json_paths);
}

Expand Down
2 changes: 1 addition & 1 deletion bgpd/bgp_route.h
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,7 @@ extern void route_vty_out_detail(struct vty *vty, struct bgp *bgp,
struct bgp_path_info *path, afi_t afi,
safi_t safi, enum rpki_states,
json_object *json_paths);
extern int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, safi_t safi,
extern int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
struct bgp_table *table, struct prefix_rd *prd,
enum bgp_show_type type, void *output_arg,
uint16_t show_flags);
Expand Down

0 comments on commit 7d12e26

Please sign in to comment.