From 5b295ff409d66b961db28955c844b958efcd0b8a Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Mon, 26 Jun 2023 19:22:38 +0200 Subject: [PATCH] MINOR: ring: add a function to compute max ring payload Add a helper function to the ring API to compute the maximum payload length that could fit into the ring based on ring size. --- include/haproxy/ring.h | 2 ++ src/ring.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/haproxy/ring.h b/include/haproxy/ring.h index d6c527c5b..71217d523 100644 --- a/include/haproxy/ring.h +++ b/include/haproxy/ring.h @@ -41,6 +41,8 @@ int ring_attach_cli(struct ring *ring, struct appctx *appctx, uint flags); int cli_io_handler_show_ring(struct appctx *appctx); void cli_io_release_show_ring(struct appctx *appctx); +size_t ring_max_payload(const struct ring *ring); + #endif /* _HAPROXY_RING_H */ /* diff --git a/src/ring.c b/src/ring.c index 2b8e3c85e..9b8863afe 100644 --- a/src/ring.c +++ b/src/ring.c @@ -457,6 +457,22 @@ void cli_io_release_show_ring(struct appctx *appctx) ring_detach_appctx(ring, appctx, ofs); } +/* Returns the MAXIMUM payload len that could theoretically fit into the ring + * based on ring buffer size. + * + * Computation logic relies on implementation details from 'ring-t.h'. + */ +size_t ring_max_payload(const struct ring *ring) +{ + size_t max; + + /* initial max = bufsize - 1 (initial RC) - 1 (payload RC) */ + max = b_size(&ring->buf) - 1 - 1; + + /* substract payload VI (varint-encoded size) */ + max -= varint_bytes(max); + return max; +} /* * Local variables: