diff options
Diffstat (limited to 'src/mpu.c')
| -rw-r--r-- | src/mpu.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -3,6 +3,7 @@ #include "mpu.h" #include "heap.h" +#include <endian.h> #include <errno.h> #include <stddef.h> #include <stdint.h> @@ -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)); } } } |
