NG_VJC(4) | FreeBSD Kernel Interfaces Manual | NG_VJC(4) |
名称
ng_vjc — Van Jacobson 圧縮 netgraph ノードタイプ書式
#include < sys/types.h>#include < netinet/in.h>
#include < netinet/in_systm.h>
#include < netinet/ip.h>
#include < net/slcompress.h>
#include < netgraph/ng_vjc.h>
解説
vjc ノードタイプは、Van Jacobson 圧縮を実行します。それは、TCP パケットヘッダを圧縮するのに PPP、SLIP、および他のポイントツーポイント IP 接続で使用されます ip フックは、ノードの展開された側面を表し、いっぽう vjcomp, vjuncomp, vjip フックは、ノードの圧縮された側面を表します。 ip で受信されたパケットは、必要に応じて圧縮されるかまたは通過されます。他の 3 つのフックで受信されたパケットは、必要に応じて展開されます。このノードは、どちらかの方向への“常に通過”モードもサポートします。Van Jacobson 圧縮は、TCP パケットにだけ適用されます。“通常の” (すなわち、よくある例) TCP パケットだけが実際に圧縮されます。これらは、 vjcomp フックでの出力です。他の TCP パケットは、状態機械を介して実行されますが、圧縮されません。これらは、 vjuncomp フック上に現れます。他の非 TCP IP パケットは、変更せずに vjip に転送されます。
ng_ppp(4) ノードに接続するとき、 ip, vjuncomp, vjcomp, vjip フックは、それぞれ ng_ppp(4) ノードの vjc_ip, vjc_vjcomp, vjc_vjuncomp, vjc_ip に接続されるべきです。
フック
このノードタイプは、次のフックをサポートします:- ip
- 上流 (展開される) の IP パケット。
- vjcomp
- 下流の圧縮された TCP パケット。
- vjuncomp
- 下流の展開された TCP パケット。
- vjip
- 下流の展開された IP パケット。
コントロールメッセージ
このノードタイプは、次を加えて、一般的なコントロールメッセージをサポートします:- NGM_VJC_SET_CONFIG ( setconfig)
-
供給された
struct ngm_vjc_config 引数に従って、このコマンドは、圧縮状態をリセットして、それを設定します。この構造体は、次のフィールドを含んでいます:
struct ngm_vjc_config { u_char enableComp; /* 圧縮を有効 */ u_char enableDecomp; /* 非圧縮を有効 */ u_char maxChannel; /* 発信チャネルの数 - 1 */ u_char compressCID; /* 圧縮発信 CID は OK */ };
enableComp が 0 に設定されるとき、 ip フックで受信されたすべてのパケットは、 vjip フックに変更せずに転送されます。同様に、 enableDecomp が 0 に設定されるとき、 vjip フックで受信されたすべてのパケットは、 ip フックに変更せずに転送され、パケットは、 vjcomp と vjuncomp フックで受け付けられません。ノードが最初に作成されるとき、圧縮と非圧縮の両方は無効にされ、そのため、ノードは、“通過”モードという双方向のモードで動作します。
圧縮を有効にするとき、 maxChannel は、発信圧縮チャネル数 - 1 が設定されるべきで、 3 から 15 の間の値です。 compressCID フィールドは、発信圧縮 TCP パケットのための CID ヘッダフィールドを圧縮するのが OK であるかどうかを示します。 (a) 発信フレームが失われることが可能性でないか、 (b) 失われたフレームが確実に検出され、ピア (相手側) の非圧縮エンジン (下記の NGM_VJC_RECV_ERROR を参照) にすぐに報告できる、かのいずれかでないなら、この値は、0 であるべきです。
- NGM_VJC_GET_STATE ( getstate)
- このコマンドは、 < net/slcompress.h> で定義される struct slcompress 構造体によって表現されるノードの現在の状態を返します。
- NGM_VJC_CLR_STATS ( clrstats)
- ノード統計カウンタをクリアします。統計は、また、 enableComp か enableDecomp フィールドが NGM_VJC_SET_CONFIG コントロールメッセージによって 0 から 1 に変更されるときはいつもクリアされます。
- NGM_VJC_RECV_ERROR ( recverror)
- ピアが CID ヘッダフィールド圧縮を有効にさせると、このメッセージは、悪いチェックサムかまたはなんらかの別の理由のために受信フレームが失われたことを検出した後すぐにローカル vjc ノードに送信しなければなりません。これを失敗することは、間違った TCP ストリームデータとなります。
シャットダウン
このノードは、 NGM_SHUTDOWN コントロールメッセージを受け取るか、すべてのフックが切断されている時、シャットダウンします。関連項目
netgraph(4), ng_iface(4), ng_ppp(4), ngctl(8) V. Jacobson, Compressing TCP/IP Headers, RFC 1144. G. McGregor, The PPP Internet Control Protocol (IPCP), RFC 1332.歴史
ng_vjc ノードタイプは、 FreeBSD 4.0 で実装されました。作者
<archie@FreeBSD.org>バグ
Van Jacobson 圧縮のカーネルの実装における初期化ルーチンがすぐに圧縮と非圧縮の両方を初期化するので、このノードは、圧縮と非圧縮が別々の操作で有効にされることを許されません。片方が既に有効にされているとき、1 つを可能にするために、最初に両方は、無効にされて、次に両方を有効にしなければなりません。これは、もちろんノード状態をリセットします。この制限は、後のバージョンで撤廃されるかもしれません。ローダブルカーネルモジュールとして構築されるとき、このモジュールは、ファイル net/slcompress.c を含んでいます。 net/slcompress.c がカーネルで既にカーネル中に存在しているなら、モジュールをロードすることは失敗するべきですが、現在は、失敗しないで、ファイルの複製品には干渉しません。しかしながら、これは、将来変更されるかもしれません。
January 19, 1999 | FreeBSD |