我正在使用开关。数据包通过一个特殊的千兆位端口进入内核,每个数据包前面都有一个标题,告诉你数据包最初进入的交换机端口。
我正在制定一个协议,要求我知道端口以响应数据包 - 你可以想象功率分配,OAM,802.1X等都有这个问题。
我将交换机端口号存储在sk_buff中的新字段中。没问题。
但是在用户空间中,我使用recvfrom接收数据包,并且无法访问sk_buff。我可以访问sll_ifindex,所以我可以告诉它包含了什么接口,甚至是VLAN(比如eth0.2),但由于所有数据包都来自特殊的千兆位端口,这不是我需要的。我需要原始端口。
有没有办法从sockaddr追溯到sk_buff?由于数据包正在被复制,因此我无法访问它前面的字节。至少现在我也无法访问skbuff。我可以想出一些片状的东西,例如维护这个信息的单独队列,并通过一个单独的通道或其他东西进行通信,但这似乎有问题。
想法?