EN JA
NG_VJC(4)
NG_VJC(4) FreeBSD Kernel Interfaces Manual NG_VJC(4)

名称

ng_vjcVan 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 フックに変更せずに転送され、パケットは、 vjcompvjuncomp フックで受け付けられません。ノードが最初に作成されるとき、圧縮と非圧縮の両方は無効にされ、そのため、ノードは、“通過”モードという双方向のモードで動作します。

圧縮を有効にするとき、 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)
ノード統計カウンタをクリアします。統計は、また、 enableCompenableDecomp フィールドが 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 Cobbs <archie@FreeBSD.org>

バグ

Van Jacobson 圧縮のカーネルの実装における初期化ルーチンがすぐに圧縮と非圧縮の両方を初期化するので、このノードは、圧縮と非圧縮が別々の操作で有効にされることを許されません。片方が既に有効にされているとき、1 つを可能にするために、最初に両方は、無効にされて、次に両方を有効にしなければなりません。これは、もちろんノード状態をリセットします。この制限は、後のバージョンで撤廃されるかもしれません。

ローダブルカーネルモジュールとして構築されるとき、このモジュールは、ファイル net/slcompress.c を含んでいます。 net/slcompress.c がカーネルで既にカーネル中に存在しているなら、モジュールをロードすることは失敗するべきですが、現在は、失敗しないで、ファイルの複製品には干渉しません。しかしながら、これは、将来変更されるかもしれません。

January 19, 1999 FreeBSD