diff options
| -rw-r--r-- | flow.c | 10 | ||||
| -rw-r--r-- | serialise.c | 35 | ||||
| -rw-r--r-- | serialise.h | 7 |
3 files changed, 46 insertions, 6 deletions
@@ -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 */ |
