ioctl BPF 控制操作

用途

执行与包捕获相关的控制操作。

语法

#include <sys/ioctl.h>
int ioctl ( int fd, int cmd[, arg ])

描述

Berkeley 包过滤器 (BPF) ioctl 命令执行各种与包捕获相关的控制。 联邦 参数是一个 BPF 设备描述符。 对于非包捕获描述符,未指定此调用所执行的函数。

命令 参数和可选的第三个参数 (具有不同类型) 由 BPF ioctl 函数传递和解释,以执行用户指定的适当控制操作。

参数

描述
fd 指定一个开放式文件描述符,它引用使用开放式调用创建的 BPF 设备。
cmd 选择要执行的控制功能。
arg 表示执行请求的功能所需要的其他信息。 阿尔格 参数的类型是整数或指向特定于 BPF 的数据结构的指针,这取决于特定控制请求。

BPF 控制操作

除了 FIONREAD ioctl 命令外,以下命令还可以应用于任何打开的 BPF 设备。 阿尔格 参数是指向所指示类型的指针。

ioctl 命令 阿尔格 参数的类型 描述
BIOCGBLEN u_int 返回 BPF 设备上的读操作的缓冲区长度。
生物科学与生命科学 u_int 设置 BPF 设备上的读操作的缓冲区长度。 必须先设置 缓冲 参数,然后才能使用 比奥克塞蒂夫 命令将设备连接到接口。 如果无法容纳所请求的缓冲区大小,那么将在 阿尔格 参数中设置并返回最接近的允许大小。
生物化学与分子遗传学遗传性失神综合征 u_int 返回连接的接口下的数据链接层的类型。
Biocpromisc 不适用 将接口强制转换为混合方式。 将处理所有信息包,而不仅仅是那些以本地主机为目标的信息包。 由于多个设备可以在给定接口上进行侦听,因此以非承诺方式打开其接口的侦听器可以以承诺方式接收信息包。 可以使用相应的过滤器来解决此问题。
BICOFLUSH 不适用 清空入局包的缓冲区,并重置 BIOCGSTATS 命令所返回的统计信息。
比奥克蒂夫 斯特鲁特-伊弗赖克 返回设备正在进行侦听的硬件接口的名称。 该名称将在 伊弗赖克 结构的 ifr_name 字段中返回。 所有其他字段都未定义。
比奥克塞蒂夫 斯特鲁特-伊弗赖克 设置与设备关联的硬件接口。 必须先执行此命令,然后才能读取任何包包。 该设备由使用 伊弗赖克 结构的 ifr_name 字段的名称指示。 此外,该命令还执行 BICOFLUSH 命令的操作。
BIOCOGRTIMEOUT 结构时间 获取读取超时值。 阿尔格 参数指定在读请求超时之前要等待的时间长度。 此参数由打开操作初始化为零,表示没有超时。
生物识别超时 结构时间 设置 BIOCOGRTIMEOUT 命令中描述的读超时值。
生物统计学 结构体 bpf_stat 返回包统计信息的结构。 此结构在 net/bpf.h 文件中定义。
生物即时 u_int 启用或禁用 立即 方式 (基于 阿尔格 参数的真值)。 当启用 立即 方式时,在接收包时立即读取返回。 否则,将阻塞读操作,直到内核缓冲区变满或发生超时为止。
生物安全 结构体 bpf_program 设置内核使用的过滤器程序以废弃不感兴趣的包。 bpf_program 结构在 net/bpf.h 文件中定义。
生物转化 结构体 bpf_version 返回当前由内核识别的过滤器语言的主要版本号和次要版本号。 在安装过滤器之前,应用程序必须检查当前版本是否与正在运行的内核兼容。 当前版本号由 net/bpf.h 文件中的 BPF_MAJOR_VERSION 和 BPF_MINOR_VERSION 变量提供。 不兼容的过滤器可能会导致未定义的行为。

返回值

成功完成后, ioctl 将返回值 0。 否则,它将返回值 -1 并设置 errno 以指示错误。

错误代码

在以下一般条件下, ioctl 命令失败:
描述
EINVAL 已指定无效的命令或参数。
ENETDOWN 底层接口或网络已关闭。
ENXIO 找不到底层的接口。
ENOBUFS 没有足够的内存可用于处理请求。
EEXIST BPF 设备已存在。
ENODEV 无法设置该 BPF 设备。
EINTR 在 ioctl 操作期间捕获到信号。
EACCES 对指定操作的许可权被拒绝。
电子邮件地址不可用 指定的地址对于接口不可用。
ENOMEM 可用的内存量不足。
ESRCH 这一过程并不存在。