EN JA
UNIFUNC(3)
UNIFUNC(3) FreeBSD Library Functions Manual UNIFUNC(3)

名称

libngatm, uni_decode, uni_decode_head, uni_decode_body, uni_decode_ie_hdr, uni_decode_ie_body, uni_encode, uni_encode_msg_hdr, uni_encode_ie, uni_encode_ie_hdr, uni_check_ie, uni_print_cref, uni_print_msghdr, uni_print, uni_print_ie, uni_initcx, uni_print_cxATM シグナルライブラリ - メッセージ操作関数

ライブラリ

Begemot ATM シグナルライブラリ (libngatm, -lngatm)

書式

#include < netnatm/msg/unistruct.h>
#include < netnatm/msg/unimsglib.h>

int
uni_decode( struct uni_msg *buf, struct uni_all *msg, struct unicx *cx);

int
uni_decode_head( struct uni_msg *buf, struct uni_all *msg, struct unicx *cx);

int
uni_decode_body( struct uni_msg *buf, struct uni_all *msg, struct unicx *cx);

int
uni_decode_ie_hdr( enum uni_ietype *type, struct uni_iehdr *hdr, struct uni_msg *buf, struct unicx *cx, u_int *ielen);

int
uni_decode_ie_body( enum uni_ietype type, union uni_ieall *ie, struct uni_msg *buf, u_int ielen, struct unicx *cx);

int
uni_encode( struct uni_msg *buf, struct uni_all *msg, struct unicx *cx);

int
uni_encode_msg_hdr( struct uni_msg *buf, struct uni_msghdr *hdr, enum uni_msgtype type, struct unicx *cx, int *mlen);

int
uni_encode_ie( enum uni_ietype type, struct uni_msg *buf, union uni_ieall *ie, struct unicx *cx);

int
uni_encode_ie_hdr( struct uni_msg *buf, enum uni_ietype type, struct uni_iehdr *hdr, u_int len, struct unicx *cx);

int
uni_check_ie( enum uni_ietype type, union uni_ieall *ie, struct unicx *cx);

void
uni_print_cref( char *buf, size_t buflen, struct uni_cref *cref, struct unicx *cx);

void
uni_print_msghdr( char *buf, size_t buflen, struct uni_msghdr *hdr, struct unicx *cx);

void
uni_print( char *buf, size_t buflen, struct uni_all *msg, struct unicx *cx);

void
uni_print_ie( char *buf, size_t buflen, enum uni_ietype type, union uni_ieall *ie, struct unicx *cx);

void
uni_initcx( struct unicx *cx);

void
uni_print_cx( char *buf, size_t buflen, struct unicx *cx);

解説

libngatm ライブラリは、UNI 4.0 メッセージを操作します。それぞれの情報要素とメッセージタイプのために、ヘッダファイルは構造体の定義を含んでいます。さらに、多くの補助の構造体といくつかのライブラリ関数のためのグローバルなコンテキスト構造体があります。この文書はメッセージを操作するために使用される関数について記述しています。

デコード (復号化)

デコードは、UNI メッセージまたは IE を含むオクテットのストリーム取り、それを解析して、メッセージまたは IE 構造体に書き込むプロセスです。

関数 uni_decode() はメッセージバッファを取り、UNI メッセージとしてそれを解釈して、 msg によって指された構造体に書き込みます。また、それは、コンテキスト引数を取り、コンテキストにエラー列挙を書き込みます。メッセージヘッダのデコードでエラーがあれば -1 を返し、メッセージ本体のデコードでエラーがあれば -2 を返します。関数は成功すれば 0 を返します。

メッセージのデコードのプロセスは uni_decode_head() と uni_decode_body() を呼び出すことによって分けることができます。これらの関数の 1 つ目はメッセージヘッダだけをデコードし、2 つ目の関数は情報要素だけをデコードします。 uni_decode_head() はメッセージヘッダをデコードすることができるなら 0 を返し、メッセージをデコードすることができない (悪いプロトコル識別子、悪い長さ、または呼び出し参照が壊れている) なら -1 を返します。 uni_decode_body() は成功すれば 0 を返し、未知のメッセージタイプか、または何か IE にエラーがあれば -1 を返します。

関数 uni_decode_ie_hdr() は次の情報要素ヘッダをデコードします。それは、 typeielen によって指された変数に IE タイプとその長さを返して、 hdr によって指された構造体にデコードされたヘッダを格納します。関数は成功すれば 0 を返し、完全な IE ヘッダのためのバッファに十分なバイトが残されていないなら 0 を返します。

関数 uni_decode_ie_body() は情報要素の本体をデコードします。それはメッセージ buf、情報の要素タイプ type と長さ ielen でバッファに渡されます。 IE は ie によって指された共用体に格納されます。関数はエラーの場合 -1 を、成功すれば 0 を返します。どんな場合でも、最も的確なバイト数は入力バッファから消費されます。

エンコード (コード化)

エンコードはメッセージまたは IE 構造体を取り、それからオクテットのストリームを発生するプロセスです。

関数 uni_encode() は、UNI メッセージをエンコードします。それはメッセージタイプが範囲外であるなら -1 を返し、メッセージがタイプが未知なら -3 を返します。メッセージタイプのためのエンコード関数はそれら自体のエラーコードを返すことができます。関数は成功すれば 0 を返します。

関数 uni_encode_msg_hdr() はメッセージヘッダをエンコードします。 mlen によって指された変数は、バイトストリームの始めからメッセージの長さフィールドのオフセットに設定されます。すべての IE がエンコードされた後にだけメッセージ本体の長さが知られているので、これが必要です。そして、長さはこの場所に挿入されなければなりません。関数は呼び出し参照が悪かったなら 1 を返し、成功すれば 0 を返します。

関数 uni_encode_ie() は、1 つの情報要素をエンコードします。関数は成功すれば 0 を返し、エラーの場合 -1 を返します。関数 uni_encode_ie_hdr() は、4 バイトの IE ヘッダをエンコードします。引数 len は本当の長さではなく、情報要素の最大の予想される長さです。関数は本当の長さのフィールドに 0 を挿入します。これは、IE の内容をエンコードした後に、呼び出し側によって修正されなければなりません。関数は、空の IE がエンコードされるなら、 (この場合、長さのフィールドは、4 に設定され) -1 を返し、そうでなければ 0 を返します。

チェック

情報要素の一貫性をチェックをするたくさんの関数が存在しています。これらの関数は、IE 相互の一貫性をチェックしませんが、それ自体によって各 IE をチェックすることに注意してください。

関数 uni_check_ie() は一貫性がないかどうか情報要素をチェックします。それは、IE が OK と思われるなら 0 を返し、そうでなければ -1 を返します。

印刷

多くの機能は人間に解読可能な形式でデコードされたメッセージと IE を印刷 (表示) するために使用することができます。これは主にデバッグ目的のためです。ライブラリコンテキストのいくつかのフィールドは、どのように印刷するかを制御するために使用されます ( unistruct(3) 参照)。それぞれの関数は bufbuflen 引数を取ります。 buf によって指されたバッファ中で発生される文字列はヌル文字で終了していることが保証されます。

関数 uni_print_cref() は、特別な呼び出し参照を考慮に入れる呼び出し参照を書式化します。関数 uni_print_msg_hdr() はメッセージヘッダを書式化します。関数 uni_print() と uni_print_ie() はメッセージと情報要素を印刷 (表示) します。

コンテキスト

コンテキスト操作のための 2 つの関数があります。 uni_initcx() はデフォルト値でコンテキスト初期化し、 uni_print_cx() は与えられたバッファにコンテキストを印刷 (出力) します。

関連項目

libngatm(3)

規格

この実装は、いくつかの制限を除いて、適切な ITU-T 推薦と ATM Forum 規格に適合しています (設定セクションを参照してください)。

作者

Hartmut Brandt <harti@FreeBSD.org>
June 14, 2005 FreeBSD