From 83d421507cbec4dad613e501c998408a72745452 Mon Sep 17 00:00:00 2001 From: PancakeTAS Date: Sat, 13 Jun 2026 15:24:12 +0200 Subject: fix(mpu): Convert sequence number on wire into le64 --- src/mpu.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/mpu.c b/src/mpu.c index f25f1d8..ec976a2 100644 --- a/src/mpu.c +++ b/src/mpu.c @@ -3,6 +3,7 @@ #include "mpu.h" #include "heap.h" +#include #include #include #include @@ -59,8 +60,6 @@ static inline uint64_t get_time_now(void) { + ((uint64_t) ts.tv_nsec / 1000000ULL); } -// FIXME: seq_num is never converted to network byte order - // TODO: Zero-copy send() requiring the user to reserve space for the header. // Perhaps consider MSG_MORE for sending header & payload separately or sendmsg() @@ -79,7 +78,7 @@ int mpu_send(mpu_ctx_t* ctx, const uint8_t* data, size_t len) { memcpy(packet.buf + sizeof(mpu_hdr_t), data, len); packet.hdr = (mpu_hdr_t) { - .seq_num = ctx->send_seq_num++ + .seq_num = htole64(ctx->send_seq_num++) }; // Select path using weighted round-robin scheduler @@ -135,7 +134,7 @@ ssize_t mpu_recv(mpu_ctx_t* ctx, uint8_t* data, size_t len) { } mpu_slot_t* slot = (mpu_slot_t*) node->user; - if (slot->packet.hdr.seq_num < ctx->recv_seq_num) { + if (le64toh(slot->packet.hdr.seq_num) < ctx->recv_seq_num) { heap_extract(&ctx->reorder_heap); continue; } @@ -146,7 +145,7 @@ ssize_t mpu_recv(mpu_ctx_t* ctx, uint8_t* data, size_t len) { break; } - ctx->recv_seq_num = slot->packet.hdr.seq_num + 1; + ctx->recv_seq_num = le64toh(slot->packet.hdr.seq_num) + 1; heap_extract(&ctx->reorder_heap); } @@ -193,7 +192,7 @@ ssize_t mpu_recv(mpu_ctx_t* ctx, uint8_t* data, size_t len) { slot->timestamp = get_time_now(); slot->packet_len = (uint16_t) packet_len; - heap_insert(&ctx->reorder_heap, slot->packet.hdr.seq_num); + heap_insert(&ctx->reorder_heap, le64toh(slot->packet.hdr.seq_num)); } } } -- cgit v1.3.1