mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2025-02-03 06:40:02 +00:00
BGP: TX bucket storage moved to Stonehenge
This commit is contained in:
parent
240dd41f06
commit
4f7899e3cb
@ -1734,13 +1734,16 @@ bgp_get_bucket(struct bgp_ptx_private *c, ea_list *new)
|
|||||||
uint size = sizeof(struct bgp_bucket) + ea_size;
|
uint size = sizeof(struct bgp_bucket) + ea_size;
|
||||||
|
|
||||||
/* Allocate the bucket */
|
/* Allocate the bucket */
|
||||||
b = mb_alloc(c->pool, size);
|
sth_block blk = sth_alloc(c->sth, size);
|
||||||
|
b = blk.block;
|
||||||
*b = (struct bgp_bucket) { };
|
*b = (struct bgp_bucket) { };
|
||||||
init_list(&b->prefixes);
|
init_list(&b->prefixes);
|
||||||
b->hash = hash;
|
b->hash = hash;
|
||||||
|
|
||||||
/* Copy the ea_list */
|
/* Copy the ea_list */
|
||||||
ea_list_copy(b->eattrs, new, ea_size);
|
ea_list_copy(b->eattrs, new, ea_size);
|
||||||
|
if (blk.large)
|
||||||
|
b->eattrs->flags |= EALF_HUGE;
|
||||||
|
|
||||||
/* Insert the bucket to bucket hash */
|
/* Insert the bucket to bucket hash */
|
||||||
HASH_INSERT2(c->bucket_hash, RBH, c->pool, b);
|
HASH_INSERT2(c->bucket_hash, RBH, c->pool, b);
|
||||||
@ -1764,7 +1767,7 @@ static void
|
|||||||
bgp_free_bucket(struct bgp_ptx_private *c, struct bgp_bucket *b)
|
bgp_free_bucket(struct bgp_ptx_private *c, struct bgp_bucket *b)
|
||||||
{
|
{
|
||||||
HASH_REMOVE2(c->bucket_hash, RBH, c->pool, b);
|
HASH_REMOVE2(c->bucket_hash, RBH, c->pool, b);
|
||||||
mb_free(b);
|
sth_free((sth_block) { b, !!(b->eattrs->flags & EALF_HUGE) });
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -2086,6 +2089,7 @@ bgp_init_pending_tx(struct bgp_channel *c)
|
|||||||
|
|
||||||
bpp->lock = dom;
|
bpp->lock = dom;
|
||||||
bpp->pool = p;
|
bpp->pool = p;
|
||||||
|
bpp->sth = sth_new(p);
|
||||||
bpp->c = c;
|
bpp->c = c;
|
||||||
|
|
||||||
bgp_init_bucket_table(bpp);
|
bgp_init_bucket_table(bpp);
|
||||||
@ -2160,8 +2164,7 @@ bgp_free_pending_tx(struct bgp_channel *bc)
|
|||||||
HASH_WALK_END;
|
HASH_WALK_END;
|
||||||
|
|
||||||
HASH_FREE(c->bucket_hash);
|
HASH_FREE(c->bucket_hash);
|
||||||
sl_delete(c->bucket_slab);
|
sth_delete(c->sth);
|
||||||
c->bucket_slab = NULL;
|
|
||||||
|
|
||||||
rp_free(c->pool);
|
rp_free(c->pool);
|
||||||
|
|
||||||
|
@ -452,7 +452,8 @@ struct bgp_ptx_private {
|
|||||||
struct { BGP_PTX_PUBLIC; };
|
struct { BGP_PTX_PUBLIC; };
|
||||||
struct bgp_ptx_private **locked_at;
|
struct bgp_ptx_private **locked_at;
|
||||||
|
|
||||||
pool *pool; /* Resource pool for TX related allocations */
|
pool *pool; /* Pool for infrequent long-term blocks */
|
||||||
|
stonehenge *sth; /* Bucket allocator */
|
||||||
|
|
||||||
HASH(struct bgp_bucket) bucket_hash; /* Hash table of route buckets */
|
HASH(struct bgp_bucket) bucket_hash; /* Hash table of route buckets */
|
||||||
struct bgp_bucket *withdraw_bucket; /* Withdrawn routes */
|
struct bgp_bucket *withdraw_bucket; /* Withdrawn routes */
|
||||||
@ -461,7 +462,6 @@ struct bgp_ptx_private {
|
|||||||
HASH(struct bgp_prefix) prefix_hash; /* Hash table of pending prefices */
|
HASH(struct bgp_prefix) prefix_hash; /* Hash table of pending prefices */
|
||||||
|
|
||||||
slab *prefix_slab; /* Slab holding prefix nodes */
|
slab *prefix_slab; /* Slab holding prefix nodes */
|
||||||
slab *bucket_slab; /* Slab holding buckets to send */
|
|
||||||
|
|
||||||
char bmp; /* This is a fake ptx for BMP encoding */
|
char bmp; /* This is a fake ptx for BMP encoding */
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user