udevルールセットに名前を割り当てる前にネットワークアダプタの状態をリセットする方法は?

udevルールセットに名前を割り当てる前にネットワークアダプタの状態をリセットする方法は?

Debian 6.1.0-20 カーネルアップデート後の USB3 ネットワークカードインターフェイスの問題のパート 4。

ここで他の投稿をチェックしてください:

抽象的な: カーネル 6.1.0-20 を使用した最近の Debian アップデートにより、usb-lan nics EEPROM に保存された MAC アドレス認識が中断されました。ATTR{住所}(macアドレスに基づいてインターフェース名を変更する)は機能しなくなりました。

私が今この記事を書いている理由:

  • 使用ATTRS{シリーズ}うまくいきますが、私が持っている6つのアダプタのうち3つが同じ「シリアル」属性を共有するので、どちらがどれであるかを知る方法はありません。
  • 私はUSBを使ってみました。ATTRS{バス番号}そしてATTRS{devnum}しかし、残りの3つのインタフェースを具体的に識別するために、これらの値は、主AC電流が除去され、再投入されるにつれて、時間の経過とともに不安定で変化するようです。

したがって、上記の解決策のどれも実際に最終的な問題を解決しません。

しかし、以下を使用してethインターフェースを削除して開くと(または単に開くと)そうです。

ip link set dev eth0 down
ip link set dev eth0 up

eth0(別名USB3 LANアダプタ)は、EEPROMに保存されている正しいMACアドレスを再読み込みします。

このとき私の唯一の考えは次のとおりです。

  • すべてのインターフェイスを削除または開いて正しいMACアドレスを取得し、udevにルールを再適用させることはできますか?それとも起動時に一度だけ発生しますか?可能であれば、ethを0から10に削除してからudevを再呼び出しして、インターフェイスの名前を変更できるスクリプトを書くのに役立ちますか?

または...

  • インターフェイスが元のMACアドレスを取り戻したときにudevを呼び出す前に、ETHを上下にフラッシュできます。この場合、udevは操作を完了する必要があります。

前回@ABが提案したRUN+=ソリューションは関連していますか?

答え1

説明する

OPのアイデアに基づいて現在の状態を修正するためにウデブ規制:

  • 以下の条件がすべて満たされている場合のみ:

    • 次へ追加
    • インターネット機器
    • ドライバーを含むax88179_178a
    • 任意のMACアドレスで生成(addr_assign_type=1
  • する:

    • インターフェイスをUPに設定します。これにより、ドライバは永続MACアドレス属性を取得できます。

    • もう一度DOWNに設定します。 (新しく追加されたインターフェイスの予想状態です。)

    • これで、インターフェイスが永続的なMACアドレス()を取得したことが確認されると、addr_assign_type=0インターフェイスの追加が再びトリガされます。

      ...したがって、インターフェイス名を適切に変更して新しいラウンドをトリガーします。 (例:通常、USBネットワークインタフェースは、特に指定されていない場合、MACアドレスに基づいて名前が変更されますenx...。)

ルールと有効化

優先順位が十分に低いルールを作成します(私は40を選択しました)。

/etc/udev/rules.d/40-local-net-ax88179_178a.rules:

ACTION=="add", SUBSYSTEM=="net", ATTR{addr_assign_type}=="1", DRIVERS=="ax88179_178a", \
  RUN="/bin/ip link set %k up", RUN+="/bin/ip link set %k down", \
  RUN+="/bin/udevadm trigger -s net -a addr_assign_type=0 -p INTERFACE=%k -c add"

それから最初にのみ(重い効果から最も軽い効果まで):

  • 再起動

  • または再起動udev

    systemctl restart udev
    
    • USBデバイスを取り外して再接続します。

    • またはドライバを再ロードしてください。

      rmmod ax88179_178a
      modprobe ax88179_178a
      
    • または、変更が必要なインターフェイスでのみ新しいルールを人為的にトリガします。

      udevadm trigger -v -s net -p ID_NET_DRIVER=ax88179_178a -a addr_assign_type=1 -c add
      

      インターフェイスがすでに実行されている場合(たとえば、次の方法で)ネットワーク管理者)、MACアドレスの種類を確認する必要はありませんが、次のようにします。

      udevadm trigger -v -s net -p ID_NET_DRIVER=ax88179_178a -c add
      

補足説明

  • これにより、最終的にパッチの前と同じ数のデバイスリセットが発生し、これらのデバイスリセットが発生するのを防止する。つまり、インターフェイスが追加のUP(次にDOWN)を取得するため、これらのリセットがトリガされます。

    したがって、カーネルをどのようにコンパイルしてもパッチに戻す方が簡単です。この回避策は、SecureBootが必要で、生成されたカーネルモジュールに署名できない場合に便利です。

    実際の3番目のドライバパッチはまだ歓迎されます。

  • コマンドの実行

    • 最初のRUNコマンドを使用する必要があります。

    • NICを正しく処理するカーネルドライバとして実行した場合と同じ結果を得るには、2番目のRUNコマンドを使用する必要があります。つまり、DOWN状態でインターフェイスを追加することです。 1つのデバイスがリセットされるのを防ぐために、「オフ」に設定せずに「オン」にすることを検討できます(将来のネットワークツールでこの問題を解決できる場合)。

    • 最後のRUNコマンドはスキップできます。 MACアドレスにのみ依存する最新のネットワークツールでインターフェイスの名前を変更した場合は、このコマンドは不要です。

      • 次の理由でループは発生しません。

        • インターフェイスが永続MACアドレスを取得する場合:アクションなし
        • 一度アクティブなインターフェイスがシャットダウンしても永続的なMACアドレスを取得できない場合(つまり、回避策が機能しない場合)、操作は実行されずadd(永続的なMACアドレスデバイスに制限されるため)、デバイスはそのまま残ります。任意のMACアドレス
  • Debian 以外のディストリビューション

    • 存在することを確認する/bin/ipか、正しいパスに置き換えます(例/sbin/ip::)。

    • ユデフ(Devuan、Gentoo...):それはわかりませんが、ユデフ同じように振る舞うシステム~のウデブ内部でイベントがトリガーされる場合。 3番目の実行を変更する必要があるかもしれません。

  • 何らかの理由で追加条件を追加する必要がある場合、一致するバリエーション...S(親属性の場合)はすべて同じ親属性の一部である必要があるため、必要に応じて同様の効果に置き換えることDRIVERS=="ax88179_178a"ができます(特定のUSBデバイスが一致する場合)。ATTRS{product}=="AX88179"この属性) 他の親要素から代替の有用ATTRS{serial}な属性を取得する

  • 少なくともaddr_assign_type=3これは、MACアドレスが変更されたことを意味するようです(手動でまたは他の方法で、例えばインターフェイスをボンドスレーブに設定)。この規則はこれに触れません(触れてはいけません、会ってはいけません)。

  • 使用された文書

関連情報