IPQ_SET_MODE(3) 2001-10-16
NAME
ipq_set_mode —— 设置ip_queue的排队模式
SYNOPSIS
#include <linux/netfilter.h>
#include <libipq.h>
int ipq_set_mode(const struct ipq_handle *h, u_int8_t mode, size_t range);
DESCRIPTION
函数ipq_set_mode发送一个消息给内核ip_queue模块,指定是仅发送数据包元数据,还是将数据包负载带着元数据一起拷贝到用户空间。
参数h是一个上下文句柄,其必须是之前调用ipq_create_handle成功返回的句柄。
参数mode必须是下列之一:
IPQ_COPY_META
仅拷贝数据包元数据到用户空间。
IPQ_COPY_PACKET
拷贝数据包元数据和数据包负载到用户空间。
参数range用于指定拷贝多少字节的负载到用户空间。仅对IPQ_COPY_PACKET模式有效,否则忽略。最大的可用值是65535(更大的值将被ip_queue截断)。
ipq_set_mode通常是在ipq_create_handle后立即调用,以启动到用户空间的数据包流。
记住,底层的Netlink消息传输是无连接的,ip_queue模块并不知道用户空间的应用已经准备好了接收数据,直到它收到一个这样的消息。
RETURN VALUE
失败时返回-1。
成功时返回一个非0的正值。
ERRORS
失败时,通过ipq_errstr函数获取一个错误消息。
DIAGNOSTICS
一个常见的问题是因为ip_queue模块没有载入引起的。这种情况下,下面的代码:
status = ipq_set_mode(h, IPQ_COPY_META, 0);
if (status < 0) {
ipq_perror("myapp");
ipq_destroy_handle(h);
exit(1);
}
将生成下面的输出:
myapp: Failed to send netlink message: Connection refused
BUGS
None known.
AUTHOR
James Morris <[email protected]>
COPYRIGHT
Copyright (c) 2000-2001 Netfilter Core Team.
Distributed under the GNU General Public License.
SEE ALSO
libipq(3), iptables(8).