我有一个网络设备,其中以太网交换机芯片的端口连接到 CPU 的网络控制器。交换芯片将数据包从其他端口转发到 CPU 端口,并添加特殊的头(在 MAC 头之前),其中包含入口端口等信息。
我可以在网络控制器驱动程序中接收数据包时剥离头部,这样Linux网络堆栈就可以与交换机正常通信。然而,我的目标是将特殊标头中的一些信息传递给用户空间第 2 层控制协议套件。
在我的例子中,第 2 层控制协议通常会使用原始套接字来接收其控制帧。例如,生成树协议必须能够分辨数据包来自哪个交换机端口。
此外,http、telnet 服务器等服务应该能够使用相同的网络接口。
是否有任何 Linux 内置方法可以将此类信息从驱动程序传递到用户空间网络服务器/客户端?如果没有,有什么建议可以实施吗?
我可以实现一个简单的 ioctl 调用来向驱动程序查询所读取的最后一个数据包的标头信息。但是,不能保证该设备没有被 和 之间的其他进程recv()
使用ioctl()
。