パケットループを検知・遮断してくれる製品は数あれど、現場の人間に音でお知らせしてくれる製品はそんなに多くないような気がします。
ということで、ヤマハさんのスイッチも検知と遮断はしてくれるものの警報音が出ないわけですが、それならばルータで鳴らしてしまえ。というお話 :)
サンプル構成
[ RTX830 : LAN1 ] --- [SWX2100-5PoE]
仕組みと設定
SyslogのInfoレベルで
[SWCTL] lan1:1(ac:44:f2:xx:xx:xx): PORT1 loop detect
こんなログが出るのでsyslogwatchしてるだけ
スイッチの設定(物理)
ディップスイッチの4番をONにして電源投入!
ヤマハルータの設定
switch control use lan1 on
lua use on
embedded file LoopDetect.lua <<EOF
CHECK_INTERVAL = 3
function Beep()
local bz, err = rt.hw.open("buzzer1")
bz:tone("B4")
rt.sleep(1)
bz:off()
bz:close()
end
function Check_Looppacket(port, hub)
while true do
local cmd = string.format("switch control function get status-loopdetect-port %d %s", port, hub)
local rtn, portstate = rt.command(cmd)
if (not rtn) then
break
end
if ( portstate:find("normal", 1, true) ) then
break
end
Beep()
rt.sleep(CHECK_INTERVAL)
end
end
function main()
local rtn, logcode = rt.syslogwatch("loop detect")
if (rtn) then
local hub, port = logcode[1]:match(/\[SWCTL\]\s(.+)\(.+\sPORT(\d+)/)
Check_Looppacket(port, hub)
end
end
while true do
main()
end
EOF
実行コマンド
lua emfs:/LoopDetect.lua
で実行
スケジュール登録は
schedule at 1 startup * lua emfs:/LoopDetect.lua
こんな感じで。
最後に
EMFS使いたすぎて わざわざRTX830を選定しましたw
EMFS機能はとても便利ですね。
TFTPでわざわざ送ったりする事も減ります。
あとは対応ルータが増えてくれれば・・・。
ただ、今回の設定だと音が鳴るのはルータなので
知らない人からするとルータが壊れたって思われてしまうのかなぁ。
でも音が小さいからラックとかに入ってると聞こえないだろうナァ。orz