summaryrefslogtreecommitdiff
path: root/proto/bmp/map.h
diff options
context:
space:
mode:
authorPawel Maslanka <pmaslank@akamai.com>2021-03-29 22:45:21 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2023-04-16 20:05:15 +0200
commita848dad40aa618e5e24417e4ef46b62c860de679 (patch)
treef14426246ec7f6ef89b0c12460f4979f6b2a047e /proto/bmp/map.h
parent9e44ace3928a19560058dc713fcbff3a8bad3b3c (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.h70
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_ */