このセクションでは、NSX Advanced Load Balancer で使用可能なレイヤー 4 DataScript 関数について説明します。

文字列

説明

avi.l4.read()

ソケット バッファからペイロードを読み取ります。

avi.l4.collect ()

ペイロードを DataScript に適用する前に、num_bytes を収集します。

avi.vs.log()

渡されたメッセージを接続ログに記録します

avi.vs.close.conn()

現在の TCP/UDP 接続を閉じます

avi.vs.client_port()

クライアントの送信元ポートを返します。

avi.vs.client_ip

クライアントの IP アドレスを返します。

avi.vs.persist()

オプションの指定されたプールまたは仮想サービスに適用されているプールに要求をロード バランシングします。

avi.pool.get_server_info()

avi.pool.get_server_ip()

avi.poolgroup.select

現在の要求のプール グループを選択します。

注:

前述の API は、IP グループおよび文字列グループではサポートされていません。ただし、DataScript はプール グループでサポートされます。

avi.l4.read

機能

avi.l4.read()

説明

関数 avi.vs.read の名前が avi.l4.read に変更されました。ソケット バッファからペイロードを読み取り、バイトのストリームを返します。

この API は、ペイロードを読み取ってそこで操作するためには必須です。

読み取り可能なバイト数は、65,000 を超えることはできません。この API は、avi.l4.collect と組み合わせて使用できます。ソケットに十分なバイトが存在しない場合、API はエラーを表示します。

イベント

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

バイト数

戻り値

L4 (TCP/UDP) の後のペイロードをバイトのストリームとして返します

payload = avi.l4.read() - Reads all bytes from socket buffer
payload = avi.l4.read(10) - Reads 10 bytes from socket buffer
payload = avi.l4.read(0) - Reads all bytes from socket buffer

avi.l4.collect (num_bytes)

機能

avi.l4.collect(num_bytes)

説明

ペイロードを DatasSript に適用する前に、num_bytes を収集します。

TCP/UDP アイドル タイムアウトの前に num_bytes が収集されない場合、接続はアイドル タイマーによって終了されます。

この API/DataScript は、num_bytes が利用可能になるまで生成を継続します。

イベント

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

バイト数

戻り値

現在バッファされているバイト数

Buffered = avi.l4.collect(1000)  
Payload = avi.l4.read(200)

avi.vs.log

機能

avi.vs.log()

説明

接続ログに渡されたメッセージをログに記録します。これは、接続ログ API に ds_log として表示されます。

ログに記録できる文字列の最大長は 256 です。

この API は複数回呼び出すことができるため、結果としてメッセージが連結されます。

メッセージは、メモリが不足している間のみ連結されません。

デフォルトでは、すべてのログが重要でないログですが、最後の引数として事前設定値「avi.SIG_ENABLE」を渡すことでアップグレードできます。

イベント

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

任意の数のパラメータを受け入れます。ログには、文字列、数値、ブール値、および nil 値の任意の組み合わせが含まれる場合があります。

戻り値

戻り値はありません

例 1

avi.vs.log("hello ", num, " you!")

出力:hello 2 you!

これは重要でないログとして生成されます。

例 2

avi.vs.log("hello ", num, " you!", avi.SIG_ENABLE)

出力:"hello 2 you!"

これは重要なログとして生成されます。

avi.vs.client_port

機能

avi.vs.client_port()

説明

クライアントの送信元ポートを返します。

イベント

VS_DATASCRIPT_EVT_L4_REQUEST

パラメータ

なし

戻り値

クライアントの送信元ポートを含む文字列

if avi.vs.client_port() == “60000" then
   avi.vs.close_conn()
end

avi.vs.client_ip

機能

avi.vs.client_ip()

説明

クライアントの IP アドレスを返します。

イベント

VS_DATASCRIPT_EVT_L4_REQUEST

パラメータ

なし

戻り値

クライアントの送信元 IP アドレスを含む文字列。

if avi.vs.client_ip() == "10.1.1.1" then
   avi.vs.close_conn()
end

avi.vs.table_insert

機能

avi.vs.table_insert( [table_name,] key, value [, lifetime] )

説明

テーブル API は、カスタム データの保存と取得に使用されます。avi.vs.table_insert API は、キーのキー値ストアに値を格納します。このキー値ストアは、すべての仮想サービスに対して一意であり、仮想サービスをホストしているすべての SE でミラーリングされます。

イベント

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

オプションの table_name が指定されていない場合、キー値ペアは仮想サービスのデフォルト テーブルに格納されます。指定すると、カスタム名が付いた新しいテーブルが使用されます。

複数のテーブルが含まれる仮想サービスは、テーブルごとに異なる値を持つ同じキー名を持つことができます。キーは、値を検索するために使用されます。値は、保存するカスタム データです。オプションの有効期間フラグは正の整数にする必要があります。これは、このレコードが存在する時間を秒単位で示します。

時間切れになると、キーと値はサイレントに破棄されます。有効期間フラグを指定しない場合、デフォルト値の 300 秒が使用されます。サポートされる最小有効期間は 300 秒です。

戻り値

挿入が成功した場合はブール値 true を返し、挿入が失敗した場合は false を返します。

if radius_username == “myuser” then
   avi.vs.table_insert(radius_username, “10.2.3.4:1812”, 3600)
end
注:

すでに存在するキーを挿入すると、キーの有効期間がリセットされます。キーに関連付けられている値は同じままになり、上書きされません。

avi.vs.table_remove

機能

avi.vs.table_remove( [table_name,] key)

説明

テーブル API は、カスタム データの保存と取得に使用されます。

avi.vs.table_remove API は、指定したキーのデータ ストアから指定されたキー/値ペアを削除します。

イベント

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

オプションの table_name が指定されていない場合、キー値ペアは仮想サービスのデフォルト テーブルに格納されます。指定すると、カスタム テーブルが検索されます。キーは、削除するテーブル エントリを検索するために使用されます。

戻り値

値は返されません。

if radius_username == “myuser” then
   avi.vs.table_remove(radius_username)
end

avi.vs.table_lookup

機能

avi.vs.table_lookup( [table_name,] key [, lifetime_exten] )

説明

テーブル API は、カスタム データの保存と取得に使用されます。

avi.vs.table_lookup API はキーを検索し、対応する値を返します。このキー値ストアは、すべての仮想サービスに対して一意であり、仮想サービスをホストしているすべてのサービス エンジン間でミラーリングされます。

イベント

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

オプションの table_name が指定されていない場合、仮想サービスのデフォルト テーブルでキーが検索されます。

指定すると、カスタム テーブルが検索されます。キーは、値を検索するために使用されます。オプションの lifetime_exten フラグは正の整数にする必要があります。これは、キーの現在の有効期間パラメータに追加する時間の長さを秒単位で示します。

指定しない場合、デフォルト値の 300 秒が使用されます。つまり、デフォルトでは、キーの値を検索すると、キーの有効期間がさらに 300 秒延長されます。

有効期限に影響を与えずにキーを検索するには、lifetime_exten フラグを 0 に設定します。

戻り値

検索された文字列の値を返します。文字列が無効な場合、返される値は nil です。

radius_username = “myuser”
if avi.vs.table_lookup(radius_username) then
   avi.vs.log(“Radius username ”..radius_username)
end

avi.vs.table_refresh

機能

avi.vs.table_refresh( [table_name,] key [, lifetime_exten] )

説明

キー/値ストア内のキーのエントリの有効期間を更新します。

イベント

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

オプションのテーブル名を使用して別のテーブル名を指定しない限り、デフォルトの仮想サービス テーブルでキーを検索します。キーは、目的のテーブル エントリを検索するために使用されます。オプションの lifetime_exten(正の整数)は、キー/値ストア内のエントリの有効期間を延長するための秒単位の値です。指定しない場合、エントリの有効期間を延長するためにデフォルト値の 300 秒が使用されます。これで、有効期間は lifetime_exten に設定されます。

戻り値

更新が成功した場合はブール値 true を返し、更新が失敗した場合は false を返します。

if avi.vs.client_ip() == "10.1.1.1" then
   avi.vs.table_refresh(“my_table”,”my_key”, 3600)
end

avi.pool.get_server_status

機能

avi.pool.get_server_status(pool, server, port)

説明

指定されたポートで待機しているサーバの状態を特定します

イベント

VS_DATASCRIPT_EVT_L4_REQUEST

パラメータ

3 つのパラメータ フィールドはすべて必須です。

  1. プールには、特定のプール名、または有効なプール名に評価される式を指定できます。

  2. サーバ フラグには、サーバの IPv4 アドレスを引用符で囲んで指定します。ポート フラグは、サーバの特定のサービス ポートに接続を転送します。

  3. ポートは、0 ~ 65536 の数字、または有効なポート番号に評価される式である必要があります。

戻り値

戻り値 0 は、サーバがダウンしていることを示します。戻り値 1 は、サーバが稼動中であることを示します。

if avi.pool.get_server_status("tcp-test-pool", "10.52.44.50", "80") == 0 then
   avi.vs.log(“Server is DOWN”)
end

avi.pool.select

機能

avi.pool.select( pool, server, port )

説明

現在の要求のプールまたはプール内の特定のサーバとポートを選択します。

イベント

VS_DATASCRIPT_EVT_L4_REQUEST

パラメータ

  1. pool は、特定のプール名、または有効なプール名に評価される式です。

  2. server パラメータ(文字列)には、サーバの IPv4 アドレスを引用符で囲んで指定します。

  3. port パラメータ(整数)は、サーバの特定のサービス ポートに接続を転送します。ポートは、0 ~ 65536 の数字、または有効なポート番号に評価される式である必要があります。

注意事項

プール名、サーバ名または IP アドレス、およびサーバ ポートは、明示的に呼び出されるか、Lua 式に基づいて動的に決定されます。プール名、サーバ、またはサーバ ポートが存在しないか、仮想サービスによって参照できない場合は、エラーが生成されます。

戻り値

値は返されません

要求を明示的な宛先に転送します。

avi.pool.select("radius",server, 1812)
end

avi.pool.get_server_info

機能

avi.pool.get_server_info()

説明

この要求または応答のサーバの IP アドレスとポートを返します

イベント

  • VS_DATASCRIPT_EVT_L4_REQUEST

  • VS_DATASCRIPT_EVT_L4_RESPONSE

    注:

    LB の決定が行われる前に呼び出されると、要求内の get_server_info 呼び出しが失敗する可能性があります。

パラメータ

なし

戻り値

サーバの IP アドレス(文字列)とそのポート番号

ip, port = avi.pool.get_server_info()

avi.pool.get_server_ip

機能

avi.pool.get_server_ip()

説明

この要求または応答のサーバの IP アドレスを返します

イベント

  • VS_DATASCRIPT_EVT_L4_REQUEST

  • VS_DATASCRIPT_EVT_L4_RESPONSE

    注:

    LB の決定が行われる前に呼び出されると、要求内の get_server_ip 呼び出しが失敗する可能性があります。

パラメータ

なし

戻り値

サーバの IP アドレス(文字列)

ip = avi.pool.get_server_ip()

avi.poolgroup.select

機能

avi.poolgroup.select( poolgroup)

説明

現在の要求のプール グループを選択します。プールを選択するための切り替えアクションで HTTP 要求ポリシーも構成されている場合、選択は有効になりません。HTTP 要求ポリシーの切り替えアクションは、DataScript のプール グループの選択よりも優先して実行されます。

イベント

  • HTTP_REQ

  • VS_DATASCRIPT_EVT_L4_RESPONSE

    注:

    LB の決定が行われる前に呼び出されると、要求内の get_server_ip 呼び出しが失敗する可能性があります。

パラメータ

なし

戻り値

サーバの IP アドレス(文字列)

ip = avi.pool.get_server_ip()