[NETFILTER] x_tables: Fix XT_ALIGN() macro on [at least] ppc32 To keep backwards compatibility with old iptables userspace programs, the new XT_ALIGN macro always has to return the same value as IPT_ALIGN, IP6T_ALIGN or ARPT_ALIGN in previous kernels. However, in those kernels the macro was defined in dependency to the respective layer3 specifi data structures, which we can no longer do with x_tables. The fix is an ugly kludge, but it has been tested to solve the problem. Yet another reason to move away from the current {ip,ip6,arp,eb}tables like data structures. Signed-off-by: Harald Welte --- commit 470faeb379560fe877b685ca69be6a7e4f0e91ed tree 5732ecd9bcab28469805752514e5c57ba26189a1 parent 44718bbfa186d58477163418d37df173aa2dd079 author Harald Welte Fri, 20 Jan 2006 01:44:24 +0100 committer Harald Welte Fri, 20 Jan 2006 01:44:24 +0100 include/linux/netfilter/x_tables.h | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-) diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 472f048..65f9cd8 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h @@ -19,7 +19,20 @@ struct xt_get_revision /* For standard target */ #define XT_RETURN (-NF_REPEAT - 1) -#define XT_ALIGN(s) (((s) + (__alignof__(void *)-1)) & ~(__alignof__(void *)-1)) +/* this is a dummy structure to find out the alignment requirement for a struct + * containing all the fundamental data types that are used in ipt_entry, ip6t_entry + * and arpt_entry. This sucks, and it is a hack. It will be my personal pleasure + * to remove it -HW */ +struct _xt_align +{ + u_int8_t u8; + u_int16_t u16; + u_int32_t u32; + u_int64_t u64; +}; + +#define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1)) \ + & ~(__alignof__(struct _xt_align)-1)) /* Standard return verdict, or do jump. */ #define XT_STANDARD_TARGET ""