イーサネット スイッチ チップのポートが CPU のネットワーク コントローラに接続されているネットワーク デバイスがあります。スイッチ チップは、入力ポートなどの情報を含む特別なヘッダーを (MAC ヘッダーの前に) 追加して、他のポートから CPU ポートにパケットを転送します。
ネットワークコントローラードライバーでパケットを受信するときにヘッダーを削除できるため、Linux ネットワークスタックは通常の方法でスイッチと通信できます。ただし、私の目標は、特別なヘッダーの一部の情報をユーザー空間のレイヤー 2 制御プロトコル スイートに渡すことです。
私の場合、レイヤ 2 制御プロトコルは通常、生のソケットを使用して制御フレームを受信します。たとえば、スパニング ツリー プロトコルは、パケットがどのスイッチ ポートから来たかを識別できなければなりません。
また、http、telnet サーバーなどのサービスは、同じネットワーク インターフェイスを使用できる必要があります。
そのような情報をドライバーからユーザー空間ネットワークサーバー/クライアントに配信するための Linux 組み込み手段はありますか? そうでない場合、これを実装するための提案はありますか?
単純な ioctl 呼び出しを実装して、読み取った最後のパケットのヘッダー情報についてドライバーに問い合わせることができました。recv()
ただし、デバイスがとの間の他のプロセスによって使用されていないという保証はありませんioctl()
。