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/map.h | |
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/map.h')
-rw-r--r-- | proto/bmp/map.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/proto/bmp/map.h b/proto/bmp/map.h new file mode 100644 index 00000000..e9d5798e --- /dev/null +++ b/proto/bmp/map.h @@ -0,0 +1,70 @@ +/* + * 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. + */ + +/** + * This map implementation binds peer IP address as container key with custom data. + */ +#ifndef _BIRD_BMP_MAP_H_ +#define _BIRD_BMP_MAP_H_ + +#include "nest/bird.h" +#include "lib/hash.h" +#include "lib/resource.h" + +#include "proto/bmp/utils.h" + +struct bmp_peer_map_key { + struct bmp_peer_map_key *next; + ip_addr peer_ip; + u32 peer_as; +}; + +struct bmp_peer_map_data { + void *buf; + size_t buf_size; +}; + +struct bmp_peer_map_entry { + struct bmp_peer_map_key key; + struct bmp_peer_map_data data; +}; + +struct bmp_peer_map { + pool *mpool; // Memory pool for peer entries in peer_hash + HASH(struct bmp_peer_map_key) peer_hash; // Hash for peers to find the index +}; + +enum bmp_result +bmp_peer_map_init(struct bmp_peer_map *map, pool *mpool); + +struct bmp_peer_map_key +bmp_peer_map_key_create(const ip_addr peer_ip, const u32 peer_as); + +enum bmp_result +bmp_peer_map_free(struct bmp_peer_map *map); + +enum bmp_result +bmp_peer_map_flush(struct bmp_peer_map *map); + +enum bmp_result +bmp_peer_map_insert(struct bmp_peer_map *map, const struct bmp_peer_map_key key, + const byte *data, const size_t data_size); + +enum bmp_result +bmp_peer_map_remove(struct bmp_peer_map *map, const struct bmp_peer_map_key key); + +const struct bmp_peer_map_entry * +bmp_peer_map_get(struct bmp_peer_map *map, const struct bmp_peer_map_key key); + +typedef void (*bmp_peer_map_walk_action)(const struct bmp_peer_map_key key, + const byte *data, const size_t data_size); + +void +bmp_peer_map_walk(const struct bmp_peer_map *map, bmp_peer_map_walk_action action); + +#endif /* _BIRD_BMP_MAP_H_ */ |