summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org>2005-11-06 09:58:03 +0000
committer/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org>2005-11-06 09:58:03 +0000
commite636f72ad8619b2907489545791d1d20e92de18d (patch)
tree5e574532228240d5b8f24de04d09ca3557cfbddb
parent2e2a200435daeebeccac0a802d156ab24306e8bb (diff)
fix nfq_get_timestamp() to use struct timeval and be endian correct
-rw-r--r--include/libnetfilter_queue/libnetfilter_queue.h3
-rw-r--r--src/libnetfilter_queue.c14
2 files changed, 12 insertions, 5 deletions
diff --git a/include/libnetfilter_queue/libnetfilter_queue.h b/include/libnetfilter_queue/libnetfilter_queue.h
index 93331e1..3b2c374 100644
--- a/include/libnetfilter_queue/libnetfilter_queue.h
+++ b/include/libnetfilter_queue/libnetfilter_queue.h
@@ -68,8 +68,7 @@ extern struct nfqnl_msg_packet_hdr *
extern u_int32_t nfq_get_nfmark(struct nfq_data *nfad);
-extern struct nfq_msg_packet_timestamp *
- nfq_get_timestamp(struct nfq_data *nfad);
+extern int nfq_get_timestamp(struct nfq_data *nfad, struct timeval *tv);
/* return 0 if not set */
extern u_int32_t nfq_get_indev(struct nfq_data *nfad);
diff --git a/src/libnetfilter_queue.c b/src/libnetfilter_queue.c
index 8844012..7fa0643 100644
--- a/src/libnetfilter_queue.c
+++ b/src/libnetfilter_queue.c
@@ -335,10 +335,18 @@ uint32_t nfq_get_nfmark(struct nfq_data *nfad)
return ntohl(nfnl_get_data(nfad->data, NFQA_MARK, u_int32_t));
}
-struct nfq_msg_packet_timestamp *nfq_get_timestamp(struct nfq_data *nfad)
+int nfq_get_timestamp(struct nfq_data *nfad, struct timeval *tv)
{
- return nfnl_get_pointer_to_data(nfad->data, NFQA_TIMESTAMP,
- struct nfq_msg_packet_timestamp);
+ struct nfqnl_msg_packet_timestamp *qpt;
+ qpt = nfnl_get_pointer_to_data(nfad->data, NFQA_TIMESTAMP,
+ struct nfqnl_msg_packet_timestamp);
+ if (!qpt)
+ return -1;
+
+ tv->tv_sec = __be64_to_cpu(qpt->sec);
+ tv->tv_usec = __be64_to_cpu(qpt->usec);
+
+ return 0;
}
/* all nfq_get_*dev() functions return 0 if not set, since linux only allows