bgpd,lib: document the table id / instance usage

Document where relevant about the instance overload to table ID so users
know what to expect.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
This commit is contained in:
Rafael Zalamena 2025-01-23 15:13:01 -03:00
parent 36b94dcc7b
commit 5846339eae
3 changed files with 28 additions and 0 deletions

View file

@ -2043,6 +2043,18 @@ int bgp_redistribute_set(struct bgp *bgp, afi_t afi, int type,
/* Return if already redistribute flag is set. */
if (instance) {
if (type == ZEBRA_ROUTE_TABLE_DIRECT) {
/*
* When redistribution type is `table-direct` the
* instance means `table identification`.
*
* `table_id` support 32bit integers, however since
* `instance` is being overloaded to `table_id` it
* will only be possible to use the first 65535
* entries.
*
* Also the ZAPI must also support `int`
* (see `zebra_redistribute_add`).
*/
struct redist_table_direct table = {
.table_id = instance,
.vrf_id = bgp->vrf_id,

View file

@ -4774,6 +4774,16 @@ static void zclient_redistribute_table_direct(struct zclient *zclient, vrf_id_t
void zclient_redistribute(int command, struct zclient *zclient, afi_t afi,
int type, unsigned short instance, vrf_id_t vrf_id)
{
/*
* When asking for table-direct redistribution the parameter
* `instance` has a different meaning: it means table
* identification.
*
* The table identification information is stored in
* `zclient->mi_redist` along with the VRF identification
* information in a pair (different from the usual single protocol
* instance value).
*/
if (type == ZEBRA_ROUTE_TABLE_DIRECT) {
zclient_redistribute_table_direct(zclient, vrf_id, afi, instance, command);
return;

View file

@ -271,6 +271,12 @@ struct redist_proto {
/**
* Redistribute table direct instance data structure: keeps the VRF
* that subscribed to the table ID.
*
* **NOTE**
* `table_id` is an integer because that is what the netlink interface
* uses for route attribute RTA_TABLE (32bit int), however the whole
* zclient API uses `unsigned short` (and CLI commands) so it will be
* limited to the range 1 to 65535.
*/
struct redist_table_direct {
vrf_id_t vrf_id;