点击特殊文件

用途

提供软件网络接口,即以太网隧道。

描述

塔普 界面是一种软件回送机制。 它是伪终端 (佩蒂) 的一个网络接口模拟。

佩蒂 驱动程序一样, tap 驱动程序提供两个接口: 模拟接口 ( 塔普 的以太网接口或 佩蒂的终端) 和特殊字符设备 ( 控制 接口)。

网络接口命名为 tap0tap1等,对于已打开的每个开放式控制设备,都是一个接口。 这些以太网网络接口一直存在,直到 if_tap.ko 模块卸载或使用 ifconfig destroy 命令除去为止。

tap 设备是通过使用 ifconfig tapN create 命令的接口克隆创建的。 此方法是创建 塔普 设备的首选方法。 您可以使用 ifconfig tapN destroy 命令除去接口。

每个接口都支持通常的以太网网络接口 ioctl ,例如 SIOCSIFADDRSIOCSIFNETMASK,因此可以像任何其他以太网接口一样与 Ifconfig 命令配合使用。 当系统选择在网络接口上传输以太网帧时,可以从控制设备中读取该帧。 它在那里显示为输入。 将以太网帧写入控制设备的过程在网络接口上生成一个输入帧,就好像 (不存在的) 硬件刚刚接收了它一样。

以太网隧道设备 (通常为 /dev/tapN) 是互斥打开的 (如果已打开,那么无法打开) ,并且限制为超级用户或具有 PV_NET_CNTL 特权的用户。 当打开控制设备时,隧道设备未标记为 。 如果接口未就绪,那么 read () 调用将返回错误 (EHOSTDOWN)。 在接口准备就绪后, read () 调用将返回以太网帧 (如果有任何帧可用)。 如果机架不可用,那么根据是否已启用非阻塞 I/O ,它会阻塞到其中一个机架可用时,或者返回 EHOURDBLOCK 错误。 如果帧长度超过传递给 read () 调用的缓冲区中允许的长度,那么会删除额外的数据。

写 (2) 调用会传递要在伪接口上接收的以太网帧。 每个 write () 调用仅提供一个机架。 帧长度是从提供给 write () 调用的数据量中获取的。 如果由于瞬态原因 (例如,没有可用的缓冲区空间) 而无法接受该帧,那么 write () 调用不会被阻止,而是被丢弃。 但是,如果原因不是瞬时的 (例如,帧太大) ,那么会返回错误。

以下 ioctl 调用受支持,并在 <net/if_tap.h> 文件中定义:

描述
TAPSIFINFO 设置网络接口信息 (线路速率, MTU 和类型)。 该参数应该是指向 结构 塔普信息 参数的指针。
标记 IFINFO 检索网络接口信息 (例如,线路速度, MTU 和类型)。 该参数应该是指向 结构 tapinfo 参数的指针
TAPSDEBUG 将内部调试变量设置为该值。 该参数应该是指向 国际变量的指针。
TAPGDEBUG 将内部调试变量的值存储到其中。 该参数应该是指向 国际 变量的指针。
TAPGIFNAME 检索网络接口名称。 该参数应该是指向 斯特鲁特-伊弗赖克 参数的指针。 接口名称将在 ifr_name 字段中返回。
FIONBIO 根据 int 自变量的值是否为零,为读操作关闭或打开非分块 I/O。 写操作始终是非阻塞的。
FIOASYNC 根据 国际自变量的值是否为零,为读操作 (即,当数据可供读取时生成 SIGIO 信号) 关闭或开启异步 I/O。
FIONREAD 如果有任何帧排队等待读取,那么将第一个帧的大小存储到国际 参数中; 否则,将存储零个帧。
TIOCSPGRP 将进程组设置为在启用异步 I/O 时接收 SIGIO 信号,并将其设置为 国际 参数值。
TIOCGPGRP SIGIO 信号的进程组值检索到自变量 int 值中。

控制设备还支持对读操作进行 select () 调用。 尽管 write () 调用受支持,但很少选择。 write () 调用始终成功,因为写操作是非阻塞的。 在数据设备的最后一个关闭操作上,接口将关闭 (就像ifconfig tapN down一样)。 所有排队的帧都被丢弃。 如果在数据设备未打开时接口已启动,那么会丢弃输出帧以避免堆积如山。