mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
BGP: Cleanup channels when going down
When going up, uncleaned old channel state may trigger unexpected conditions crashing bird.
This commit is contained in:
parent
2ba6a02395
commit
ccee5a863e
@ -1576,6 +1576,11 @@ bgp_channel_cleanup(struct channel *C)
|
||||
|
||||
if (c->igp_table_ip6)
|
||||
rt_unlock_table(c->igp_table_ip6);
|
||||
|
||||
c->index = 0;
|
||||
|
||||
/* Cleanup rest of bgp_channel starting at pool field */
|
||||
memset(&(c->pool), 0, sizeof(struct bgp_channel) - OFFSETOF(struct bgp_channel, pool));
|
||||
}
|
||||
|
||||
static inline struct bgp_channel_config *
|
||||
|
@ -282,12 +282,16 @@ struct bgp_channel {
|
||||
|
||||
/* Rest are BGP specific data */
|
||||
struct bgp_channel_config *cf;
|
||||
pool *pool; /* XXXX */
|
||||
|
||||
u32 afi;
|
||||
u32 index;
|
||||
const struct bgp_af_desc *desc;
|
||||
|
||||
rtable *igp_table_ip4; /* Table for recursive IPv4 next hop lookups */
|
||||
rtable *igp_table_ip6; /* Table for recursive IPv6 next hop lookups */
|
||||
|
||||
/* Rest are zeroed when down */
|
||||
pool *pool;
|
||||
HASH(struct bgp_bucket) bucket_hash; /* Hash table of route buckets */
|
||||
struct bgp_bucket *withdraw_bucket; /* Withdrawn routes */
|
||||
list bucket_queue; /* Queue of buckets to send (struct bgp_bucket) */
|
||||
@ -295,8 +299,6 @@ struct bgp_channel {
|
||||
HASH(struct bgp_prefix) prefix_hash; /* Prefixes to be sent */
|
||||
slab *prefix_slab; /* Slab holding prefix nodes */
|
||||
|
||||
rtable *igp_table_ip4; /* Table for recursive IPv4 next hop lookups */
|
||||
rtable *igp_table_ip6; /* Table for recursive IPv6 next hop lookups */
|
||||
ip_addr next_hop_addr; /* Local address for NEXT_HOP attribute */
|
||||
ip_addr link_addr; /* Link-local version of next_hop_addr */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user