我有一个网络设备,其中以太网交换机芯片的端口连接到CPU的网络控制器。交换芯片将来自其他端口的数据包转发到CPU端口,并在包含诸如入口端口等信息的特殊报头(在MAC报头之前)等。Linux用户空间L2控制协议
我可以在网络控制器驱动程序中接收数据包时去掉报头,因此Linux网络堆栈可以以正常方式与交换机通信。然而,我的目标是将特殊头文件中的一些信息传递给用户空间第2层控制协议套件。
在我的情况下,第2层控制协议通常会使用原始套接字来接收其控制帧。例如,生成树协议必须能够确定数据包来自哪个交换机端口。
另外,诸如http,telnet服务器等服务应该能够使用相同的网络接口。
是否有任何Linux内置的手段将这些信息从驱动程序传递到用户空间网络服务器/客户端? 如果没有,关于实施这个的任何建议?
我可以实现一个简单的ioctl调用来查询驱动程序关于读取的最后一个数据包的头信息。但是,不保证该设备未被recv()
和ioctl()
之间的其他进程使用。
听起来很有希望,我会试试看:) – LRipa