This makes it easier to reuse this idea elsewhere. Signed-off-by: Ben Pfaff <b...@ovn.org> --- include/openvswitch/ofp-actions.h | 14 +------------- include/openvswitch/util.h | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/include/openvswitch/ofp-actions.h b/include/openvswitch/ofp-actions.h index a0cefe3..310ec33 100644 --- a/include/openvswitch/ofp-actions.h +++ b/include/openvswitch/ofp-actions.h @@ -185,19 +185,7 @@ BUILD_ASSERT_DECL(sizeof(struct ofpact) == 4); /* Alignment. */ #define OFPACT_ALIGNTO 8 #define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO) - -/* Expands to an anonymous union that contains: - * - * - MEMBERS in a nested anonymous struct. - * - * - An array as large as MEMBERS plus padding to a multiple of 8 bytes. - * - * The effect is to pad MEMBERS to a multiple of 8 bytes. */ -#define OFPACT_PADDED_MEMBERS(MEMBERS) \ - union { \ - struct { MEMBERS }; \ - uint8_t pad[OFPACT_ALIGN(sizeof(struct { MEMBERS }))]; \ - } +#define OFPACT_PADDED_MEMBERS(MEMBERS) PADDED_MEMBERS(OFPACT_ALIGNTO, MEMBERS) /* Returns the ofpact following 'ofpact'. */ static inline struct ofpact * diff --git a/include/openvswitch/util.h b/include/openvswitch/util.h index 363fa39..06bd2d0 100644 --- a/include/openvswitch/util.h +++ b/include/openvswitch/util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -162,6 +162,26 @@ OVS_NO_RETURN void ovs_assert_failure(const char *, const char *, const char *); /* Returns true if X is a power of 2, otherwise false. */ #define IS_POW2(X) ((X) && !((X) & ((X) - 1))) +/* Expands to an anonymous union that contains: + * + * - MEMBERS in a nested anonymous struct. + * + * - An array as large as MEMBERS plus padding to a multiple of UNIT bytes. + * + * The effect is to pad MEMBERS to a multiple of UNIT bytes. + * + * For example, the struct below is 8 bytes long, with 6 bytes of padding: + * + * struct padded_struct { + * PADDED_MEMBERS(8, uint8_t x; uint8_t y;); + * }; + */ +#define PADDED_MEMBERS(UNIT, MEMBERS) \ + union { \ + struct { MEMBERS }; \ + uint8_t pad[ROUND_UP(sizeof(struct { MEMBERS }), UNIT)]; \ + } + static inline bool is_pow2(uintmax_t x) { -- 2.1.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev