------------------------------------------------------------------------ Signed-off-by: Eric Leblond --- Index: include/libnetfilter_queue/linux_nfnetlink_queue.h =================================================================== --- include/libnetfilter_queue/linux_nfnetlink_queue.h (révision 6470) +++ include/libnetfilter_queue/linux_nfnetlink_queue.h (copie de travail) @@ -1,13 +1,13 @@ #ifndef _NFNETLINK_QUEUE_H #define _NFNETLINK_QUEUE_H -#include -#include - #ifndef aligned_u64 #define aligned_u64 unsigned long long __attribute__((aligned(8))) #endif +#include +#include + enum nfqnl_msg_types { NFQNL_MSG_PACKET, /* packet from kernel to userspace */ NFQNL_MSG_VERDICT, /* verdict from userspace to kernel */ @@ -86,6 +86,7 @@ NFQA_CFG_UNSPEC, NFQA_CFG_CMD, /* nfqnl_msg_config_cmd */ NFQA_CFG_PARAMS, /* nfqnl_msg_config_params */ + NFQA_CFG_QUEUE_MAXLEN, /* u_int32_t */ __NFQA_CFG_MAX }; #define NFQA_CFG_MAX (__NFQA_CFG_MAX-1) Index: include/libnetfilter_queue/libnetfilter_queue.h =================================================================== --- include/libnetfilter_queue/libnetfilter_queue.h (révision 6470) +++ include/libnetfilter_queue/libnetfilter_queue.h (copie de travail) @@ -49,6 +49,9 @@ extern int nfq_set_mode(struct nfq_q_handle *qh, u_int8_t mode, unsigned int len); +int nfq_set_queue_maxlen(struct nfq_q_handle *qh, + u_int32_t queuelen); + extern int nfq_set_verdict(struct nfq_q_handle *qh, u_int32_t id, u_int32_t verdict, Index: src/libnetfilter_queue.c =================================================================== --- src/libnetfilter_queue.c (révision 6470) +++ src/libnetfilter_queue.c (copie de travail) @@ -288,6 +288,23 @@ return nfnl_talk(qh->h->nfnlh, nmh, 0, 0, NULL, NULL, NULL); } +int nfq_set_queue_maxlen(struct nfq_q_handle *qh, + u_int32_t queuelen) +{ + char buf[NFNL_HEADER_LEN + +NFA_LENGTH(sizeof(struct nfqnl_msg_config_params))]; + u_int32_t queue_maxlen = htonl(queuelen); + struct nlmsghdr *nmh = (struct nlmsghdr *) buf; + + nfnl_fill_hdr(qh->h->nfnlssh, nmh, 0, AF_UNSPEC, qh->id, + NFQNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); + + nfnl_addattr_l(nmh, sizeof(buf), NFQA_CFG_QUEUE_MAXLEN, &queue_maxlen, + sizeof(queue_maxlen)); + + return nfnl_talk(qh->h->nfnlh, nmh, 0, 0, NULL, NULL, NULL); +} + static int __set_verdict(struct nfq_q_handle *qh, u_int32_t id, u_int32_t verdict, u_int32_t mark, int set_mark, u_int32_t data_len, unsigned char *data)