udev その1の続き。
増え続ける70-persistent-net.rules君を止める為に、
udevのソースを解析しています。
最初に犯人を探しに行くのは無謀な為、まずは末端から攻めます。
私が予想しているudevの動作は、
1.device検出時にdeviceとrulesの情報を比較
2.どれも一致しない場合は新規作成
3.最終的に一致したものにrename
renameしている部分さえ見つければ、上に追っていくだけで、
全て明らかになるはずです。
その場所はすぐに見つかりました。
info(event->udev, "renamed netif to '%s'\n", event->name);
こんな文があったので、間違いないでしょう。
udev_event.cのudev_event_execute_rules()の中で発見しました。
どうやらsysnameを取ってきて比較をし、不一致の場合は、
eventとして渡ってきた方のsysnameに上書きするようです。
sysnameってなんぞや?というのを追ってみると、
struct udev_deviceのメンバで、udev_device_new_from_subsystem_sysname()
で設定されてるようです。
/class/[subsystem]/[sysname]
の形っぽいので、きっと”eth0”とかが入ってるのでしょう。
あ・・・・あれ?
ってことは、比較してる時点で既にeth2とかeth3とか新しい名前が出来あがってるわけで、
新しいデバイス認識してrules更新してそうなところは全然別の場所?
・・・ってことになりますよね。
それに、/class/…の形って/sys下に出来るのやつですよね。
あれって各々ドライバで、class_create()で作ってるやつと記憶してますが、
どーやって動いてるのでしょうねぇ・・・。
sysfsの動きも完璧じゃないので少々混乱中です。
しょうがない、createと付くものを片っ端から洗い出して、犯人探ししますかねぇ。
足を使って捜査、古い刑事みたいだw
周りに詳しい人いないのがなぁ・・・。
>> その2.5
0 件のコメント:
コメントを投稿