NVR500のLUAスクリプト「rt.httprequest関数」を使ってNGNのIPv6経路情報を取得できることを確認した。取得したNGN経路情報を「rt.command関数」でconfig設定してみた。
NGN経路情報を提供するIPv6サーバは、NGN内に設置されており、NVR500のdnsリゾルバで名前解決が出来る必要がある。但し、NVR500コマンド「nslookup」では、IPv6アドレスを確認できない(dns関連設定が適切でないとIPv6アドレスで接続出来るがホスト名で接続出来ないなどの不具合が発生する。結構手間取った)。
IPv6アドレスでhttpアクセスするときのURLは、
http://[2404:1a8:c023:3201::15]:49881/v6/route-info
NGNのIPv6経路情報の取得と設定は、下記の手順で実行されるよう設計した。
「経路情報ID」は、「IP通信網サービスのインターフェース(第3分冊)」の「2.5.3.2.3 メッセージボディ部」に記載された「タイプナンバー[0000]の経路情報の更新年月日」とした。取得設定した経路情報は、更新変化を確認するためNVR500の環境変数に記憶し、変化分の経路情報を追加・削除処理するようにした。
「タイプナンバー111N、121N、131N、141N」については、LUAのテーブルに読込、連想配列(文字列キー)として使用した。
LUAスクリプトは、6年前に作成した「NVR500でDynDNSの登録更新をしてみた」以来触っていなかったので難儀した。
・予約語の1文字目を大文字にして書いたら「エラー」
・変数の接頭語を小文字で書いたり、先頭文字を大文字にしたら、異なる変数
・ローカルテーブルの初期化で失敗「local t1, t2 = {}」->「local t1={}; local t2={}」
・next(t1)としてもnilテーブル確認出来なかった。next(t1,nil)とする必要があった
・正規表現を使うとうまく動作させられなかった
---
・NVR500のsetコマンドパラメータ「変数名='変数データ'」のように「=」の前後にスペースを入れるとエラー
慣れていないスクリプトは、時間が掛かる。。。。
出来上がったスクリプトがこれ
環境変数に保存されたデータ
設定されたNGNのIPv6経路情報
スケデュール設定(毎週土曜日に実行)
syslogの履歴。は、初回全てのデータを設定。は、経路情報に変化が無いため確認した「経路情報の更新年月日」を記録
--- 2018/06/09 追記 ---
スケデュール実行の結果
2011/01/14の経路情報から2018/02/02の経路情報に更新されたときの処理テストデータ
(PCで評価)
エラー発見:
スクリプトコード71行目
for plr in string.gmatch(prev_NgnRouteInfo,"[^%b--]+") do
「-」と「-」で囲まれる以外の文字列としたかったが、この表記では、「%」「b」「-」以外の文字となってしまう。
for plr in string.gmatch(prev_NgnRouteInfo,"[^-]+") do
か
for plr in string.gmatch(prev_NgnRouteInfo,"[0-9a-fA-F:/ ]+") do
です。。。
NGN経路情報を提供するIPv6サーバは、NGN内に設置されており、NVR500のdnsリゾルバで名前解決が出来る必要がある。但し、NVR500コマンド「nslookup」では、IPv6アドレスを確認できない(dns関連設定が適切でないとIPv6アドレスで接続出来るがホスト名で接続出来ないなどの不具合が発生する。結構手間取った)。
IPv6アドレスでhttpアクセスするときのURLは、
http://[2404:1a8:c023:3201::15]:49881/v6/route-info
NGNのIPv6経路情報の取得と設定は、下記の手順で実行されるよう設計した。
「経路情報ID」は、「IP通信網サービスのインターフェース(第3分冊)」の「2.5.3.2.3 メッセージボディ部」に記載された「タイプナンバー[0000]の経路情報の更新年月日」とした。取得設定した経路情報は、更新変化を確認するためNVR500の環境変数に記憶し、変化分の経路情報を追加・削除処理するようにした。
「タイプナンバー111N、121N、131N、141N」については、LUAのテーブルに読込、連想配列(文字列キー)として使用した。
LUAスクリプトは、6年前に作成した「NVR500でDynDNSの登録更新をしてみた」以来触っていなかったので難儀した。
・予約語の1文字目を大文字にして書いたら「エラー」
・変数の接頭語を小文字で書いたり、先頭文字を大文字にしたら、異なる変数
・ローカルテーブルの初期化で失敗「local t1, t2 = {}」->「local t1={}; local t2={}」
・next(t1)としてもnilテーブル確認出来なかった。next(t1,nil)とする必要があった
・正規表現を使うとうまく動作させられなかった
---
・NVR500のsetコマンドパラメータ「変数名='変数データ'」のように「=」の前後にスペースを入れるとエラー
慣れていないスクリプトは、時間が掛かる。。。。
出来上がったスクリプトがこれ
環境変数に保存されたデータ
設定されたNGNのIPv6経路情報
スケデュール設定(毎週土曜日に実行)
syslogの履歴。は、初回全てのデータを設定。は、経路情報に変化が無いため確認した「経路情報の更新年月日」を記録
--- 2018/06/09 追記 ---
スケデュール実行の結果
2011/01/14の経路情報から2018/02/02の経路情報に更新されたときの処理テストデータ
(PCで評価)
エラー発見:
スクリプトコード71行目
for plr in string.gmatch(prev_NgnRouteInfo,"[^%b--]+") do
「-」と「-」で囲まれる以外の文字列としたかったが、この表記では、「%」「b」「-」以外の文字となってしまう。
for plr in string.gmatch(prev_NgnRouteInfo,"[^-]+") do
か
for plr in string.gmatch(prev_NgnRouteInfo,"[0-9a-fA-F:/ ]+") do
です。。。