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

名称

unimsg, unisve_check_addr, unisve_check_selector, unisve_check_blli_id2, unisve_check_blli_id3, unisve_check_bhli, unisve_check_sap, unisve_overlap_addr, unisve_overlap_selector, unisve_overlap_blli_id2, unisve_overlap_blli_id3, unisve_overlap_bhli, unisve_overlap_sap, unisve_is_catchall, unisve_matchATM シグナルライブラリ - ATM SAP 操作

ライブラリ

Begemot ATM シグナルライブラリ (libunimsg, -lunimsg)

書式

#include < uni4/unisap.h>

int
unisve_check_addr( const struct unisve_addr *sve);

int
unisve_check_selector( const struct unisve_selector *sve);

int
unisve_check_blli_id2( const struct unisve_blli_id2 *sve);

int
unisve_check_blli_id3( const struct unisve_blli_id3 *sve);

int
unisve_check_bhli( const struct unisve_bhli *sve);

int
unisve_check_sap( const struct uni_sap *sve);

int
unisve_overlap_addr( const struct unisve_addr *sve1, const struct unisve_addr *sve2);

int
unisve_overlap_selector( const struct unisve_selector *sve1, const struct unisve_selector *sve2);

int
unisve_overlap_blli_id2( const struct unisve_blli_id2 *sve1, const struct unisve_blli_id2 *sve2);

int
unisve_overlap_blli_id3( const struct unisve_blli_id3 *sve1, const struct unisve_blli_id3 *sve2);

int
unisve_overlap_bhli( const struct unisve_bhli *sve1, const struct unisve_bhli *sve2);

int
unisve_overlap_sap( const struct uni_sap *sap1, const struct uni_sap *sap2);

int
unisve_is_catchall( const struct uni_sap *sap);

int
unisve_match( const struct uni_sap *sap, const struct uni_ie_called *called, const struct uni_ie_blli *blli, const struct uni_ie_bhli *bhli);

解説

unimsg ライブラリは、ATM Forum ATM API Semantic Description で指定される Service Access Points (SAP) と SAP Vector Elements (SVE) を操作する関数を含んでいます。 SAP は、ATM 世界での TCP と UDP ポートの類似物です。通常 ATM のように、それらはそれらのインターネット同等物として 2、3 桁より複雑です。 ATM Forum 文書の説明を参照してください。

SAP は次のデータ構造体です:

struct uni_sap { 
 struct unisve_addr addr; 
 struct unisve_selector selector; 
 struct unisve_blli_id2 blli_id2; 
 struct unisve_blli_id3 blli_id3; 
 struct unisve_bhli bhli; 
};

それは、SETUP メッセージで異なった情報要素に適合する 5 つの要素から成ります。これらの各要素には、SVE が情報要素に適合される方法を定義するタグがあります。タグは次のうちの一つです。

UNISVE_ABSENT
情報要素は、SETUP メッセージを休まなければなりません。
UNISVE_PRESENT
情報要素は、SETUP メッセージが存在していなければならなくて、SVE に適合しなればなりません。
UNISVE_ANY
情報要素は、SETUP メッセージを休むかもしれないか、または任意の値があるかもしれません。

呼び出されたアドレスは次によって適合されます。

struct unisve_addr { 
 enum unisve_tag tag; 
 enum uni_addr_type type;/* アドレスのタイプ */ 
 enum uni_addr_plan plan;/* アドレスの計画 */ 
 uint32_t len; /* アドレスの長さ */ 
 u_char  addr[UNI_ADDR_MAXLEN]; 
};

ここで、 type はアドレスのタイプで、 plan はアドレスの計画です。 len はアドレス (セレクタバイトを数えない ATME アドレスのための) の長さで、 addr はアドレスそれ自体です。

ATME アドレスの場合には、セレクタバイトは次によって適合されます。

struct unisve_selector { 
 enum unisve_tag tag; 
 uint8_t  selector; 
};

ここで、 selector は、SETUP メッセージからアドレスを呼び出す ATME の 20 番目のバイトに適合しなければならないセレクタバイトです。

BLLI 情報要素は、2 つの SVE によって適合されています: 1 つはレイヤ (層) 2 オプションで、他の 1 つはレイヤ (層) 3 オプションです。レイヤ (層) 2 SVE は次の通りです:

struct unisve_blli_id2 { 
 enum unisve_tag tag; 
 uint8_t  proto:5;/* プロトコル */ 
 uint8_t  user:7; /* ユーザ特有のプロトコル */ 
};

ここで、 proto フィールドが UNI_BLLI_L2_USER を指定する場合にだけ user フィールドは適合されます。レイヤ (層) 3 SVE は次の通りです:

struct unisve_blli_id3 { 
 enum unisve_tag tag; 
 uint8_t  proto:5;/* L3 プロトコル */ 
 uint8_t  user:7; /* ユーザ特有のプロトコル */ 
 uint8_t  ipi:8; /* ISO/IEC TR 9557 IPI */ 
 uint32_t oui:24; /* IEEE 802.1 OUI */ 
 uint32_t pid:16; /* IEEE 802.1 PID */ 
 uint32_t noipi; /* フレーム毎の ISO/IEC TR 9557 */ 
};

どのように適合が起こるかの正確な規則については、ソースコードか ATM Forum 文書を参照してください。

最後に BHLI 情報要素は次に適合されます。

struct unisve_bhli { 
 enum unisve_tag tag; 
 enum uni_bhli type; /* 情報のタイプ */ 
 uint32_t len; /* 情報の長さ */ 
 uint8_t  info[8];/* 情報それ自体 */ 
};

SVE タイプごとに、SVE が正しく指定されているかどうかチェックする関数があります。関数 unisve_check_addr(), unisve_check_selector(), unisve_check_blli_id2(), unisve_check_blli_id3() と unisve_check_bhli() は次のエラーコードの 1 つを返します:

enum { 
 UNISVE_OK = 0, 
 UNISVE_ERROR_BAD_TAG, 
 UNISVE_ERROR_TYPE_PLAN_CONFLICT, 
 UNISVE_ERROR_ADDR_SEL_CONFLICT, 
 UNISVE_ERROR_ADDR_LEN, 
 UNISVE_ERROR_BAD_ADDR_TYPE, 
 UNISVE_ERROR_BAD_BHLI_TYPE, 
 UNISVE_ERROR_BAD_BHLI_LEN, 
};

UNISVE_OK コードは、SVE にはエラーがないことを意味します。関数 unisve_check_sap() は、SAP が完全かをチェックして、上記のコードの 1 つを返します。

エラーコードを人間が読める文字列にマップするための文字ポインタの配列を初期化するために使用することができる、文字列のコンマで分離されたリストを評価する UNISVE_ERRSTR 定義があります。

ATM Forum 文書は、SAP を重複する概念を定義します。これは、基本的に、着信 SETUP は、SETUP を受信するために、1 つ以上の SAP (と、1 つ以上のアプリケーション) に適合することを意味します。 SVE タイプごとに、2つの SVE が重なっているかどうかチェックする関数があり、 2 つの SAP が重なるかどうかチェックする関数があります。関数 unisve_overlap_addr(), unisve_overlap_selector(), unisve_overlap_blli_id2(), unisve_overlap_blli_id3(), unisve_overlap_bhli() と unisve_overlap_sap() は、SVE か SAP が重なっていれば 1 を返し、そうでなければ 0 を返します。それらは、SAP が正しいことを仮定します。

ATM Forum 文書はすべての捕えられている SAP を指定します。関数 unisve_is_catchall() は、SAP がすべての捕えられている SAP なら 1 を返し、そうでなければ 0 を返します。

最終に関数 unisve_match() は、SETUP メッセージからの情報要素に対して SAP を適合されるために使用されます。それらが適合すれば 1 を返し、そうでなければ 0 を返します。

関連項目

libunimsg(3)

作者

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