Linux カーネルでのマルチキャストに関して 1 つ疑問があります。マルチキャスト データが到着すると、Linux カーネルは MFC をチェックし、一致するエントリが見つからない場合、カーネルは制御メッセージ キャッシュ ミスとヘッダーをユーザー空間に提供します。私の質問は、データ パケットはどうなりますか? 故意に MFC 内にエントリを保持したくないが、転送情報を持つ他のテーブルがあり、そのテーブルを使用したい場合、どうすればよいでしょうか?
よろしく、バビン。
一致する MFC エントリがないデータ パケットが到着した場合、データ パケットはキューに入れられます。そのパケットに一致する MFC エントリが追加されるか、タイムアウト (10 秒) のいずれか早い方が経過するまで、そのキューに留まります。キュー自体には 10 エントリの制限があり、その制限に達すると、それ以上のパケットはキューに入れられなくなります。その場合、未解決のパケットはドロップされます。
Linux が複数の MFC テーブルを持つことをサポートしているとは思いません (ただし、間違っている可能性があります)。別の方法として、これらのマルチキャスト パケットを生のソケットで受信し、好きなインターフェイスに転送することで、これらのマルチキャスト パケットをユーザー空間にルーティングすることもできます。実際、IPv6 マルチキャスト ルーティング デーモンの多くは、Linux での IPv6 マルチキャスト サポートが成熟する前に、このような方法を使用していました。
以下のコマンドを使用して、関連するカーネルがマルチキャストサポートをコンパイルしたかどうかを確認できます
grep -i "multicast" /boot/config-2.6.32-358.6.1.el6.x86_64
/UE