aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--flow.c10
-rw-r--r--serialise.c35
-rw-r--r--serialise.h7
3 files changed, 46 insertions, 6 deletions
diff --git a/flow.c b/flow.c
index 25a6f1a..c84857b 100644
--- a/flow.c
+++ b/flow.c
@@ -1135,10 +1135,9 @@ int flow_migrate_source(struct ctx *c, const struct migrate_stage *stage,
count++;
}
- count = htonl(count);
- if (write_all_buf(fd, &count, sizeof(count))) {
+ if (write_u32(fd, count)) {
rc = errno;
- err_perror("Can't send flow count (%u)", ntohl(count));
+ err_perror("Can't send flow count (%u)", count);
return flow_migrate_source_rollback(c, FLOW_MAX, rc);
}
@@ -1151,7 +1150,7 @@ int flow_migrate_source(struct ctx *c, const struct migrate_stage *stage,
debug("Stop listen()s");
fwd_listen_close(&c->fwd_in);
- debug("Sending %u flows", ntohl(count));
+ debug("Sending %u flows", count);
if (!count)
return 0;
@@ -1221,10 +1220,9 @@ int flow_migrate_target(struct ctx *c, const struct migrate_stage *stage,
(void)stage;
- if (read_all_buf(fd, &count, sizeof(count)))
+ if (read_u32(fd, &count))
return errno;
- count = ntohl(count);
debug("Receiving %u flows", count);
if (!count)
diff --git a/serialise.c b/serialise.c
index f162eeb..944e741 100644
--- a/serialise.c
+++ b/serialise.c
@@ -13,7 +13,9 @@
*/
#include <assert.h>
+#include <endian.h>
#include <errno.h>
+#include <stdint.h>
#include <unistd.h>
#include "serialise.h"
@@ -86,3 +88,36 @@ int write_all_buf(int fd, const void *buf, size_t len)
}
return 0;
}
+
+/**
+ * read_uXXX() - Receive a uXXX value from an fd
+ * @fd: File descriptor to read from
+ * @valp: Pointer to variable to update with read value
+ *
+ * Return: 0 on success, -1 on error
+ */
+/**
+ * write_uXXX() - Send a uXXX value to an fd
+ * @fd: File descriptor to write to
+ * @val: Value to send
+ *
+ * Return: 0 on success, -1 on error
+ */
+#define SERIALISE_UINT(bits) \
+ int read_u##bits(int fd, uint##bits##_t *val) \
+ { \
+ uint##bits##_t beval; \
+ if (read_all_buf(fd, &beval, sizeof(beval)) < 0) \
+ return -1; \
+ *val = be##bits##toh(beval); \
+ return 0; \
+ } \
+ int write_u##bits(int fd, uint##bits##_t val) \
+ { \
+ uint##bits##_t beval = htobe##bits(val); \
+ return write_all_buf(fd, &beval, sizeof(beval)); \
+ }
+
+SERIALISE_UINT(32)
+
+#undef SERIALISE_UINT
diff --git a/serialise.h b/serialise.h
index 251c772..a88f3de 100644
--- a/serialise.h
+++ b/serialise.h
@@ -7,8 +7,15 @@
#define SERIALISE_H
#include <stddef.h>
+#include <stdint.h>
int read_all_buf(int fd, void *buf, size_t len);
int write_all_buf(int fd, const void *buf, size_t len);
+#define SERIALISE_UINT_DECL(bits) \
+ int read_u##bits(int fd, uint##bits##_t *val); \
+ int write_u##bits(int fd, uint##bits##_t val);
+
+SERIALISE_UINT_DECL(32)
+
#endif /* SERIALISE_H */