mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-25 03:01:55 +00:00
727a8f32c4
New symbol is added for each stats protocol channel, the symbol is accessed by same name as the underlying channel. Symbols evaluate to the sum of all routes exported from connected table with generation less than max generation of particular channel. Default max generation is 16. Beware you shouldn't make cyclic references as the behavior of such configuration is not defined!
79 lines
1.7 KiB
Plaintext
79 lines
1.7 KiB
Plaintext
/*
|
|
* BIRD -- Statistics Protocol Configuration
|
|
*
|
|
* (c) 2022 Vojtech Vilimek <vojtech.vilimek@nic.cz>
|
|
* (c) 2022 CZ.NIC z.s.p.o.
|
|
*
|
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
|
*/
|
|
|
|
CF_HDR
|
|
|
|
/* old: #include "proto/pipe/pipe.h" */
|
|
#include "proto/stats/stats.h"
|
|
|
|
CF_DEFINES
|
|
|
|
/* old: #define PIPE_CFG ((struct pipe_config *) this_proto) */
|
|
#define STATS_CC ((struct stats_channel_config *) this_channel)
|
|
|
|
CF_DECLS
|
|
|
|
/* TODO here add more keywords */
|
|
CF_KEYWORDS(STATS, TABLE, MAX, GENERATION)
|
|
|
|
%type <cc> stats_channel_start
|
|
|
|
CF_GRAMMAR
|
|
|
|
proto: stats_proto '}' { this_channel = NULL; } ;
|
|
|
|
stats_proto_start: proto_start STATS
|
|
{
|
|
this_proto = proto_config_new(&proto_stats, $1);
|
|
}
|
|
|
|
proto_name ;
|
|
|
|
stats_channel_opt_list:
|
|
/* empty */
|
|
| '{' stats_opts '}'
|
|
;
|
|
|
|
|
|
channel_max_gen:
|
|
MAX GENERATION expr {
|
|
if ($3 > 254) cf_error("Max generation must be in range 0..254, got %u", $3);
|
|
STATS_CC->max_generation = $3;
|
|
}
|
|
;
|
|
|
|
stats_opts:
|
|
/* empty */
|
|
| stats_opts channel_item ';'
|
|
| stats_opts channel_max_gen ';'
|
|
;
|
|
|
|
stats_proto_channel: stats_channel_start stats_channel_opt_list channel_end ;
|
|
/* stats_proto_channel: stats_channel_start stats_max_gen channel_opt_list channel_end ; */
|
|
|
|
stats_channel_start: net_type symbol
|
|
{
|
|
this_channel = channel_config_get(&channel_stats, $2->name, $1, this_proto);
|
|
STATS_CC->max_generation = 16;
|
|
/* from filter/config.Y:
|
|
cf_define_symbol($3, SYM_VARIABLE | $2, offset, $3->scope->slots++) */
|
|
$2 = cf_define_symbol($2, SYM_COUNTER, ch_config, this_channel);
|
|
}
|
|
|
|
stats_proto:
|
|
stats_proto_start '{'
|
|
| stats_proto proto_item ';'
|
|
| stats_proto stats_proto_channel ';'
|
|
| stats_proto ';'
|
|
;
|
|
|
|
CF_CODE
|
|
|
|
CF_END
|