[NETFILTER]: introduce and use aligned_u64 data type
authorHarald Welte <laforge@netfilter.org>
Sat, 13 Aug 2005 20:55:44 +0000 (13:55 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 29 Aug 2005 22:57:59 +0000 (15:57 -0700)
As proposed by Andi Kleen, this is required esp. for x86_64 architecture,
where 64bit code needs 8byte aligned 64bit data types, but 32bit userspace
apps will only align to 4bytes.

Signed-off-by: Harald Welte <laforge@netfilter.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netfilter/nfnetlink_log.h
include/linux/netfilter/nfnetlink_queue.h
include/linux/types.h

index a61836a083e733a921fd4b532f347c9ae8b0f3cb..b04b03880595cfa2c7546df76461cfbe279efb72 100644 (file)
@@ -5,6 +5,7 @@
  * and not any kind of function definitions.  It is shared between kernel and
  * userspace.  Don't put kernel specific stuff in here */
 
+#include <linux/types.h>
 #include <linux/netfilter/nfnetlink.h>
 
 enum nfulnl_msg_types {
@@ -27,8 +28,8 @@ struct nfulnl_msg_packet_hw {
 } __attribute__ ((packed));
 
 struct nfulnl_msg_packet_timestamp {
-       u_int64_t       sec;
-       u_int64_t       usec;
+       aligned_u64     sec;
+       aligned_u64     usec;
 } __attribute__ ((packed));
 
 #define NFULNL_PREFIXLEN       30      /* just like old log target */
index 2d8d2b2cfcaa036dc91dba3ebfe1c27c33d4250e..9e774373244c791d9f77921545f97399a3099ba2 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _NFNETLINK_QUEUE_H
 #define _NFNETLINK_QUEUE_H
 
+#include <linux/types.h>
 #include <linux/netfilter/nfnetlink.h>
 
 enum nfqnl_msg_types {
@@ -24,8 +25,8 @@ struct nfqnl_msg_packet_hw {
 } __attribute__ ((packed));
 
 struct nfqnl_msg_packet_timestamp {
-       u_int64_t       sec;
-       u_int64_t       usec;
+       aligned_u64     sec;
+       aligned_u64     usec;
 } __attribute__ ((packed));
 
 enum nfqnl_attr_type {
index dcb13f865df97ccee9a7764fa247fec754f0609a..2b678c22ca4a0dead6fac2672f76d365ed8945f6 100644 (file)
@@ -123,6 +123,9 @@ typedef             __u64           u_int64_t;
 typedef                __s64           int64_t;
 #endif
 
+/* this is a special 64bit data type that is 8-byte aligned */
+#define aligned_u64 unsigned long long __attribute__((aligned(8)))
+
 /*
  * The type used for indexing onto a disc or disc partition.
  * If required, asm/types.h can override it and define