4. Abstract Service Interfaces (抽象サービスインターフェース)
4. Abstract Service Interfaces (抽象サービスインターフェース)
このセクションでは, SNMP アーキテクチャの主要コンポーネント間の抽象サービスインターフェースについて説明します。これらのインターフェースは抽象プリミティブを使用して定義されており, コンポーネント間で渡す必要がある情報を表しますが, それがどのように渡されるかは指定しません。
抽象サービスインターフェースはいくつかのカテゴリに編成されています:
- ディスパッチャープリミティブ (Dispatcher Primitives): アプリケーションとディスパッチャー間のインターフェース
- メッセージ処理サブシステムプリミティブ (Message Processing Subsystem Primitives): ディスパッチャーとメッセージ処理モデル間のインターフェース
- アクセス制御サブシステムプリミティブ (Access Control Subsystem Primitives): アプリケーションとアクセス制御サブシステム間のインターフェース
- セキュリティサブシステムプリミティブ (Security Subsystem Primitives): メッセージ処理モデルとセキュリティモデル間のインターフェース
4.1. Dispatcher Primitives (ディスパッチャープリミティブ)
ディスパッチャーは, SNMP メッセージの送受信のためのサービスをアプリケーションに提供します。メッセージと PDU をルーティングするための中心点として機能します。
4.1.1. Generate Outgoing Request or Notification (送信リクエストまたは通知の生成)
アプリケーションは sendPdu プリミティブを使用して, PDU を含む SNMP メッセージを送信するようディスパッチャーに要求します。
プリミティブ:
statusInformation =
sendPdu(
IN transportDomain
IN transportAddress
IN messageProcessingModel
IN securityModel
IN securityName
IN securityLevel
IN contextEngineID
IN contextName
IN pduVersion
IN PDU
IN expectResponse
IN sendPduHandle
OUT destTransportDomain
OUT destTransportAddress
)
パラメータ:
transportDomain: 使用するトランスポートプロトコル (例: UDP)transportAddress: 宛先アドレスmessageProcessingModel: 使用するメッセージ形式securityModel: 使用するセキュリティモデルsecurityName: メッセージが送信される代理としてのプリンシパルsecurityLevel: セキュリティレベル (noAuthNoPriv, authNoPriv, または authPriv)contextEngineID: コンテキストエンジン IDcontextName: コンテキスト名pduVersion: PDU バージョンPDU: 送信する PDUexpectResponse: 応答が期待されるかどうかsendPduHandle: このリクエストを識別するハンドルdestTransportDomain: (OUT) 使用された実際のトランスポートドメインdestTransportAddress: (OUT) 使用された実際のトランスポートアドレスstatusInformation: (OUT) 成功またはエラー表示
4.1.2. Process Incoming Request or Notification PDU (受信リクエストまたは通知 PDU の処理)
ディスパッチャーは processPdu プリミティブを使用して, 受信したリクエストまたは通知 PDU をアプリケーションに配信します。
プリミティブ:
processPdu(
IN messageProcessingModel
IN securityModel
IN securityName
IN securityLevel
IN contextEngineID
IN contextName
IN pduVersion
IN PDU
IN maxSizeResponseScopedPDU
IN stateReference
)
パラメータ:
messageProcessingModel: 使用されたメッセージ形式securityModel: 使用されたセキュリティモデルsecurityName: メッセージが送信された代理としてのプリンシパルsecurityLevel: メッセージに適用されたセキュリティレベルcontextEngineID: コンテキストエンジン IDcontextName: コンテキスト名pduVersion: PDU バージョンPDU: 受信した PDUmaxSizeResponseScopedPDU: 応答の最大サイズstateReference: キャッシュされた状態情報への参照
4.1.3. Generate Outgoing Response (送信応答の生成)
アプリケーションは returnResponsePdu プリミティブを使用して, ディスパッチャーに応答メッセージの送信を要求します。
プリミティブ:
result =
returnResponsePdu(
IN messageProcessingModel
IN securityModel
IN securityName
IN securityLevel
IN contextEngineID
IN contextName
IN pduVersion
IN PDU
IN maxSizeResponseScopedPDU
IN stateReference
IN statusInformation
)
パラメータ:
messageProcessingModel: 使用するメッセージ形式 (processPdu から)securityModel: 使用するセキュリティモデル (processPdu から)securityName: プリンシパル (processPdu から)securityLevel: セキュリティレベル (processPdu から)contextEngineID: コンテキストエンジン ID (processPdu から)contextName: コンテキスト名 (processPdu から)pduVersion: PDU バージョン (processPdu から)PDU: 送信する応答 PDUmaxSizeResponseScopedPDU: 応答の最大サイズ (processPdu から)stateReference: 状態情報 (processPdu から)statusInformation: リクエスト処理に関する状態情報result: (OUT) 成功またはエラー表示
4.1.4. Process Incoming Response PDU (受信応答 PDU の処理)
ディスパッチャーは processResponsePdu プリミティブを使用して, 応答 PDU をアプリケーションに配信します。
プリミティブ:
processResponsePdu(
IN messageProcessingModel
IN securityModel
IN securityName
IN securityLevel
IN contextEngineID
IN contextName
IN pduVersion
IN PDU
IN statusInformation
IN sendPduHandle
)
パラメータ:
messageProcessingModel: 使用されたメッセージ形式securityModel: 使用されたセキュリティモデルsecurityName: プリンシパルsecurityLevel: 適用されたセキュリティレベルcontextEngineID: コンテキストエンジン IDcontextName: コンテキスト名pduVersion: PDU バージョンPDU: 受信した応答 PDUstatusInformation: メッセージ処理に関する状態情報sendPduHandle: 元の sendPdu リクエストからのハンドル
4.1.5. Registering Responsibility for Handling SNMP PDUs (SNMP PDU 処理の責任の登録)
アプリケーションは, 特定の種類の PDU を受信するために, ディスパッチャーに登録する必要があります。
登録のプリミティブ:
statusInformation =
registerContextEngineID(
IN contextEngineID
IN pduType
)
登録解除のプリミティブ:
unregisterContextEngineID(
IN contextEngineID
IN pduType
)
パラメータ:
contextEngineID: 登録するコンテキストエンジン IDpduType: 受信する PDU の種類 (Get, GetNext, GetBulk, Set, Trap, InformRequest など)statusInformation: (OUT) 成功またはエラー表示
一度に, 指定された contextEngineID と pduType の組み合わせに対して登録できるアプリケーションは 1 つだけです。
4.2. Message Processing Subsystem Primitives (メッセージ処理サブシステムプリミティブ)
メッセージ処理サブシステムは, メッセージの準備とメッセージからのデータ抽出のためのサービスをディスパッチャーに提供します。
4.2.1. Prepare Outgoing SNMP Request or Notification Message (送信 SNMP リクエストまたは通知メッセージの準備)
ディスパッチャーは prepareOutgoingMessage プリミティブを使用して, メッセージ処理モデルに送信用のメッセージの準備を要求します。
プリミティブ:
statusInformation =
prepareOutgoingMessage(
IN transportDomain
IN transportAddress
IN messageProcessingModel
IN securityModel
IN securityName
IN securityLevel
IN contextEngineID
IN contextName
IN pduVersion
IN PDU
IN expectResponse
IN sendPduHandle
OUT destTransportDomain
OUT destTransportAddress
OUT outgoingMessage
OUT outgoingMessageLength
)
パラメータ:
- 入力パラメータは sendPdu と同じ
outgoingMessage: (OUT) 送信準備ができたメッセージoutgoingMessageLength: (OUT) メッセージの長さstatusInformation: (OUT) 成功またはエラー表示
メッセージ処理モデル:
- contextEngineID, contextName, PDU から scopedPDU を作成
- セキュリティモデルを呼び出してセキュリティ処理を適用
- セキュア化されたメッセージを適切なメッセージ形式でラップ
- 送信準備ができた完全なメッセージを返す
4.2.2. Prepare an Outgoing SNMP Response Message (送信 SNMP 応答メッセージの準備)
ディスパッチャーは prepareResponseMessage プリミティブを使用して, メッセージ処理モデルに応答メッセージの準備を要求します。
プリミティブ:
result =
prepareResponseMessage(
IN messageProcessingModel
IN securityModel
IN securityName
IN securityLevel
IN contextEngineID
IN contextName
IN pduVersion
IN PDU
IN maxSizeResponseScopedPDU
IN stateReference
IN statusInformation
OUT destTransportDomain
OUT destTransportAddress
OUT outgoingMessage
OUT outgoingMessageLength
)
パラメータ:
- 入力パラメータには元のリクエストからの状態情報が含まれる
outgoingMessage: (OUT) 準備された応答メッセージoutgoingMessageLength: (OUT) メッセージの長さresult: (OUT) 成功またはエラー表示
メッセージ処理モデル:
- stateReference を使用してキャッシュされた情報を取得
- contextEngineID, contextName, PDU から scopedPDU を作成
- セキュリティモデルを呼び出してセキュリティ処理を適用
- セキュア化されたメッセージを適切なメッセージ形式でラップ
- 送信準備ができた完全なメッセージを返す
- キャッシュされた状態情報を解放
4.2.3. Prepare Data Elements from an Incoming SNMP Message (受信 SNMP メッセージからのデータ要素の準備)
ディスパッチャーは prepareDataElements プリミティブを使用して, メッセージ処理モデルに受信メッセージからのデータ抽出を要求します。
プリミティブ:
result =
prepareDataElements(
IN transportDomain
IN transportAddress
IN wholeMsg
IN wholeMsgLength
OUT messageProcessingModel
OUT securityModel
OUT securityName
OUT securityLevel
OUT contextEngineID
OUT contextName
OUT pduVersion
OUT PDU
OUT pduType
OUT sendPduHandle
OUT maxSizeResponseScopedPDU
OUT statusInformation
OUT stateReference
)
パラメータ:
transportDomain: メッセージが到着したトランスポートプロトコルtransportAddress: 送信元アドレスwholeMsg: 受信したメッセージwholeMsgLength: メッセージの長さ- すべての OUT パラメータには抽出されたデータ要素が含まれる
result: (OUT) 成功またはエラー表示
メッセージ処理モデル:
- メッセージ形式を解析
- セキュリティモデルを呼び出してセキュリティを処理
- scopedPDU を抽出
- scopedPDU を解析して contextEngineID, contextName, PDU を抽出
- メッセージが応答を必要とする場合, 状態情報をキャッシュ
- 抽出されたすべてのデータ要素を返す
4.3. Access Control Subsystem Primitives (アクセス制御サブシステムプリミティブ)
アクセス制御サブシステムは, 管理対象オブジェクトへのアクセスを許可すべきかどうかを判断するためのサービスをアプリケーションに提供します。
プリミティブ:
statusInformation =
isAccessAllowed(
IN securityModel
IN securityName
IN securityLevel
IN viewType
IN contextName
IN variableName
)
パラメータ:
securityModel: 使用中のセキュリティモデルsecurityName: アクセスを試みているプリンシパルsecurityLevel: メッセージのセキュリティレベルviewType: アクセスの種類 (read, write, または notify)contextName: アクセスされているコンテキストvariableName: 管理対象オブジェクトの OIDstatusInformation: (OUT) 許可または拒否
アクセス制御モデルは, 設定されたポリシーに基づいて, 指定された操作を許可すべきかどうかを判断します。
4.4. Security Subsystem Primitives (セキュリティサブシステムプリミティブ)
セキュリティサブシステムは, セキュリティの適用とチェックのためのサービスをメッセージ処理モデルに提供します。
4.4.1. Generate a Request or Notification Message (リクエストまたは通知メッセージの生成)
メッセージ処理モデルは generateRequestMsg プリミティブを使用して, セキュリティサブシステムに送信リクエストまたは通知メッセージへのセキュリティ処理の適用を要求します。
プリミティブ:
statusInformation =
generateRequestMsg(
IN messageProcessingModel
IN globalData
IN maxMessageSize
IN securityModel
IN securityEngineID
IN securityName
IN securityLevel
IN scopedPDU
OUT securityParameters
OUT wholeMsg
OUT wholeMsgLength
)
パラメータ:
messageProcessingModel: 使用されているメッセージ形式globalData: メッセージ形式固有のヘッダーデータmaxMessageSize: サポートされる最大メッセージサイズsecurityModel: 使用するセキュリティモデルsecurityEngineID: 権威あるエンジン IDsecurityName: プリンシパルsecurityLevel: 希望するセキュリティレベルscopedPDU: セキュア化する scoped PDUsecurityParameters: (OUT) セキュリティモデル固有のパラメータwholeMsg: (OUT) 完全にセキュア化されたメッセージwholeMsgLength: (OUT) メッセージの長さstatusInformation: (OUT) 成功またはエラー表示
4.4.2. Process Incoming Message (受信メッセージの処理)
メッセージ処理モデルは processIncomingMsg プリミティブを使用して, セキュリティサブシステムに受信メッセージの処理を要求します。
プリミティブ:
statusInformation =
processIncomingMsg(
IN messageProcessingModel
IN maxMessageSize
IN securityParameters
IN securityModel
IN securityLevel
IN wholeMsg
IN wholeMsgLength
OUT securityEngineID
OUT securityName
OUT scopedPDU
OUT maxSizeResponseScopedPDU
OUT securityStateReference
)
パラメータ:
messageProcessingModel: 使用されているメッセージ形式maxMessageSize: サポートされる最大メッセージサイズsecurityParameters: メッセージからのセキュリティモデル固有のパラメータsecurityModel: メッセージで示されているセキュリティモデルsecurityLevel: 希望するセキュリティレベルwholeMsg: 受信したメッセージwholeMsgLength: メッセージの長さsecurityEngineID: (OUT) 権威あるエンジン IDsecurityName: (OUT) プリンシパルscopedPDU: (OUT) 抽出および検証された scoped PDUmaxSizeResponseScopedPDU: (OUT) 応答の最大サイズsecurityStateReference: (OUT) キャッシュされたセキュリティ状態への参照statusInformation: (OUT) 成功またはエラー表示
セキュリティモデル:
- メッセージが本物であることを確認 (認証が必要な場合)
- メッセージを復号化 (プライバシーが必要な場合)
- メッセージのタイムリー性を確認 (リプレイ攻撃を防ぐため)
- scopedPDU を抽出
- 応答が必要な場合, セキュリティ状態をキャッシュ
- 抽出されたすべてのデータを返す
4.4.3. Generate a Response Message (応答メッセージの生成)
メッセージ処理モデルは generateResponseMsg プリミティブを使用して, セキュリティサブシステムに送信応答メッセージへのセキュリティ処理の適用を要求します。
プリミティブ:
statusInformation =
generateResponseMsg(
IN messageProcessingModel
IN globalData
IN maxMessageSize
IN securityModel
IN securityEngineID
IN securityName
IN securityLevel
IN scopedPDU
IN securityStateReference
OUT securityParameters
OUT wholeMsg
OUT wholeMsgLength
)
パラメータ:
- generateRequestMsg と似ていますが, securityStateReference を含む
securityStateReference: 元のリクエストからのキャッシュされた状態- その他のパラメータは generateRequestMsg と同様
セキュリティモデルは, キャッシュされたセキュリティ状態を使用して, リクエストで使用されたのと同じセキュリティ処理を応答に適用します。
4.5. Common Primitives (共通プリミティブ)
4.5.1. Release State Reference Information (状態参照情報の解放)
コンポーネントは stateRelease プリミティブを使用して, キャッシュされた状態情報を解放します。
プリミティブ:
stateRelease(
IN stateReference
)
パラメータ:
stateReference: 解放するキャッシュされた状態への参照
このプリミティブは, キャッシュされた状態情報が不要になったときにリソースを解放するために使用されます。通常, 次の場合に呼び出されます:
- 応答が送信された
- エラーが発生し, 応答が送信されない
- 応答を待っている間にタイムアウトが発生した
4.6. Scenario Diagrams (シナリオ図)
このセクションでは, 一般的な操作のプリミティブフローを示すシナリオ図を提供します。
4.6.1. Command Generator or Notification Originator (コマンドジェネレーターまたは通知発信者)
以下の図は, アプリケーションがリクエストまたは通知を開始するときのフローを示しています:
Application Dispatcher Message Processing Security
Model Model
sendPdu ----------->
prepareOutgoing
Message -------->
generateRequestMsg -->
(セキュリティを適用)
<------------------
<--------------
(ネットワークにメッセージを送信)
(後で, 応答が到着)
(ネットワークからメッセージを受信)
prepareData
Elements ------->
processIncomingMsg -->
(セキュリティを確認)
<------------------
<--------------
processResponsePdu <-
4.6.2. Scenario Diagram for a Command Responder Application (コマンドレスポンダーアプリケーションのシナリオ図)
以下の図は, アプリケーションがリクエストに応答するときのフローを示しています:
Application Dispatcher Message Processing Security
Model Model
(ネットワークからメッセージを受信)
prepareData
Elements ------->
processIncomingMsg -->
(セキュリティを確認)
<------------------
<--------------
processPdu <--------
(アプリケーションがリクエストを処理)
returnResponsePdu ->
prepareResponse
Message -------->
generateResponseMsg ->
(セキュリティを適用)
<------------------
<--------------
(ネットワークにメッセージを送信)
これらの図は, アーキテクチャのモジュール設計と, 異なるサブシステム間の関心事の明確な分離を示しています。