繁体   English   中英

Linux用户空间L2控制协议

[英]Linux user space L2 control protocols

我有一个网络设备,其中以太网交换芯片的端口连接到CPU的网络控制器。 交换芯片将数据包从其他端口转发到CPU端口,并添加特殊报头(在MAC报头之前),其中包含入口端口等信息。

我可以在网络控制器驱动程序中接收数据包时剥离标题,因此Linux网络堆栈可以正常方式与交换机通信。 但是,我的目标是将特殊标头中的某些信息传递给用户空间第2层控制协议套件。

就我而言,第2层控制协议通常会使用原始套接字来接收其控制帧。 例如,生成树协议必须能够分辨出数据包来自哪个交换机端口。

此外,诸如http,telnet服务器等服务应能够使用相同的网络接口。

是否有Linux内置方法可将此类信息从驱动程序传递到用户空间网络服务器/客户端? 如果没有,对实施此方法有何建议?

我可以实现一个简单的ioctl调用,以向驱动程序查询最后读取的数据包的标头信息。 但是,不能保证recv()ioctl()之间的其他进程未使用该设备。

我认为实现此目的的最佳方法是在sk_buff添加一个字段来存储您的特殊L2标头。 如果我理解正确,则在将sk_buff从一层传递到另一层时应保留标头,尽管您可能需要向skb_clone添加一些代码。

如果达到这一点,则将此值发送到用户空间仅受您的想象力限制。 例如,您可以

  1. 将值存储在套接字结构sock ,并稍后使用ioctl返回;
  2. 直接在recvfromsrc_addr返回值

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM