]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: Add ptr_get_be64() function
authorDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 12 Oct 2022 18:03:42 +0000 (21:03 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 26 Oct 2022 08:22:43 +0000 (11:22 +0300)
Get a single uint64_t value from two uint32_t values.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
lib/stream.h

index 35733e743858a44da28a33d863d1ff15d8136810..a3c148c9c9362945067fc1ba3bb63bf0f745d7c1 100644 (file)
@@ -386,6 +386,18 @@ extern void stream_fifo_free(struct stream_fifo *fifo);
  * bit), for 64-bit values (you need to cast them anyway), and neither for
  * encoding (because it's downcasted.)
  */
+static inline const uint8_t *ptr_get_be64(const uint8_t *ptr, uint64_t *out)
+{
+       uint32_t tmp1, tmp2;
+
+       memcpy(&tmp1, ptr, sizeof(tmp1));
+       memcpy(&tmp2, ptr + sizeof(tmp1), sizeof(tmp1));
+
+       *out = (((uint64_t)ntohl(tmp1)) << 32) | ntohl(tmp2);
+
+       return ptr + 8;
+}
+
 static inline const uint8_t *ptr_get_be32(const uint8_t *ptr, uint32_t *out)
 {
        uint32_t tmp;