機能説明
NWsnmp_pdu構造体をPDUに変換します。
呼び出し形式
int NWsnmpPduEncode(NWsnmp_pdu* tsp, char** pdu, int* len, NWsnmpErrinfo *infoErr)
パラメタ
入力パラメタ
NWsnmp_pdu構造体を指定します。
出力パラメタ
作成PDUを指定します(領域は関数内で確保されます)。
作成PDU長を指定します。
エラー情報設定構造体を指定します。
復帰値
正常終了。
異常終了。
備考
エラー時に、以下のコードがNWsnmpErrinfo構造体のNWErrorCodeに設定されます。
作成PDUが2KBを超えました。
領域の獲得に失敗しました。
指定MIB名が存在しませんでした。
不当パラメタが指定されました。
MIB名が2048文字を超えました。
PDU形式に変換できないNWsnmp_pdu構造体が指定されました。
注意事項
PDUタイプがGET/GETNEXT/SET REQUESTとSNMPトラップの符号化が可能です。
PDU領域は関数内で取得されます。
使用後はNWsnmpFree()関数を用いて領域の解放を行ってください。
使用例
GetRequestPDU、およびGetNextRequestPDUの作成例
NWsnmp_pdu tsp; /* 符号化するNWsnmp_pdu構造体 */ NWsnmp_Varbind varbind1; /* NWsnmp_Varbind構造体 */ NWsnmp_Varbind varbind2; /* NWsnmp_Varbind構造体 */ char *pdu; /* 生成するPDU */ int len; /* 生成するPDU長 */ NWsnmpErrinfo infoErr; /* エラー通知構造体 */ -中略- memset(&tsp, ‘\0’ , sizeof(tsp)); memset(&varbind1, ‘\0’ , sizeof(varbind1)); memset(&varbind2, ‘\0’ , sizeof(varbind2)); tsp.version = NWSNMP_VERSION_1; /* バージョンの設定 */ tsp.community = "public"; /* コミュニティ名の設定 */ tsp.community_len = strlen("public"); /* コミュニティ名長の設定*/ tsp.pdu_type = NWSNMP_GET; /* 種別の設定、GetNextRequestの場合、*/ /* NWSNMP_NEXTを設定 */ tsp.request_id = 12345; /* リクエストIDの設定 */ /* * NWsnmp_Varbind構造体の設定 */ tsp.varbind = &varbind1; /* varbindリスト1 */ varbind1.obj_name = "sysName.0"; varbind1.obj_type = NWSNMP_NULL; varbind1.next = &varbind2; /* varbindリスト2 */ varbind1.obj_name = "1.3.6.1.2.1.1.6.0"; varbind1.obj_type = NWSNMP_NULL; varbind1.next = NULL; /* NWsnmp_pduの符号化 */ if (!NWsnmpPduEncode(&tsp, &pdu, &len, &infoErr)) { /* エラー処理 */ }
SetRequestPDUの作成例
NWsnmp_pdu tsp; /* 符号化するNWsnmp_pdu構造体 */ NWsnmp_Varbind varbind; /* NWsnmp_Varbind構造体 */ char *pdu; /* 生成するPDU */ int len; /* 生成するPDU長 */ NWsnmpErrinfo infoErr; /* エラー通知構造体 */ -中略- memset(&tsp, ‘\0’ , sizeof(tsp)); memset(&varbind, ‘\0’ , sizeof(varbind)); tsp.version = NWSNMP_VERSION_1; /* バージョンの設定 */ tsp.community = "public"; /* コミュニティ名の設定*/ tsp.community_len = strlen("public"); /* コミュニティ名長の設定*/ tsp.pdu_type = NWSNMP_SET; /* 種別の設定 */ tsp.request_id = 12345; /* リクエストIDの設定 */ /* * NWsnmp_Varbind構造体の設定 */ tsp.varbind = &varbind1; /* varbindリスト */ varbind.obj_name = "sysLocation.0"; varbind.obj_type = NWSNMP_OCTET_STRING; varbind.obj_syntax.val_octet_string.string = "PFU"; varbind.obj_syntax.val_octet_string.len =strlen("PFU"); varbind.next = NULL; /* NWsnmp_pduの符号化 */ if (!NWsnmpPduEncode(&tsp, &pdu, &len, &infoErr)) { /* エラー処理 */ }
TrapPDUの作成例
【Windows版/UNIX版(Linux for Itanium版を除く)の場合】
NWsnmp_pdu tsp; /* 符号化するNWsnmp_pdu構造体 */ NWsnmp_Varbind varbind; /* NWsnmp_Varbind構造体 */ char *pdu; /* 生成するPDU */ int len; /* 生成するPDU長 */ NWsnmpErrinfo infoErr; /* エラー通知構造体 */ unsigned long agent; /* エージェントアドレス */ -中略- memset(&tsp, ‘\0’ , sizeof(tsp)); memset(&varbind, ‘\0’ , sizeof(varbind)); tsp.version = NWSNMP_VERSION_1; /* バージョンの設定 */ tsp.community = "public"; /* コミュニティ名の設定*/ tsp.community_len = strlen("public"); /* コミュニティ名長の設定*/ tsp.pdu_type = NWSNMP_TRAP; /* 種別の設定 */ tsp.enterprise = "1.3.6.1.4.1"; /* enterpriseの設定 */ tsp.agent_addr = agent; /* エージェントアドレスの設定 */ tsp.generic_trap = NWSNMP_COLDSTART; /* SNMPトラップ種別の設定 */ tsp.specific_trap = 0; /* specificCodeの設定 */ tsp.time_stamp = 0; /* タイムスタンプの設定 */ /* * NWsnmp_Varbind構造体の設定 */ tsp.varbind = &varbind1; /* varbindリスト */ varbind.obj_name = "sysName.0"; varbind.obj_type = NWSNMP_OCTET_STRING; varbind.obj_syntax.val_octet_string.string = "HostName"; varbind.obj_syntax.val_octet_string.len =strlen("HostName"); varbind.next = NULL; /* NWsnmp_pduの符号化 */ if (!NWsnmpPduEncode(&tsp, &pdu, &len, &infoErr)) { /* エラー処理 */ }
【Linux for Itanium版】
NWsnmp_pdu tsp; /* 符号化するNWsnmp_pdu構造体 */ NWsnmp_Varbind varbind; /* NWsnmp_Varbind構造体 */ char *pdu; /* 生成するPDU */ int len; /* 生成するPDU長 */ NWsnmpErrinfo infoErr; /* エラー通知構造体 */ NWSNMP_ULONG agent ; /* エージェントアドレス */ -中略- memset(&tsp, ‘\0’ , sizeof(tsp)); memset(&varbind, ‘\0’ , sizeof(varbind)); tsp.version = NWSNMP_VERSION_1; /* バージョンの設定 */ tsp.community = "public"; /* コミュニティ名の設定*/ tsp.community_len = strlen("public"); /* コミュニティ名長の設定*/ tsp.pdu_type = NWSNMP_TRAP; /* 種別の設定 */ tsp.enterprise = "1.3.6.1.4.1"; /* enterpriseの設定 */ tsp.agent_addr = agent; /* エージェントアドレスの設定 */ tsp.generic_trap = NWSNMP_COLDSTART; /* SNMPトラップ種別の設定 */ tsp.specific_trap = 0; /* specificCodeの設定 */ tsp.time_stamp = 0; /* タイムスタンプの設定 */ /* * NWsnmp_Varbind構造体の設定 */ tsp.varbind = &varbind1; /* varbindリスト */ varbind.obj_name = "sysName.0"; varbind.obj_type = NWSNMP_OCTET_STRING; varbind.obj_syntax.val_octet_string.string = "HostName"; varbind.obj_syntax.val_octet_string.len =strlen("HostName"); varbind.next = NULL; /* NWsnmp_pduの符号化 */ if (!NWsnmpPduEncode(&tsp, &pdu, &len, &infoErr)) { /* エラー処理 */ }