2199453_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2199453_ja-JP

2199453_ja-JP

SJA1110 による IGMP スヌーピング

こんにちは、

私は S32G と SJA1110 で bsp43 を実行しており、IGMP スヌーピングを有効にしてマルチキャスト ストリームを動的にルーティングしようとしています。IGMP に関連するいくつかの固有の問題を特定しましたが、解決方法がわかりません。IGMP スヌーピングを無効にすると、マルチキャスト パケットがスイッチに溢れるようになることを確認しました。SO、IGMP スヌーピング オプションが何かを実行しているということです... ただし、これは予期された動作ではありません。

  1. マルチキャストトラフィックは常に、列挙された最も低いアクティブポートに転送されます。
    1. ポート 3 のノードが IGMP 経由のトラフィックを要求し、ポート 4 から出力されるストリームは、ポート 1 がトラフィックを要求したかのように、ポート 1 から出力されます (そのリンクがアクティブな場合)。ポート 1 のリンクがアクティブでない場合、そのリンクがアクティブであればトラフィックはポート 2 に転送されます。
    2. mdbを使用してトラフィックを手動でルーティングすることはできますが、IGMPスヌーピングがこれを自動的に管理することを期待しています。
  2. マルチキャストクエリーを有効にしても、スイッチポートからメンバーシップクエリーが出力されない
    1. DSAブリッジインターフェースにはIGMPクエリがありますが、スイッチにコネクテッドされた他のリンクにはIGMPクエリが表示されません。
    2. ブリッジ ポートからの IGMP クエリをトラップし、スイッチ ポートにリダイレクトするための tc ルールを設定する必要があるのではないかと思います。

これが Linux 構成の問題なのか、スイッチ ハードウェアの制限なのかはわかりません。

ご提案があればよろしくお願いします。

Re: IGMP Snooping with SJA1110

NXP は私のサポートチケットに応答しておらず、この投稿にも応答がないため、ここで私が見つけた内容を文書化します。

BSP43 について。SJA1105 DSA ドライバーは、ポートがブリッジによってリンクされている場合、SJA1110 の IGMP スヌーピングをサポートしていないようです。ドライバーのセットアップ中に、sja1110 ポートはスタンドアロン モードでセットアップされ、 dsa `tag_8021q` によってスイッチの各ポートに異なる VLAN ルックアップ ルールがインストールされます。vlan-lookup ルールは、入力パケットに `tag_8021q` イーサタイプ `0xDADB` と、ポート ID を含むメタデータを持つ VLAN をタグ付けします。これにより、ホスト プロセッサがパケットがどのポートから受信されたかを認識し、特定のポートでパケットを出力するためのメカニズムが作成されます。ポートがブリッジでリンクされている場合、 `tag_8021q` はポートごとの VLAN ルックアップ ルールを、ブリッジに関連付けられた単一のルールに置き換えます。ホスト プロセッサは、パケットがどのポートから発信されたのかを判断できなくなり、特定のポートにパケットを送信できなくなります。ここで説明されているように、`vlan-filtering` を使用するとこのメカニズムも壊れると思います (sja1110 は `dsa_tag_8021q_bridge_join` を呼び出すため、明らかに 2 番目のタイプです)。

ホスト プロセッサによって作成された IGMP クエリ パケットには、引き続きポートごとの VLAN がタグ付けされますが、VLAN ルックアップにはブリッジのルールのみが含まれるため、IGMP クエリ パケットはボイドに送信されます。それらはゴミ箱に捨てられます。スイッチからは出力されません。この動作は、次の行を変更することで変更できます。


    if (!dp->bridge) {
        tx_vid = dsa_tag_8021q_standalone_vid(dp);
    } else {
        tx_vid = dsa_tag_8021q_bridge_vid(dp->bridge->num);
    }


IGMP クエリー メッセージはスイッチから出力されるようになりましたが、これだけでは IGMP スヌーピングは有効になりません。これは、`tag_8021q` がまだブリッジ全体であり、ポート固有ではないため、ホスト プロセッサが IGMP 参加/離脱がどのポートで受信されたかを認識しないためです。IGMP スヌーピングを有効にするには、スイッチはパケットをトラップし、ネイティブ sja1110 タグ (イーサタイプ 0xdadc) を適用する必要があります。スイッチは 2 つの `mac_fltres` を通じてパケットをトラップし、タグを追加できますが、ドライバーは既にこれらを PTP と STP に使用しています。ユーザー空間ユーティリティ `tc` はパケットをトラップするように設定できますが、これはトラップされたパケットにタグを追加しない仮想リンクを通じて実装されます。最後の 2 つのオプションは、L2 ルックアップまたはディープ パケット インスペクションを使用することです。l2-lookup を使用すると、トラップ ビットを設定して宛先 MAC アドレス 01:00:5E:00:00:16 をトラップすることにより、IGMPv3 を有効にすることができます。これは、*.0.0.22 で終わるマルチキャスト IP グループにも一致するため、適切な解決策ではありません。ブリッジを使用するときに IGMP スヌーピングを有効にする唯一の方法は、ディープ パケット インスペクションのようです。どのようなトラッピング メカニズムが使用されても、このコミットは必要です。そうしないと、sja1110 タグが、やはりブリッジのみを表す `tag_8021q` によって上書きされてしまいます。

Re: IGMP Snooping with SJA1110

上記で提案した解決策では、ブリッジ上の各 DSA ポートに対して IGMP クエリが送信されることに注意してください。VLAN ルックアップ ルールを再インストールして、パケットを正しいポートから出力することも解決策になりますが、ポート 0 はブリッジによってインストールされた VLAN ルックアップと競合する可能性があるため、これも適切な解決策ではありません。IGMP クエリを過剰に送信しても、トラフィックの増加以外には副作用はないようです。

Tags (1)
No ratings
Version history
Last update:
‎02-05-2026 03:24 AM
Updated by: