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