« 参考にした MZK-WNH ブートログ | トップページ | MZK-WNH を純正ファームに戻す方法(シリアル接続不要) »

2012年10月27日 (土)

MZK-WNH で動かす OpenFlow 1.0 のイメージをアップロードしました

[ 2013/03/24追記: 新しいOpenWrtをベースにファームウェアを作り直しました。こちらの記事を参照ください。 ]

MZK-WNH で OpenWRT with OpenFlow 1.0 に取り組んでいてずっと悩んでいた MAC アドレスが壊れる現象の原因がやっとわかりました。Planex のファームのブートログで出てくる Cimage という名前のフラッシュメモリの領域をぶっこわしていました...。やっぱり、W306R のカーネルそのままでいけるほど簡単ではなかった。この領域には、Planex の工場出荷時のデータが入っていたようです。factory という領域かと勘違いしてました。

さてさて、閑話休題(本来の話に戻します)!

注意: ここで公開するファームウェアは、まだまだとりあえず動いた!というレベルです。お使いの MZK-WNH が最悪まったく動かなくなりただのゴミとなる可能性もあることを覚悟した上でお使いください。

■ MZK-WNH で OpenWRT with OpenFlow 1.0 のイメージファイル

このブログが使っている ココログでは1ファイルのサイズ上限が 1Mバイトとのことで、面倒ですが3つに分割しておきました:

concat.bat img1.bin img2.bin img3.bin

3つの img*.bin ファイルを結合して1つのファイルにしてください。 Windows 用にバッチファイル concat.bat を用意しました。このバッチファイルを実行すると openwrt-mzk-wnh-v0.11.bin というファイルができます。

■インストール方法

(1) 通常の MZK-WNH のファームの更新と同じくWEBの管理画面からファームの更新をしてください。(concat.bat を使って結合した場合は、openwrt-mzk-wnh-v0.11.bin が指定するファイルです)

(2) しばらくすると、「Internet」のポートにて、IP アドレス 192.168.1.1 でアクセスできるようになります。ping コマンドなどで応答が返ってくるまでしばらく待ってください。(1分くらい?)

(3) telnet で 192.168.1.1 に接続してください。

(4) 以下のコマンドを実行

       mtd -r erase rootfs_data

  (この手順を不要にできないか悩んだが解決できず...)

(5) しばらくすると、Rebooting... と出ます。telnet はいったん抜けて、また 192.168.1.1 で ping の応答が返るようになるまでまってください。

以上できあがりです。

■どう動くのか

  1 ~ 4 と表示された4つのポートが OpenFlow スイッチのポートとして動作します。その番号がそのまま OpenFlow スイッチのポート番号に対応します。

  OpenFlow コントローラとの接続は「Internet」ポートで接続してください。デフォルトでは、TCP で IP アドレス 192.168.1.10、ポート番号 6633 に接続しようとします。

/etc/config/openflow ファイルで変更できます。

■OpenFlow コントローラとの接続実績

  OpenFlow コントローラの TREMA とつなで、TREMA のサンプルである repeater_hub と learning_switch にて2台の機器間で ping が通ることを動作を確認しています。

■カスタマイズ

OpenFlow スイッチ1台しか使わないならカスタマイズは不要ですが、複数台使う場合は変更が必要になります。ファイルの変更は vi コマンドが使えます(が、機能が色々と制限されているので使いにくい)。

(1) MZK-WNH 側 IP アドレス

  /etc/config/network ファイルで 192.168.1.1 となっているところを変更してください。

(2) OpenFlow スイッチの識別子

  /etc/config/openflow ファイルで  option 'dpid' の値として '000000000001' となっている箇所を変更してください。 これは、OpenFlow コントローラがOpenFlow スイッチを一意に識別するための識別子です。

変更したら reboot コマンドでリブートすれば次の起動時から反映されます。

■とりあえず試すには

本来なら OpenFlow コントローラが必要なのですがまずは動いているのを手っ取り早く確認したいと思います、よね。telnet で入ってコマンドで OpenFlow スイッチにフローを登録することができますのでまずはこれで遊んでみてください。

例: ポート1とポート2だけ通信できるように設定する

 dpctl del-flows unix:/var/run/dp0.sock
 dpctl add-flow unix:/var/run/dp0.sock idle_timeout=0,in_port=1,actions=output:2
 dpctl add-flow unix:/var/run/dp0.sock idle_timeout=0,in_port=2,actions=output:1

この設定は、電源を切ると失われます。

dpctl の詳細は、こちらを参照: dpctl.8

■動作ログ

  OpenFlow スイッチのログは /var/log/ofprotocol.log に出力されます。OpenFlow コントローラとの接続しにいっているかどうかはここで確認してみてください。

■性能は期待しないでください

  この OpenFlow はユーザ空間で動くものです。当然、性能は悪くなります。

  ただのハブとして動作させたとき ping の応答に 3ms もかかりました。

■最後に

本ファームを試してみた方はコメント残してもらえると嬉しいです。

ここにいたるまでにファームをぶっ壊した10台のMZK-WNH も喜ぶでしょう。

  (といっても、純正ファームに戻せなくなっただけで OpenWRT with OpenFlow としては動きますが)

« 参考にした MZK-WNH ブートログ | トップページ | MZK-WNH を純正ファームに戻す方法(シリアル接続不要) »

OpenFlow」カテゴリの記事

openwrt」カテゴリの記事

PLANEX MZK-WNH」カテゴリの記事

コメント

廃棄しようと思っていたMZK-W300NH2に入れてみました。
まだOpenFlowのことは何もわからないのですが、
OpenWRT化どころかOpenFlowSwitch化までできて2度美味しい感じです。
ありがとうございます。

以前、MZK-WNHにDD-WRTを入れたときに
同じようにMACアドレスが壊れてしまったんですが
元のMACアドレスが解れば、何とか復活できすよ。

コメントありがとうございます。
MAC アドレスの領域が壊れましたが OpenWrt として使う分には問題はありません。
MZK-WNH の底面には MAC アドレスが印刷してあって分かっているので、その MAC アドレスで OpenWrt の /etc/config/network を書き換えることで使えてます。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1776113/47612262

この記事へのトラックバック一覧です: MZK-WNH で動かす OpenFlow 1.0 のイメージをアップロードしました:

« 参考にした MZK-WNH ブートログ | トップページ | MZK-WNH を純正ファームに戻す方法(シリアル接続不要) »

最近のトラックバック

無料ブログはココログ