diff options
author | Pawel Maslanka <pmaslank@akamai.com> | 2021-03-29 22:45:21 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2023-04-16 20:05:15 +0200 |
commit | a848dad40aa618e5e24417e4ef46b62c860de679 (patch) | |
tree | f14426246ec7f6ef89b0c12460f4979f6b2a047e /proto/bmp/config.Y | |
parent | 9e44ace3928a19560058dc713fcbff3a8bad3b3c (diff) |
BMP protocol support
Initial implementation of a basic subset of the BMP (BGP Monitoring
Protocol, RFC 7854) from Akamai team. Submitted for further review
and improvement.
Diffstat (limited to 'proto/bmp/config.Y')
-rw-r--r-- | proto/bmp/config.Y | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/proto/bmp/config.Y b/proto/bmp/config.Y new file mode 100644 index 00000000..df7822ea --- /dev/null +++ b/proto/bmp/config.Y @@ -0,0 +1,90 @@ +/* + * BIRD -- The BGP Monitoring Protocol (BMP) + * + * (c) 2020 Akamai Technologies, Inc. (Pawel Maslanka, pmaslank@akamai.com) + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +CF_HDR + +#include "proto/bmp/bmp.h" + +CF_DEFINES + +#define BMP_CFG ((struct bmp_config *) this_proto) + +CF_DECLS + +CF_KEYWORDS(BMP, DESCRIPTION, ENABLED, IN, IP, MONITORING, NAME, PORT, + PRE_POLICY, POST_POLICY, RIB, STATION, SYSTEM) + +CF_GRAMMAR + +proto: bmp_proto '}' ; + +bmp_proto_start: proto_start BMP { + this_proto = proto_config_new(&proto_bmp, $1); + BMP_CFG->disabled = false; + BMP_CFG->station_ip = IPA_NONE4; + BMP_CFG->station_port = 0; + BMP_CFG->sys_descr = "Not defined"; + BMP_CFG->sys_name = "Not defined"; + BMP_CFG->monitoring_rib_in_pre_policy = false; + BMP_CFG->monitoring_rib_in_post_policy = false; + BMP_CFG->monitoring_rib_local = false; + } + ; + +bmp_station_address: + /* empty */ + | bmp_station_address IP ipa { + if (!BMP_CFG->disabled) + if (ipa_zero($3)) + cf_error("Invalid BMP monitoring station IP address"); + BMP_CFG->station_ip = $3; + } + | bmp_station_address PORT expr { + if (($3 < 1) || ($3 > 65535)) + cf_error("Invalid BMP monitoring station port number"); + BMP_CFG->station_port = $3; + } + ; + +bmp_proto: + bmp_proto_start proto_name '{' + | bmp_proto proto_item ';' + | bmp_proto ENABLED bool ';' { + BMP_CFG->disabled = $3; + } + | bmp_proto STATION ADDRESS bmp_station_address ';' + | bmp_proto SYSTEM DESCRIPTION text ';' { + if (!$4 || (strlen($4) == 0)) + cf_error("String is empty"); + else if (strlen($4) > 255) + cf_error("Invalid string length"); + BMP_CFG->sys_descr = $4; + } + | bmp_proto SYSTEM NAME text ';' { + if (!$4 || (strlen($4) == 0)) + cf_error("String is empty"); + else if (strlen($4) > 255) + cf_error("Invalid string length"); + BMP_CFG->sys_name = $4; + } + | bmp_proto MONITORING RIB IN PRE_POLICY bool ';' { + BMP_CFG->monitoring_rib_in_pre_policy = $6; + } + | bmp_proto MONITORING RIB IN POST_POLICY bool ';' { + BMP_CFG->monitoring_rib_in_post_policy = $6; + } + | bmp_proto MONITORING RIB LOCAL bool ';' { + BMP_CFG->monitoring_rib_local = $5; + } + | bmp_proto DISABLED bool ';' { + BMP_CFG->disabled = $3; } + ; + +CF_CODE + +CF_END |