RTENTRY(9) | FreeBSD Kernel Developer's Manual | RTENTRY(9) |
名称
rtentry — カーネル経路表中のエントリの構造体解説
カーネルは、経路の中央のテーブルからエントリを格納し検索して取り出すことができるすべてのプロトコルに共通のメカニズムを提供します。このメカニズムの部分も、 route(4) 疑似プロトコルファミリのソケットを用いてユーザレベルプロセスと情報をやりとりするために使用されます。 < net/route.h> ヘッダファイルは、この機能の中で使用される構造体と明白な定数を定義します。経路の基礎的な構造体は、次のフィールドを含んでいる、 struct rtentry によって定義されます。
- struct radix_node rt_nodes[2];
- 基数ツリールーチンによって使用される接着剤です。これらのメンバは、さらにそれらの下部構造体に経路が作られた時使用されるキー (つまり目的アドレス) とマスクを含んでいます。 rt_key( rt) と rt_mask( rt) マクロは、 struct rtentry * で与えられた ( struct sockaddr * の形式の) この情報を抽出するために使用することができます。
- struct sockaddr *rt_gateway;
- それ自体で (いくつかのプロトコルは、リンクレイヤ (層) アドレスをここに置きます) 目的地を表示できる、または、 ( RTF_GATEWAY フラグが設定される場合) その目的地へ行く途中である中間の停止できるか、いずれかの経路の“目標”です。
- int rt_flags;
- 下記を参照してください。
- int rt_refcnt;
- 経路エントリは、数えられた参照です。このフィールドは、外部 (基数ツリーへの) 参照の数を示します。
- struct ifnet *rt_ifp;
- struct ifaddr *rt_ifa;
- これらの 2 つのフィールドは、経路の検索によってもたらされた質問の、言ってみれば、“答え”を表わします。すなわち、それらは、目的地またはこの経路が表わす目的地の設定へパケットを送信するのに使用されるインタフェースとインタフェースアドレスを指定します。
- struct rt_metrics_lite rt_rmx;
- 下記を参照してください。 RTF_UP フラグが存在しない場合、最後の参照が落ちる時、 rtfree() 機能は、基数ツリーから経路を削除します。
- struct rtentry *rt_gwroute;
- このメンバは、その目的地が rt_gateway である経路への参照です。それは、 RTF_GATEWAY 経路用に単に使用されます。
- struct mtx rt_mtx;
- この経路制御エントリをロックするミューテックス (mutex)。
次のフラグビットが定義されます。
- RTF_UP
- 経路は、削除されません。
- RTF_GATEWAY
- 最終の受取手ではなく中間の目的地への経路ポイントです。 rt_gateway と rt_gwroute フィールドがその目的地を指定します。
- RTF_HOST
- これは、ホスト経路です。
- RTF_REJECT
- 目的地は、現在到達不可能です。これは、出力ルーチンからの EHOSTUNREACH エラーで終るべきです。
- RTF_DYNAMIC
- この経路は、 rtredirect() によってダイナミックに作られました。
- RTF_MODIFIED
- この経路は、 rtredirect() によって修正されました。
- RTF_DONE
- リクエストが実行されたことを示す、 route(4) プロトコルの中でのみ使用します。
- RTF_XRESOLVE
- この経路が検索の結果として返される時、外部プロセスがこの経路に対する転換を実行することを要求する route(4) インタフェースに関する報告書を送ります。
- RTF_STATIC
- この経路は、 route(8) コマンドを使って手動で加えられたことを示します。
- RTF_BLACKHOLE
- この経路経由で送信された出力が廃棄されることを要求します。
- RTF_PROTO1
- RTF_PROTO2
- RTF_PROTO3
- プロトコルに特有です。
- RTF_PRCLONING
- このフラグは、時代遅れで、機能によって単に無視されます。
- RTF_PINNED
- (ルーティングプロトコルによって修正されないルートを示すための将来の使用のために予約されています。)
- RTF_LOCAL
- この経路の目的地がこのシステムに属するように設定されたアドレスであることを示します。
- RTF_BROADCAST
- 目的地がブロードキャストアドレスであることを示します。
- RTF_MULTICAST
- 目的地がマルチキャストアドレスであることを示します。
すべての経路は、 struct rt_metrics_lite に格納される 1 組のメトリクスと関連しています。メトリクスは、 route(4) API を通して経路制御コントロールメッセージで渡された struct rt_metrics に供給されます。現在、 rmx_mtu, rmx_expire と rmx_pksent メトリクスだけが struct rt_metrics_lite で使用されます。他のすべてのものは、無視されます。
次のメトリクスは、 struct rt_metrics によって定義されます:
- u_long rmx_locks;
- カーネルがダイナミックに修正することが許されないどのメトリクスか示すフラグビットです。
- u_long rmx_mtu;
- このパス用の MTU。
- u_long rmx_hopcount;
- この目的地へのパス上の中間のシステムの数。
- u_long rmx_expire;
- この経路が終了するべき ( time(3) 形式の) 時間、または、それが決して終了してはならない場合、0 です。一旦それらが終了すれば経路が実際に削除されることを保証するのは個々のプロトコルの責任です。
- u_long rmx_recvpipe;
- 通常、目的地 から このシステム まで のパスのためのバンド (帯域) 幅ディレイ (遅れ) 結果です。実際には、この値は、受信バッファ (したがって TCP のようなスライディングウィンドウプロトコル中のウィンドウ) のサイズを設定するために使用されます。
- u_long rmx_sendpipe;
- 前述と同様ですが、反対の方向です。
- u_long rmx_ssthresh;
- 遅いスタートのしきい値は、 TCP 雑踏回避の中で使用します。
- u_long rmx_rtt;
- 毎秒 RMX_RTTUNIT のユニットでこの目的地への往復の時間です。
- u_long rmx_rttvar;
- 毎秒 RMX_RTTUNIT のユニットでこの目的地への円形の往復の時間の平均偏差です。
- u_long rmx_pksent;
- この経路経由で成功して送信されたパケットの数です。
- u_long rmx_filler[4];
- プロトコルに特有の情報に利用可能な空き空間です。
歴史
rtentry 構造体は、 4.2BSD ではじめて登場しました。経路表と rt_metrics 構造体の基数ツリー表現は、 4.3BSD-Reno ではじめて登場しました。作者
このマニュアルページは、 によって書かれました。バグ
このインタフェースには、多くの歴史的な遺物が残っています。 rt_gateway と rmx_filler フィールドは、より良く指定できるかもしれません。December 11, 2008 | FreeBSD |