2023-02-08 13:17:09 +01:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
2018-04-07 20:13:07 +02:00
|
|
|
/*
|
|
|
|
* BGP Label Pool - Manage label chunk allocations from zebra asynchronously
|
|
|
|
*
|
|
|
|
* Copyright (C) 2018 LabN Consulting, L.L.C.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _FRR_BGP_LABELPOOL_H
|
|
|
|
#define _FRR_BGP_LABELPOOL_H
|
|
|
|
|
|
|
|
#include <zebra.h>
|
|
|
|
|
|
|
|
#include "mpls.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Types used in bgp_lp_get for debug tracking; add more as needed
|
|
|
|
*/
|
|
|
|
#define LP_TYPE_VRF 0x00000001
|
2018-11-14 04:14:04 +01:00
|
|
|
#define LP_TYPE_BGP_LU 0x00000002
|
2018-04-07 20:13:07 +02:00
|
|
|
|
2019-04-21 18:27:08 +02:00
|
|
|
PREDECL_LIST(lp_fifo);
|
|
|
|
|
2018-04-07 20:13:07 +02:00
|
|
|
struct labelpool {
|
|
|
|
struct skiplist *ledger; /* all requests */
|
|
|
|
struct skiplist *inuse; /* individual labels */
|
|
|
|
struct list *chunks; /* granted by zebra */
|
2019-04-21 18:27:08 +02:00
|
|
|
struct lp_fifo_head requests; /* blocked on zebra */
|
2018-04-07 20:13:07 +02:00
|
|
|
struct work_queue *callback_q;
|
|
|
|
uint32_t pending_count; /* requested from zebra */
|
2020-12-04 13:14:26 +01:00
|
|
|
uint32_t reconnect_count; /* zebra reconnections */
|
2022-08-26 23:47:07 +02:00
|
|
|
uint32_t next_chunksize; /* request this many labels */
|
2018-04-07 20:13:07 +02:00
|
|
|
};
|
|
|
|
|
2023-03-07 20:14:41 +01:00
|
|
|
extern void bgp_lp_init(struct event_loop *master, struct labelpool *pool);
|
2018-04-07 20:13:07 +02:00
|
|
|
extern void bgp_lp_finish(void);
|
|
|
|
extern void bgp_lp_get(int type, void *labelid,
|
|
|
|
int (*cbfunc)(mpls_label_t label, void *labelid, bool allocated));
|
|
|
|
extern void bgp_lp_release(int type, void *labelid, mpls_label_t label);
|
|
|
|
extern void bgp_lp_event_chunk(uint8_t keep, uint32_t first, uint32_t last);
|
|
|
|
extern void bgp_lp_event_zebra_down(void);
|
|
|
|
extern void bgp_lp_event_zebra_up(void);
|
2020-12-04 13:14:26 +01:00
|
|
|
extern void bgp_lp_vty_init(void);
|
2018-04-07 20:13:07 +02:00
|
|
|
|
|
|
|
#endif /* _FRR_BGP_LABELPOOL_H */
|