--[[   ■ IPv6アドレス通知用 サンプルスクリプト Ver. 1.00                            2017.07.03 ヤマハ株式会社 本スクリプトは、指定したインターフェースに新しいIPv6プレフィックスが付与さ   れたとき、アップデートサーバーにIPv6アドレスの更新通知を行うLuaスクリプト のサンプルです。   新しいIPv6プレフィックスが付与されたことは、ルーターのSYSLOGを監視し、以下   のログが出力された場合に検知しています。   (NGN回線がLAN2に接続されている場合の例)    Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN2 by DHCPv6    Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN2 by RA   以下のコマンドが設定されていないと、上記ログは出力されないため、   必ず設定するようにしてください。    ipv6 lan2 prefix change log on   [注意事項]   ・本スクリプトは、schedule atコマンドでルーターの起動時に実行されるようにし    てください。   ・スクリプト中の「設定値」の値は、ご使用の環境に応じて変更した上でご使用く ださい。 ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アップデートサーバーのURL UPD_SV = "(アップデートサーバーのURL)" -- ユーザー名 USERNAME = "(ユーザー名)" -- パスワード PASSWORD = "(パスワード)" -- NGN回線を収容するインターフェース名 WAN_IF = "LAN2" -- IPv6プレフィックスが追加されたときの -- SYSLOGパターン LOG_PTN = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. WAN_IF .. "%s+by" -- リトライの間隔 (s) RETRY_INTVL = 10 -- リトライ回数 RETRY_NUM = 3 -- SYSLOGのレベル LOG_LEVEL = "info" -- 通知失敗時のメッセージ FAIL_MSG = "[v6plus] アップデートサーバーへの通知に失敗しました。 (リトライ: 残り%d回)" ---------------------------------------- -- メインルーチン -- ---------------------------------------- local rtn, count, log, res_t local req_t = {} local res_t -------------------- -- 初期化 -- HTTPリクエストの準備 req_t.url = string.format("%s?user=%s&pass=%s", UPD_SV, USERNAME, PASSWORD) req_t.method = "GET" -------------------- -- 監視 while true do -- SYSLOGを監視する rtn = rt.syslogwatch(LOG_PTN) -- パターンにマッチした if rtn then -- リトライ回数をリセット count = RETRY_NUM while true do -- HTTPリクエストを実行 res_t = rt.httprequest(req_t) -- 成功ならループを抜ける if res_t.rtn1 then rt.syslog(LOG_LEVEL, "[v6plus] アップデートサーバーへの通知に成功しました。") break end -- 失敗した count = count - 1 if count > 0 then -- (RETRY_INTVL)秒後、リトライ log = string.format(FAIL_MSG, count) rt.syslog(LOG_LEVEL, log) rt.sleep(RETRY_INTVL) else -- リトライ上限を超えたので諦める rt.syslog(LOG_LEVEL, "[v6plus] アップデートサーバーへの通知に失敗しました。") break end end end end