From 3a706b33aab1d5b79394ee74bd3a34d2bf00093c Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 26 Sep 2011 12:59:23 -0700 Subject: [PATCH] netlink: New macros for the sizes of Netlink attributes. I was feeling tempted in some code to just guess "hey, 32 bytes ought to be big enough" and so on, but really it seems better to just have a convenient way to measure. --- lib/netlink.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/netlink.h b/lib/netlink.h index 188a9639..b7a87c6c 100644 --- a/lib/netlink.h +++ b/lib/netlink.h @@ -90,6 +90,18 @@ void nl_msg_push_string(struct ofpbuf *, uint16_t type, const char *value); /* Separating buffers into individual messages. */ struct nlmsghdr *nl_msg_next(struct ofpbuf *buffer, struct ofpbuf *msg); + +/* Sizes of various attribute types, in bytes, including the attribute header + * and padding. */ +#define NL_ATTR_SIZE(PAYLOAD_SIZE) (NLA_HDRLEN + NLA_ALIGN(PAYLOAD_SIZE)) +#define NL_A_U8_SIZE NL_ATTR_SIZE(sizeof(uint8_t)) +#define NL_A_U16_SIZE NL_ATTR_SIZE(sizeof(uint16_t)) +#define NL_A_U32_SIZE NL_ATTR_SIZE(sizeof(uint32_t)) +#define NL_A_U64_SIZE NL_ATTR_SIZE(sizeof(uint64_t)) +#define NL_A_BE16_SIZE NL_ATTR_SIZE(sizeof(ovs_be16)) +#define NL_A_BE32_SIZE NL_ATTR_SIZE(sizeof(ovs_be32)) +#define NL_A_BE64_SIZE NL_ATTR_SIZE(sizeof(ovs_be64)) +#define NL_A_FLAG_SIZE NL_ATTR_SIZE(0) /* Netlink attribute types. */ enum nl_attr_type -- 2.30.2