Linux 上の C++ アプリケーションで「バスマスタリング」を介してネットワーク パケットにアクセスすることに興味があります。この全体的なトピックに関連していくつか質問があります。
1) 「バス マスタリング」対応のネットワーク カードがデータを書き込んでいるメモリ アドレス範囲と、これがカーネル空間かユーザー空間かをどのように知ることができますか?
2) #2 が「カーネル空間」の場合、ユーザー空間のメモリに書き込むようにカードを変更するにはどうすればよいですか?
3a) C++ からこの特定のユーザー空間メモリ領域にアクセスするにはどうすればよいですか?
3b) 1 つのアプリケーションから他のプロセスのメモリ領域へのアクセスを開始することはできず、明示的に「共有」されているメモリ領域にのみアクセスできることを理解しています。では、ネットワーク カードによって直接書き込まれたメモリ領域が明示的に共有されていることを確認するにはどうすればよいですか?
4) ネットワーク カードが「バス マスタリング」を実装しているかどうかは、どうすればわかりますか?
私はこの用語に出くわしましたPACKET_MMAP
- これは私が必要とするものでしょうか?