点击特殊文件
用途
提供软件网络接口,即以太网隧道。
描述
塔普 界面是一种软件回送机制。 它是伪终端 (佩蒂) 的一个网络接口模拟。
与 佩蒂 驱动程序一样, tap 驱动程序提供两个接口: 模拟接口 ( 塔普 的以太网接口或 佩蒂的终端) 和特殊字符设备 ( 控制 接口)。
网络接口命名为 tap0, tap1等,对于已打开的每个开放式控制设备,都是一个接口。 这些以太网网络接口一直存在,直到 if_tap.ko 模块卸载或使用 ifconfig destroy 命令除去为止。
tap 设备是通过使用 ifconfig tapN create 命令的接口克隆创建的。 此方法是创建 塔普 设备的首选方法。 您可以使用 ifconfig tapN destroy 命令除去接口。
每个接口都支持通常的以太网网络接口 ioctl ,例如 SIOCSIFADDR 和 SIOCSIFNETMASK,因此可以像任何其他以太网接口一样与 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一样)。 所有排队的帧都被丢弃。 如果在数据设备未打开时接口已启动,那么会丢弃输出帧以避免堆积如山。