スイッチでやってます。パケットは特別なギガビット ポート経由でカーネルに入ります。各パケットの前には、パケットが最初に入ってきたスイッチ ポートを示すヘッダーが付きます。
私は、パケットに応答するためにポートを知る必要があるプロトコルに取り組んでいます。電力割り当て、OAM、802.1X などすべてにこの問題があることを想像できます。
スイッチのポート番号を sk_buff の新しいフィールドに保存します。問題ない。
しかし、ユーザー空間では、recvfrom を使用してパケットを受信しており、sk_buff にアクセスできません。私は sll_ifindex にアクセスできるので、VLAN を含め、パケットが入ってきたインターフェイス (eth0.2 など) を知ることができますが、すべてのパケットが特別なギガビット ポートに入っているため、これは必要なものではありません。元のポートが必要です。
sockaddr から sk_buff までさかのぼる方法はありますか? 途中でパケットがコピーされているため、その前のバイトにアクセスできなくなります。少なくとも今は skbuff にもアクセスできません。この情報の別のキューを維持し、別のチャネルまたは何かを介してそれを通信するなど、不安定なものを思い付くことができましたが、それは問題があるようです.
アイデア?