NG_CCATM(4) | FreeBSD Kernel Interfaces Manual | NG_CCATM(4) |
名称
ng_ccatm — ATM 呼び出し制御 netgraph ノードタイプ書式
#include < netnatm/unimsg.h>#include < netnatm/msg/unistruct.h>
#include < netnatm/sig/unidef.h>
#include < netnatm/api/unisap.h>
#include < netnatm/api/atmapi.h>
#include < netnatm/api/ccatm.h>
#include < netgraph.h>
#include < netgraph/ng_uni.h>
#include < netgraph/ng_ccatm.h>
解説
ng_ccatm ノードは、ATM サービスへのアクセスのために ATM フォーラムによって指定された API を実装します (ATM フォーラムドキュメント af-saa-0108 参照)。この文書は、正確な言語バインディング (結合)ではなく、API のセマンティクスを指定します。この理由で、この実装がコンパイル時でなくて、この API の他の実装とバイナリ互換でないことが予想されます。しかしながら、異なった API 実装の間で変換することはかなり簡単であるべきです。このノードは、通常 1 つ以上の UNI ノード ( ng_uni(4) 参照) の先頭にスタックされます。各これらのフックは、ノードのユーザのために“port”として現れます。また、それは、管理目的のために ILMI デーモンに接続された 1 つのフックがあります。
ノードは、 NGM_SHUTDOWN メッセージを受け取るか、すべてのフックが切断されるとき削除されます。
フック
ノードは、ユーザ接続のための前もって定義された名前と無制限な数のフックとともに多くのフックを理解します。前もって定義された名前は、次の通りです:- uni NNN
- これらのフックは、UNI スタックの先頭に ng_ccatm ノードをスタックします。ノードは、 ng_uni(4) で指定された上位のインタフェースに従うためにこれらのフック上のインタフェースを予想します。これらのフックは、UNI への制御の呼び出しと制御の呼び出しから戻る UNI から巡回の呼び出しがないように、強制的にキューモードにされます。フック名の NNN は、10 進ポート番号あり、0 であってはなりません。ポート番号は、32 ビットの符号なし整数です。
- manage
- このフックは、ILMI デーモンに接続されるべきです。データは、このフックで決して送信されません、そしてすべての受信されたデータは、破棄されます。フックは、コントロールメッセージを送信するために使用されます。
- dump
- NGM_CCATM_DUMP コマンドの受け取りでは、ノードの現在の状態のテキスト記述は、このフックから送信されます。このテキストは、2 つ以上の mbuf から成る 1 つの大きいメッセージとして送信されます。
他のすべてのフック名は、ATM フォーラムの文書で指定されるようにユーザフックを取り、ATM 終点に対応しています。これらのフックのインタフェースは、 < atmapi.h> で定義されて、次の構造体を使用します
struct ccatm_op { uint32_t op; /* 要求コード */ u_char data[]; /* オプションデータ */ };
この構造体は、操作のためのデータが直ちに続いています。 opcode は、次の 1 つです:
enum atmop { ATMOP_RESP, ATMOP_ABORT_CONNECTION, ATMOP_ACCEPT_INCOMING_CALL, ATMOP_ADD_PARTY, ATMOP_ADD_PARTY_REJECT, ATMOP_ADD_PARTY_SUCCESS, ATMOP_ARRIVAL_OF_INCOMING_CALL, ATMOP_CALL_RELEASE, ATMOP_CONNECT_OUTGOING_CALL, ATMOP_DROP_PARTY, ATMOP_GET_LOCAL_PORT_INFO, ATMOP_P2MP_CALL_ACTIVE, ATMOP_P2P_CALL_ACTIVE, ATMOP_PREPARE_INCOMING_CALL, ATMOP_PREPARE_OUTGOING_CALL, ATMOP_QUERY_CONNECTION_ATTRIBUTES, ATMOP_REJECT_INCOMING_CALL, ATMOP_SET_CONNECTION_ATTRIBUTES, ATMOP_WAIT_ON_INCOMING_CALL, ATMOP_SET_CONNECTION_ATTRIBUTES_X, ATMOP_QUERY_CONNECTION_ATTRIBUTES_X, ATMOP_QUERY_STATE };
これらのコードは、次の例外で ATM フォーラムの文書で指定された操作に直接対応しています:
- ATMOP_RESP
-
ng_uni(4) で議論されるように、これは、インタフェースを“同期化”するために使用されます。引数は、次の構造体です
struct atm_resp { int32_t resp; uint32_t data; /* アタッチされたデータの タイプ */ };
応答コード resp が 0 であるなら、ノードは、ユーザ要求を受け付けました。何か間違っているなら、 resp は、エラーコードを含んでいます。データを返す要求のために、 data は、データのタイプを説明するコードを含み、データ自体は、構造体の直後から始まります。
- ATMOP_QUERY_CONNECTION_ATTRIBUTES_X
- これは、1 つの要求の中のいくつかの属性を問い合わせできることを除いて、 ATMOP_QUERY_CONNECTION_ATTRIBUTES と同じです。
- ATMOP_SET_CONNECTION_ATTRIBUTES_X
- これは、1 つの要求の中のいくつかの属性を設定できることを除いて、 ATMOP_SET_CONNECTION_ATTRIBUTES と同じです。属性のリストは、リスト中に現れるのと同じ順序で属性によって直ちに続きます。
ユーザフックが切断されるなら、そのフックで活発な接続は、解放されます。受け付けられるのを待つ着信接続は、他の listen する (接続を受け付ける) フックに再提供されるか、または拒絶されます。
コントロールメッセージ
一般的なメッセージのほかに、ノードは、次の特別なメッセージを理解します:- NGM_CCATM_DUMP ( dump)
- ノードの内部の状態を dump フックに ASCII でダンプします。
- NGM_CCATM_STOP ( stop)
-
このメッセージは、そのポート上のすべての接続が中止され (解放されません!)、そのポートにバインドされるすべての ATM 終点をクローズします。それは、そのポートの UNI スタック上の UNI スタックからのすべてのメッセージの処理を停止します。引数は、次の通りです
struct ngm_ccatm_port { uint32_t port; };
- NGM_CCATM_START ( start)
- ポートで処理を開始します。引数は、 ngm_ccatm_port 構造体です。
- NGM_CCATM_CLEAR ( clear)
- このメッセージは、 ngm_ccatm_port 構造体を取って、そのポートに関するすべての接頭辞とアドレスをクリアします。ポート番号が 0 であるなら、すべてのポートがクリアされます。
- NGM_CCATM_GET_ADDRESSES ( get_addresses)
-
与えられたポートですべての登録されたアドレスのリストを取得します。引数は、
ngm_ccatm_port 構造体で、結果は、
ngm_ccatm_get_addresses 構造体です:
struct ngm_ccatm_get_addresses { uint32_t count; struct ngm_ccatm_address_req addr[0]; }; struct ngm_ccatm_address_req { uint32_t port; struct uni_addr addr; };
port フィールドが要求で 0 であるなら、すべてのポートのすべてのアドレスが返されます。それが 0 でないなら、そのポートに関するアドレスだけが報告されます。アドレスの数は、 count フィールドに返されます。
- NGM_CCATM_ADDRESS_REGISTERED ( address_reg)
- このメッセージは、前のアドレス登録要求が成功した、 ng_ccatm ノードを通知するために ILMI によって使用されます。ノードは、そのアドレスを活性化します。メッセージへの引数は、 ngm_ccatm_address_req 構造体です。
- NGM_CCATM_ADDRESS_UNREGISTERED ( address_unreg)
- このメッセージは、アドレスが登録されていない、 ng_ccatm ノードを通知するために ILMI によって使用されます。ノードは、テーブルからのそのアドレスをクリアします。引数は、 ngm_ccatm_address_req 構造体です。
- NGM_CCATM_SET_PORT_PARAM ( set_port_param)
-
この要求は、与えられたポートでパラメータを設定します。引数は、次の通りです
struct ngm_ccatm_atm_port { uint32_t port; /* パラメータを設定するためのポート */ uint32_t pcr; /* ポートピークセルレート */ uint32_t max_vpi_bits; uint32_t max_vci_bits; uint32_t max_svpc_vpi; uint32_t max_svcc_vpi; uint32_t min_svcc_vci; uint8_t esi[6]; uint32_t num_addr; };
これは、ILMI によってのみ使用されるべきで、そのポートが停止されたとき、そのポートのアドレスと接頭辞テーブルは、空です。 num_addr フィールドは、無視されます。
- NGM_CCATM_GET_PORT_PARAM ( get_port_param)
- 与えられたポートのパラメータを検索します。引数は、 ngm_ccatm_port であり、結果は、 ngm_ccatm_atm_port です。
- NGM_CCATM_GET_PORTLIST ( get_portlist)
-
そのノードですべての利用可能なポートのリストを取得します。これは、次のように返されます
struct ngm_ccatm_portlist { uint32_t nports; uint32_t ports[]; };
- NGM_CCATM_GETSTATE ( getstate)
- ポートの状態を返します。引数は、 struct ngm_ccatm_port で、返り値は、 uint32_t です。
- NGM_CCATM_SETLOG ( setlog)
- この要求は、新しいログ記録レベルを設定して、前のものを返します。引数は、新しいログ記録レベルを指定する場合は、 uint32_t であり、または uint32_t として返される古いレベルの場合は、空となります。
- NGM_CCATM_RESET ( reset)
- ノードをリセットします。これは、ユーザフックと接続された UNI スタックの数が 0 の場合にだけ許可されます。
- NGM_CCATM_GET_EXSTAT
- ノードから拡張状態情報を返します。
作者
<harti@FreeBSD.org>March 10, 2005 | FreeBSD |