huyc

导航

ipq_set_mode(3)

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 <jmorris@intercode.com.au>

COPYRIGHT
Copyright (c) 2000-2001 Netfilter Core Team.

Distributed under the GNU General Public License.

SEE ALSO
libipq(3), iptables(8).



posted on 2011-11-03 20:05  huyc  阅读(732)  评论(0编辑  收藏  举报