Hitachi

Hitachi System Information Capture リファレンス 


7.2.7 電文増幅UOC(電文追加UOC)

機能

電文ファイルから読み出した電文の増幅または破棄が行えます。

IIOPの場合、要求電文を複製して、電文数およびクライアント数の追加を行うことが出来ます。

形式

ANSI C、C++の形式

#include <esplg_uoc.h>
ESLONG uoc_func(ESPLG_UOC_AMPLIFY *parm)

「uoc_func」部分には、システム内で一意の名称を指定してください。

説明

電文の増幅または破棄時に呼び出されるUOCです。

IIOPの場合、送信電文編集UOC前に呼び出されるUOCです。本UOCのリターン値によっては、同じ要求電文に対して本UOCが再度呼び出されます。

各実行形態と入力電文によるUOC実行の有無を以下の表に示します。

IIOP以外の場合

フェーズ

本番環境

テスト環境

要求電文

応答電文

要求電文

応答電文

電文作成フェーズ(PCAP)

×

×

×

×

電文作成フェーズ(キャプチャ)

×

×

×

×

テスト実行フェーズ

×

×

×

(凡例)

○:UOCが実行される

×:UOCは実行されない

IIOPの場合

フェーズ

本番環境

テスト環境

要求電文

応答電文

要求電文

応答電文

PCAP実行

×

×

×

蓄積実行

(電文作成フェーズ)

×

×

×

×

リプレイ実行

(テスト実行フェーズ)

×

×

×

(凡例)

○:UOCが実行される

×:UOCは実行されない

パラメタの内容

ESPLG_UOC_AMPLIFYのパラメタ内容

typedef struct es_plg_uoc_amplify {
  ESULONG run_mode; …………………     実行形態
  ESULONG protocol; …………………     プロトコル種別
  unsigned char msgtype; ………………… 電文種別
  unsigned char reqtype; ………………… 要求電文種別
  char reserve[6]; ………………         予備領域
  ESCOM_IPADDR src_ip; …………………… 送信元IPアドレス
  ESCOM_IPADDR dst_ip; …………………… 送信先IPアドレス
  unsigned short src_port; ……………… 送信元ポート番号
  unsigned short dst_port; ……………… 送信先ポート番号
  char reserve2[4]; ……………          予備領域
  ESCOM_AREA usr_tel_area; ……………   電文単位ユーザ領域(IIOPでは未使用)
  char usr_tel_area_state; ……         電文単位ユーザ領域の状態(IIOPでは未使用)
  char reserve3[7]; ……………          予備領域
  ESCOM_AREA usr_con_area; ……………   コネクション単位ユーザ領域(IIOPでは未使用)
  char usr_con_area_state; ……         コネクション単位ユーザ領域の状態(IIOPでは未使用)
  char reserve4[7]; ……………           予備領域
  ESCOM_AREA telegram; …………………    電文情報
  ESPLG_UOC_TELSIZE telegram_size; ……  電文サイズ
  ESULONG amp_telegram_interval; ……    電文送信間隔(IIOPでは「電文追加の送信間隔」)
  ESULONG amp_client_cnt; …………       クライアント増幅数
  ESULONG amp_client_delay; ………       クライアント増幅の遅延時間
  ESLONG         rtn_detail; ……………… 詳細エラーコード(IIOPでは未使用)
  void *protoinf; ………………            プロトコル情報(IIOP以外は参照出来ません)
  ESULONG         abort_code;……………   強制停止理由コード(IIOPでは未使用)
  char           amp_client_interval; … クライアント増幅間隔有無
  char           reserve5[3]; ……………  予備領域
  void           *protocol_telinf; ……  プロトコル固有情報(IIOPでは未使用)
} ESPLG_UOC_AMPLIFY;

es_com_ipaddr(ESCOM_IPADDR)のパラメタ内容

typedef union es_com_ipaddr{
  ESCOM_IPV4 ipv4; ………………  IPアドレス(IPv4)
  char reserve[16]; ……………… 予備領域
} ESCOM_IPADDR;

es_com_ipv4(ESCOM_IPV4)のパラメタ内容

typedef struct es_com_ipv4 {
  char reserve[12]; ……………… 予備領域
  char ip[4]; ………………       IPアドレス(IPv4)
} ESCOM_IPV4;

es_com_area(ESCOM_AREA)のパラメタ内容

typedef struct es_com_area {
  ESULONG size; ………………    領域サイズ
  char reserve[4]; ……………… 予備領域
  char *data; ………………      領域先頭アドレス
} ESCOM_AREA;

ESPLG_UOC_TELSIZEのパラメタ内容

typedef union {
  ESPLG_UOC_HTTPSIZE http_size; ………… HTTPプロトコルのサイズ格納領域
  ESPLG_UOC_TCPSIZE tcp_size; …………   TCPプロトコルのサイズ格納領域
  ESPLG_UOC_RPCSIZE rpc_size; …………   RPCプロトコルのサイズ格納領域
} ESPLG_UOC_TELSIZE;

ESPLG_UOC_HTTPSIZEのパラメタ内容

typedef struct es_plg_uoc_httpsize{
ESULONG header_size; …………HTTPヘッダ部サイズ
ESULONG body_size; …………HTTPボディ部サイズ
} ESPLG_UOC_HTTPSIZE;

ESPLG_UOC_TCPSIZEのパラメタ内容

typedef struct es_plg_uoc_tcpsize{
ESULONG size; …………電文サイズ
char reserve[4];
} ESPLG_UOC_TCPSIZE;

es_plg_proto_iiop(ESPLG_PROTO_IIOP)のパラメタ内容

typedef struct es_plg_proto_iiop {
char protoinf_type; …………… プロトコル情報種別
char req_byte_order; …………… 要求電文バイトオーダー
char rpy_byte_order; …………… 応答電文バイトオーダー
char reserve1[5]; …………… 予備領域
char *object_key; …………… オブジェクトキー
ESULONG object_key_size; …………… オブジェクトキーサイズ
char reserve2[4]; …………… 予備領域
char *operation; …………… オペレーション名
ESULONG operation_size; …………… オペレーション名サイズ
char reserve3[4]; …………… 予備領域
void *req_service_context;……… 要求電文サービスコンテキスト
ESULONG req_service_context_size; … 要求電文サービスコンテキストサイズ
char reserve4[4]; …………… 予備領域
void *rpy_service_context;……… 応答電文サービスコンテキスト
ESULONG rpy_service_context_size; … 応答電文サービスコンテキストサイズ
char reserve5[4]; …………… 予備領域
ESULONG reply_status; …………… リターン値
char system1; ………………… 製品情報1
char system2; ………………… 製品情報2
char system3; ………………… 製品情報3
char reserve6[49]; ………… 予備領域
} ESPLG_PROTO_IIOP;

es_frw_telegram_rpc(ESFRW_TELEGRAM_RPC)の内容

typedef struct es_frw_telegram_rpc {
char protocol_type; …………… プロトコル詳細種別
char clt_nid[5]; ………………  クライアント側ノードID
char srv_nid[5]; ………………  サーバ側ノードID
char reserve1[5]; ……………… 予備領域
char group[32]; ………………… サービスグループ名
char service[32]; ……………… サービス名
ESLONG rtncode; ………………… RPCリターンコード
ESULONG out_len; ………………  応答データ長
} ESFRW_TELEGRAM_RPC;

電文アドレスと電文長の関係を以下に示します。

[図データ]

システム検証支援が値を設定するパラメタ項目

ESPLG_UOC_AMPLIFYのパラメタ内容
run_mode

システム検証支援の実行形態を設定します。

ESFRW_RUNMODE_CREATE_C:PCAP実行

ESFRW_RUNMODE_TEST_R:リプレイ実行(テスト実行フェーズ)

protocol

プロトコル種別を設定します。

ESFRW_PROT_TCP:TCP

ESFRW_PROT_HTTP:HTTP

ESFRW_PROT_IIOP:IIOP

ESFRW_PROT_RPC:RPC

msgtype

電文種別を設定します。

ESFRW_MSGTYPE_REQUEST_PRO:要求電文(本番環境)

reqtype

プロトコル種別がESFRW_PROT_TCPの場合、ユーザが設定する値です。

システム検証支援基盤は、電文情報設定UOCで設定された、次のどちらかの要求電文種別を設定します。

  • ESFRW_MSGFORM_SYNC_ANSWER:同期応答型(プロトコルヘッダ部だけの応答電文含む)

  • ESFRW_MSGFORM_NOANSWER:非応答型

なお、電文情報設定UOCを省略した場合、システム検証支援はデフォルト値(ESFRW_MSGFORM_SYNC_ANSWER(同期応答型))を設定します。

プロトコル種別がESFRW_PROT_HTTPの場合、システム検証支援は次の値を設定します。

  • ESFRW_MSGFORM_SYNC_ANSWER:同期応答型

プロトコル種別がESFRW_PROT_RPCの場合、システム検証支援は次のどれかを設定します。

  • ESFRW_MSGFORM_SYNC_ANSWER:同期応答型

  • ESFRW_MSGFORM_NOANSWER:非応答型

  • ESFRW_MSGFORM_NOSYNC_ANSWER:非同期応答型

src_ip

パケット(電文)の送信元のIPアドレスを設定します。※1

dst_ip

パケット(電文)の送信先のIPアドレスを設定します。※1

src_port

パケット(電文)の送信元のポート番号をホストバイトオーダーで設定します。

dst_port

パケット(電文)の送信先のポート番号をホストバイトオーダーで設定します。

usr_tel_area

電文単位に共有するユーザ領域をESCOM_AREA構造体で設定します。各メンバには以下の値が設定されています。

  • 領域サイズ

    電文単位ユーザ領域のサイズを設定します。

  • ユーザ領域先頭アドレス

    電文単位ユーザ領域の先頭アドレスを設定します。

usr_tel_area_state

電文単位ユーザ領域の状態を設定します。電文単位ユーザ領域の状態は電文単位ユーザ領域の領域サイズが0以外のときに設定します。

  • ESFRW_CONTST_NEW

    新規に割当てられた領域であることを示します。

  • ESFRW_CONTST_RENEW

    処理済みとなった電文のユーザ領域が再割当てされて、通知されたことを示します。ユーザ領域内には現在処理している電文とは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化等を実施して使用してください。

  • ESFRW_CONTST_CONTINUE

    当該電文のユーザ領域として、UOCに通知済の領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。

usr_con_area

コネクション単位で共有するユーザ領域を設定します。

各メンバには以下の値が設定されています。

  • 領域サイズ

    コネクション単位ユーザ領域のサイズを設定します。

  • ユーザ領域先頭アドレス

    コネクション単位ユーザ領域の先頭アドレスを設定します。

usr_con_area_state

コネクション単位ユーザ領域の状態を設定します。コネクション単位ユーザ領域の状態はコネクション単位ユーザ領域の領域サイズが0以外のときに設定します。

  • ESFRW_CONTST_NEW

    新規に割当てられた領域であることを示します。

  • ESFRW_CONTST_RENEW

    切断されたコネクションのユーザ領域が再割当てされて、通知されたことを示します。ユーザ領域内には現在のコネクションとは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化等を実施して使用してください。

  • ESFRW_CONTST_CONTINUE

    当該コネクションのユーザ領域として、UOCに通知済の領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。

telegram

入力電文に関する情報を設定します。

IIOPの場合、電文に関する情報を設定します。ユーザデータ部は、符号化(marshaling)されたCDR形式です。

各メンバには以下の値が設定されています。

  • size

    電文のサイズを設定します。

  • data

    電文の先頭アドレスを設定します。

telegram_size

HTTPまたはTCPの場合、入力電文のサイズをESPLG_UOC_TELSIZE形式で設定します。

protoinf

IIOPの場合、プロトコル情報ESPLG_PROTO_IIOPの領域アドレスを設定します。

注※1

IPアドレスは、次に示す形式で設定します。

IPv4の場合

例)送信元IPが172.165.112.20の場合

[図データ]

es_plg_proto_iiop(ESPLG_PROTO_IIOP)のパラメタ内容
protoinf_type

ESPLG_PROTO_IIOPに設定するプロトコル情報の種別を論理和で設定します。

ESPLG_IIOP_MSG_REQUEST:Request電文情報あり

ESPLG_IIOP_MSG_REPLY:Reply電文情報あり

req_byte_order

要求電文のバイトオーダーを設定します。

ESPLG_IIOP_BIG_ENDIAN:ビッグエンディアン

ESPLG_IIOP_LITTLE_ENDIAN:リトルエンディアン

rpy_byte_order

応答電文のバイトオーダーを設定します。

ESPLG_IIOP_BIG_ENDIAN:ビッグエンディアン

ESPLG_IIOP_LITTLE_ENDIAN:リトルエンディアン

object_key※1

オブジェクトキーの格納領域アドレスを設定します。

object_key_size※1

オブジェクトキーのサイズを設定します。

operation※1

オペレーション名の格納領域アドレスを設定します。

operation_size※1

オペレーション名のサイズを設定します。

req_service_context※1 ※2

要求電文のサービスコンテキストの格納領域アドレスを設定します。

サービスコンテキストの形式は、OMGで規定されているIOP::ServiceContextListとなります。

req_service_context_size※1

要求電文のサービスコンテキストサイズを設定します。

サイズが0の場合、要求電文サービスコンテキストは参照できません。

rpy_service_context※2 ※3

応答電文のサービスコンテキストの格納領域アドレスを設定します。

サービスコンテキストの形式は、OMGで規定されているIOP::ServiceContextListとなります。

rpy_service_context_size※3

応答電文のサービスコンテキストサイズを設定します。

サイズが0の場合、応答電文サービスコンテキストは参照できません。

reply_status※3

応答電文のリプライステータス(reply_status)を設定します。

ESPLG_IIOP_NO_EXCEPTION:NO_EXCEPTION

注※1

プロトコル情報種別にESPLG_IIOP_MSG_REQUESTが設定されているときのみ参照可能です。

注※2

各電文のバイトオーダーを考慮して参照してください。

注※3

プロトコル情報種別にESPLG_IIOP_MSG_REPLYが設定されているときのみ参照可能です。

ユーザが設定するパラメタ項目

amp_telegram_interval

「電文増幅(電文追加)」を行う場合(ESFRW_OK_RECALLでリターン)、増幅した電文の送信間隔(当該電文と増幅電文の送信時間差異)を設定します。0~3600000(単位:ミリ秒)

0(デフォルト値)を指定した場合は、即時に送信します。

本設定値は実行形態関連定義reply_send_modeの影響を受けます。

倍速送信実行時は、同定義で指定された倍速値で短縮した送信間隔となります。等間隔送信実行時、および連続送信実行時は、本設定値を無視します。

reply_send_modeを省略した場合、システム検証支援は連続送信実行を行うため、設定を倍速送信実行にする必要があります。以下に例を示します。

例)
reply_send_mode \
  -m wait -s 1
amp_client_cnt

「クライアント増幅」を行う場合、電文を複製するクライアント数を設定します。0~20000

0を設定した場合は、クライアント増幅による複製を行いません。

amp_client_delay

クライアント増幅による送信開始を遅延させる時間を設定します。0~3600000(単位:ミリ秒)。

amp_client_delayを1000ミリ秒に設定する例)

parm-> amp_client_delay=1000;
amp_client_interval

クライアント増幅間隔の有無を設定します。

クライアント増幅数が2以上のときに有効となります。

  • ESCOM_YES(デフォルト値)

    送信間隔を空けてクライアント増幅します。

  • ESCOM_NO

    送信間隔を空けないでクライアント増幅します。

rtn_detail

詳細エラーコードを設定します。-2147483648 ~ 2147483647

このコードはUOCがESPLG_UOC_NGをリターンしたときだけ有効です。システム検証支援は詳細エラーコードをKFSE54101-Eに出力します。

reqtype

要求電文の種別を指定できます。リターン値ESPLG_UOC_OK_RECALLを返した(電文を増幅してUOC関数を再度呼び出した)場合、電文情報プラグイン設定UOCが呼び出されないため、この項目を設定してください。

指定できる電文種別は次のとおりです。

  • ESFRW_MSGFORM_SYNC_ANSWER:同期応答型

    テスト対象システムからの応答電文を待ちます。

  • ESFRW_MSGFORM_NOANSWER:非応答型

    テスト対象システムからの応答電文を待たずに、次の要求電文を送信します。

要求電文種別は次の条件をすべて満たす場合に設定してください。

  • プロトコル種別がTCP

  • 要求電文(本番環境)

条件を満たさない場合、設定する必要はありません。システム検証支援基盤は設定値を無視します。

ユーザが設定する項目とリターン値の関係を次に示します。

リターン値

次のコードでリターン値を設定してください。

ESPLG_UOC_OK

電文を増幅・破棄せず、次の処理に移ります。

クライアント増幅の設定に従い、クライアント増幅による電文の複製を行います。

ESPLG_UOC_OK_RECALL

クライアント増幅数の設定に従い、クライアント増幅による電文の複製を行います。

その後、電文追加を行うため、本UOCの再度呼び出しを行います。

ESPLG_UOC_MSG_DESTRUCT

電文を破棄して、次の処理に移ります。

ESPLG_UOC_ABORT

KFSE64109-Eメッセージを出力し、システム検証支援プロセスを強制停止します。

ESPLG_UOC_NG、および上記以外

KFSE54101-Eメッセージを出力します。そして、電文を増幅・破棄せず、次の処理に移ります。

要求電文の複製を行いません。

IIOPの場合、次のリターン値以外は、ESPLG_UOC_NGとして処理を行います。

注意事項

電文の内容を変更した場合、該当電文の内容、およびその後の処理の保障はできません。