From: Ben Pfaff Date: Mon, 26 Sep 2011 19:59:23 +0000 (-0700) Subject: netlink: New macros for the sizes of Netlink attributes. X-Git-Tag: v1.3.0~102 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=3a706b33aab1d5b79394ee74bd3a34d2bf00093c;p=sliver-openvswitch.git 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. --- diff --git a/lib/netlink.h b/lib/netlink.h index 188a96391..b7a87c6c3 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