LDI には、デバイス階層化情報のスナップショットを報告する libdevinfo(3LIB) インタフェースが用意されています。デバイス階層化は、システム内の 1 つのデバイスが、システム内の別のデバイスのコンシューマであるときに発生します。デバイス階層化情報が報告されるのは、コンシューマとターゲットの両方が、スナップショット内に含まれる 1 つのデバイスノードにバインドされている場合のみです。
デバイス階層化情報は、libdevinfo(3LIB) インタフェースによって有向グラフとして報告されます。i ノードは、グラフの頂点を表し、デバイスノードにバインドされた抽象概念です。libdevinfo(3LIB) インタフェースを使用すると、ノードの名前やデバイス番号などの i ノードのプロパティーにアクセスできます。
グラフのエッジはリンクによって表されます。リンクには、デバイスコンシューマを表すソース i ノードがあります。また、リンクにはターゲットデバイスを表すターゲット i ノードがあります。
次に、libdevinfo(3LIB) デバイス階層化情報のインタフェースについて説明します。
デバイス階層化情報を得られるようにするスナップショットフラグです。
2 つのエンドポイント間の有向リンクです。各エンドポイントは 1 つの di_lnode_t です。不透明な構造体です。
リンクのエンドポイントです。不透明な構造体です。di_lnode_t は di_node_t にバインドされます。
1 つのデバイスノードを表します。不透明な構造体です。di_node_t は di_lnode_t にバインドされるとは限りません。
スナップショット内のすべてのリンクを調べます。
スナップショット内のすべての i ノードを調べます。
指定された di_node_t ノードがソースとターゲットのいずれかである次のリンクへのハンドルを取得します。
指定された di_lnode_t i ノードがソースとターゲットのいずれかである次のリンクへのハンドルを取得します。
di_link_t リンクの指定されたエンドポイントに対応する i ノードを取得します。
リンクの spectype を取得します。spectype は、ターゲットデバイスがアクセスされる方法を示します。ターゲットデバイスはターゲット i ノードによって表されます。
指定の di_node_t デバイスノードに関連付けられている、指定された di_lnode_t i ノードの次のオカレンスへのハンドルを取得します。
指定された i ノードに関連付けられている名前を取得します。
指定された i ノードに関連付けられているデバイスノードへのハンドルを取得します。
指定された i ノードに関連付けられているデバイスノードのデバイス番号を取得します。
LDI によって返されるデバイス階層化情報は非常に複雑な場合があります。そのため LDI には、デバイスツリーやデバイスの使用状態のグラフをたどる助けになるインタフェースが用意されています。これらのインタフェースによって、デバイスツリースナップショットのコンシューマはカスタムデータポインタを、スナップショット内の異なる構造に関連付けることができます。たとえば、アプリケーションは、i ノードをたどるときに、各 i ノードに関連付けられているカスタムポインタを更新し、参照済みの i ノードにマークを付けることができます。
次に、libdevinfo (3LIB) ノードおよびリンクのマーク付けインタフェースについて説明します。
指定されたデータを指定された i ノードと関連付けます。この関連付けによって、スナップショット内の i ノードをたどることができます。
di_lnode_private_set(3DEVINFO) への呼び出しを通して、i ノードに関連付けられていたデータへのポインタを取得します。
指定されたデータを指定されたリンクと関連付けます。この関連付けによって、スナップショット内のリンクをたどることができます。
di_link_private_set(3DEVINFO) への呼び出しを通して、リンクに関連付けられていたデータへのポインタを取得します。