ルーターには 60 個の tun デバイスがあり、それぞれが有効な ipv4 アドレスで構成されており、これらのデバイスに基づいてそれぞれ 60 個の raw ソケットがあります。そして、これらのソケットはすべてマルチキャスト グループに参加します。そして、これらのソケットにマルチキャスト パケットを送信し続ける別のデバイスがあります。
これらのインターフェイスを無効にしてから再度有効にすると、一部のインターフェイスが他のインターフェイスに属するマルチキャスト パケットを受信します。
インターフェイスを無効にするということは、close() ソケットを意味します。
インターフェイスを有効にするということは、SO_BINDTODEVICE、IP_ADD_MEMBERSHIP、IP_MULTICAST_IF、IP_MULTICAST_LOOP などの socket() および setsockopt() を使用してソケットを作成することを意味します。
具体的には、interface1,2,3..,60 を無効にしてから interface1,2,3..60 を有効にすると、インターフェイスを有効にした後、インターフェイス N の raw ソケットから受信した最初のパケットが実際にはインターフェイス (N-1) に属する場合があります。 .
インターフェイス N のパケットを tcpdump すると、すべてのパケットは正しいのですが、raw ソケットの recv() が他のインターフェイスに属するパケットを受信します。
誰かがこれについて何か考えがありますか?ありがとう!