From a848dad40aa618e5e24417e4ef46b62c860de679 Mon Sep 17 00:00:00 2001 From: Pawel Maslanka Date: Mon, 29 Mar 2021 22:45:21 +0200 Subject: 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. --- proto/bmp/buffer.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 proto/bmp/buffer.c (limited to 'proto/bmp/buffer.c') diff --git a/proto/bmp/buffer.c b/proto/bmp/buffer.c new file mode 100644 index 00000000..f471e08a --- /dev/null +++ b/proto/bmp/buffer.c @@ -0,0 +1,58 @@ +/* + * 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. + */ + +#include "proto/bmp/buffer.h" + +buffer +bmp_buffer_alloc(pool *ppool, const size_t n) +{ + buffer buf; + buf.start = mb_alloc(ppool, n); + buf.pos = buf.start; + buf.end = buf.start + n; + + return buf; +} + +void +bmp_buffer_free(buffer *buf) +{ + mb_free(buf->start); + buf->start = buf->pos = buf->end = NULL; +} + +static void +bmp_buffer_grow(buffer *buf, const size_t n) +{ + const size_t pos = bmp_buffer_pos(buf); + buf->start = mb_realloc(buf->start, n); + buf->pos = buf->start + pos; + buf->end = buf->start + n; +} + +void +bmp_buffer_need(buffer *buf, const size_t n) +{ + if (bmp_buffer_avail(buf) < n) + { + bmp_buffer_grow(buf, n); + } +} + +void +bmp_put_data(buffer *buf, const void *src, const size_t n) +{ + if (!n) + { + return; + } + + bmp_buffer_need(buf, n); + memcpy(buf->pos, src, n); + buf->pos += n; +} \ No newline at end of file -- cgit v1.2.3