2012-08-31

OpenBlocksを持って全国キャラバン真っ最中

9月はOSCが3回で大変だ、とか言っていた自分、甘かった。

ちなみに、9月は、

9/1 OSC 2012 島根
9/7-8 OSC 2012 東京/Fall
9/22 OSC 2012 沖縄

の予定で、10月は広島がびぎねっとさん主催のOSCなのですが、これに加えて、地元開催が2箇所、勢いでKoF( Kansai Open Forum)も参加決定になりました。
そして、前日発表があった、OSC .Cloudにも、その勢いのまま参加予定です。
(.Cloudは、ブース展示がまだ確定していないので、暫定ですが)

10/20 OSC 2012 広島
10/27 OSC 2012 大分
11/3 OSC 2012 会津
11/9-10 KoF Kansai Open Forum
11/17 OSC .Cloud 品川

ブース展示に加え、東京と沖縄、そしておそらく大分は、OSCのセミナーカテゴリでは少し珍しいハードウェアを作る話をさせてもらう予定です。

また、9月中開催のOSCの当社展示コーナーでは、来場者限定で、コミュニティ関係者の方や、開発に興味のある方に向けて、A Familyの割引クーポンを配布しています。
お気軽に声をおかけ下さい。(ブースまたは懇親会にて。1人1枚となります)

さて、明日は、OSC 2012 Shimane。
詳細は以下の通りです。

--
日程:2012年9月1日(土) 10:00-17:10

会場:松江テルサ (島根県松江市・JR松江駅前)(アクセスマップ)

費用:無料

内容:オープンソースに関する最新情報の提供
   ・展示 - オープンソースコミュニティ、企業・団体による展示
   ・セミナー - オープンソースの最新情報を提供
   ・松江Ruby会議04と併催

主催:オープンソースカンファレンス実行委員会

共催しまねOSS協議会
   松江市
   国立大学法人島根大学


後援島根県
   一般社団法人島根県情報産業協会
   公益財団法人しまね産業振興財団
   独立行政法人国立高等専門学校機構 松江工業高等専門学校

協力:株式会社びぎねっと

--

今回もよろしくお願いします。

2012-08-28

[.tested] Logitec LAN-GTJ/U2B Gigabit対応USB有線LANアダプタ [AX3][A6]



Logitec LAN-GTJ/U2Bは、ギガビットイーサネット(1000BASE-T)に対応したUSB 2.0接続の有線LANアダプタです。
Openblocks AX3およびA6での動作検証を行いました。


OBDN技術ブログによる動作検証は、該当するデバイスの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>

OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6
OpenBlocks A6 Debian 6.0 kernel: 2.6.31.8

1. 対応ドライバと事前準備
当該デバイスは、ASIX社のAX88178を使用しています。
AX88178は、カーネル組み込みのasixドライバでサポートされており、LAN-GTJ/U2Bも認識されるのですが、カーネル組み込みのドライバでは動作しません。
対策としては、ASIX社から2012/5/18の日付で最新のドライバが公開されていますので、こちらを利用します。

ASIX 88178 Driver Download

# wget http://www.asix.com.tw/FrootAttach/drive/AX88772B_772A_760_772_178_LINUX_Driver_v4.4.0_Source.zip

# unzip AX88772B_772A_760_772_178_LINUX_Driver_v4.4.0_Source.zip
  (unzip がない場合は、aptitude コマンドによりインストールしてください)
# cd AX88772B_772A_760_772_178_LINUX_Driver_v4.4.0_Source

上記ソースにはLAN-GTJ/U2Bおよび同チップを使用した国内製品のデバイスIDの多くが登録されていないため、追加登録します。

# diff -c asix.c.orig asix.c
*** asix.c.orig Tue Aug 28 16:00:32 2012
--- asix.c      Tue Aug 28 15:59:58 2012
***************
*** 3593,3598 ****
--- 3593,3610 ----
        USB_DEVICE (0x14ea, 0xab11),
        .driver_info =  (unsigned long) &ax88178_info,
  }, {
+       // BUFFALO LUA-U2-GT, LUA2-U2-KGT, LUA3-U2-AGT
+       USB_DEVICE (0x0411, 0x006e),
+       .driver_info =  (unsigned long) &ax88178_info,
+ }, {
+       // I-O DATA ETG-US2, ETG2-US2
+       USB_DEVICE (0x04bb, 0x0930),
+       .driver_info =  (unsigned long) &ax88178_info,
+ }, {
+       // Logitec LAN-GTJ/U2A
+       USB_DEVICE (0x0789, 0x0160),
+       .driver_info =  (unsigned long) &ax88178_info,
+ }, {
        // Belkin
        USB_DEVICE (0x050d, 0x5055),
        .driver_info =  (unsigned long) &belkin178_info,

makeおよびインストールを行います。ドライバは、標準で組み込まれたドライバに上書きされます。
(SSDを使わず、initrdのみで使用する場合は、asix.koを入れ替えた後、flashcfg -S コマンドによりFlashROMに保存します。)

# make
# make install

dmesgでは以下の様に表示されます。(A6の場合)

usb 1-1: new high speed USB device using ehci_marvell and address 3
usb 1-1: string descriptor 0 read error: -75
usb 1-1: configuration #1 chosen from 1 choice
ASIX USB Ethernet Adapter:v4.4.0 15:40:58 Aug 28 2012
<6>    http://www.asix.com.tw
eth%d: status ep1in, 8 bytes period 11
eth1: register 'asix' at usb-ehci_marvell.70059-1, ASIX AX88178 USB 2.0 Ethernet, 00:01:8e:61:ac:07
.
インターフェースは、他に追加デバイスをつけていないならば、A6はeth1、AX3/2はeth2、AX3/4はeth4になります。

2. デバイスの使用方法

本デバイスは、内蔵のeth0等と同様に、/etc/network/interfacesで起動時の設定を行います。

auto eth1
iface eth1 inet static
     address 192.168.253.254
     network 192.168.253.0
     netmask 255.255.255.0
     broadcast 192.168.253.255

3. 1000BASE-TXおよび100BASE-TX Hubとのリンクの確認

1000BASE-TXのSwitch Hubおよび100BASE-TXのSwitch Hubに接続し、それぞれ1000BASE-TX、100BASE-TXにてリンクアップしているのを確認しました。

4. USB Hub経由での動作確認

USB Hub経由で当該デバイスを接続し、動作を確認しました。
今回は、USB無線LANモジュール、LAN-W150N/U2を合わせて使用しています。



[PR]

2012-08-22

[.tested] Silex SX-PCEGN(P)+ PCI-E 無線LANモジュール [AX3]



Silex SX-PCEGN(P)+は、IEEE 802.11b/g/n対応の組込み型小型高速無線LANモジュールです。
Openblocks AX3において、クライアント側およびアクセスポイント(無線LANブリッジ)として設定、検証しました。



OBDN技術ブログによる動作検証は、該当するデバイスの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>

OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6

1. 対応ドライバと事前確認

Qualcomm Atheros社製 AR9287チップセットを使用しており、AX3のkernel-3.0.6では、ath9kドライバでサポートされます。
本ドライバは、出荷時のカーネルには組み込まれており、再構築の必要はありません。

dmesgは以下の通りです。

ath: EEPROM regdomain: 0x88
ath: EEPROM indicates we should expect a direct regpair map
ath: Country alpha2 being used: JP
ath: Regpair used: 0x88
ieee80211 phy0: Selected rate control algorithm 'ath9k_rate_control'
Registered led device: ath9k-phy0
ieee80211 phy0: Atheros AR9287 Rev:2 mem=0xf19c0000, irq=58

インタフェースはwlan0となります。

2. クライアントとして使用する場合

<wpasupplicantパッケージの導入と設定>

# aptitude install wpasupplicant

wpa_supplicantの設定ファイルの雛形を作るために、次のコマンド

# wpa_passphrase SSID パスフレーズ  > /etc/wpa_supplicant/wpa_supplicant.conf

を実行します。SSIDとパスフレーズは、使用される環境の設定に置き換えてください。

ファイル/etc/wpa_supplicant/wpa_supplicant.confを編集します。

ssidとpskは記述済みです。必要に応じて設定ファイルを変更してください。
WPA-PSK/WPA2-PSKの例は以下の通りです。

network={
        ssid="SSID"
        key_mgmt=WPA-PSK
        proto=WPA WPA2
        pairwise=CCMP TKIP
        group=CCMP TKIP
        #psk="パスフレーズ"
        psk=暗号化されたパスフレーズ
}

<インタフェースの設定>
/etc/network/interfacesに、以下の行

auto wlan0
iface wlan0 inet dhcp
wpa-conf        /etc/wpa_supplicant/wpa_supplicant.conf

を追加します。

そのまま動作確認する場合は、以下のコマンドでwlan0インタフェースをupして下さい。

# ifup wlan0

3. アクセスポイント(無線LANブリッジ)として使用する場合

wlan0およびeth0をブリッジ接続し、hostapdによりワイヤレスサービスを行います。

事前準備として、hostapd、bridge-utils、iwの各パッケージを導入します。

# aptitude install hostapd bridge-utils iw

<ブリッジの設定>

wlan0は、4addrモードへ設定する必要があります。debian/squeezeのiwコマンドの場合は、

iw dev wlan0 del
iw phy phy0 interface add wlan0 type managed 4addr on

とする必要があるため、これをインタフェースがupする前にpre-upにて実行させます。

auto eth0
iface eth0 inet static
address 0.0.0.0

auto wlan0
iface wlan0 inet manual
pre-up iw dev wlan0 del
pre-up iw phy phy0 interface add wlan0 type managed 4addr on

# Bridge network interface
auto br0
iface br0 inet static
address 172.16.12.248
netmask 255.255.255.0
network 172.16.12.0
broadcast 172.16.12.255
gateway 172.16.12.5
dns-nameservers 172.16.12.6
bridge_ports eth0 wlan0
bridge_stp off

<hostapdの設定>
設定ファイルとして、/etc/hostapd/hostapd.conf を以下の様に記述します。

interface=wlan0
bridge=br0
driver=nl80211

country_code=JP
ieee80211d=1

ssid=<SSID>
channel=6
hw_mode=g

wpa=2
wpa_passphrase=<設定するパスフレーズ>

wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

ieee80211n=1
wmm_enabled=1

debian/squeeze のhostapdパッケージ

起動時に自動実行させるためには、/etc/default/hostapdの以下の行を有効にします。

DAEMON_CONF="/etc/hostapd/hostapd.conf"

上記の設定により、無線LANブリッジとしての動作を確認しました。

<hostapd最新版の導入>
debian/squeezeのhostapdパッケージ(0.6)ではなく、hostapd-1.0の導入方法は以下の通りです。
手順としては、

hostapd-1.0のソースパッケージを入手
# wget http://hostap.epitest.fi/releases/hostapd-1.0.tar.gz

ビルドに必要なライブラリのインストール
# aptitude install libssl-dev libnl-dev

パッケージの展開
# tar xvzf hostapd-1.0.tar.gz
# cd hostapd-1.0/hostapd

.configの修正

# cp defconfig .config

以下の部分のコメントを外します。(802.11nを有効にする)
# IEEE 802.11n (High Throughput) support
CONFIG_IEEE80211N=y

ビルド/インストール
# make
# make install

起動時の立ち上げは、debian/squeezeのパッケージから若干修正が必要です。

# vi /etc/init.d/hostapd

DAEMON_SBIN=/usr/local/bin/hostapd

今回は、無線LANモジュールの認識、クライアントとしての設定、AP(ブリッジ)としての設定を行い、動作の検証を行いました。
パフォーマンスのチューニングおよび、性能測定に関しては別途行いたいと思います。

なお、今回使用したモジュールは、組み込み用のサンプルをお借りして、検証のみに使用しています。当社PlatOnlineでもサンプルの販売は可能ですが、あくまでも単体でのサンプル価格であることをご理解下さい。
また、本製品は、付属のアンテナとともに使用する上においては、TELEC認証を取得していますが、クライアント接続に限定されており、APとして利用する場合は、機器全体でTELEC認証を再取得する必要があります。
AX3向けの純正オプションとして、PCI-E接続による無線LANモジュールを準備中であり、その場合はAPでの使用も考慮した認証取得を行う予定です。


[PR]

2012-08-21

[.tested] Digi Watchport USBセンサーユニット [AX3][A6]



Digi Watchportは、USB接続のセンサーシリーズです。
Watchport/D(距離センサー)および、Watchport/Wをお借りし、OpenBlocks AX3およびA6での接続検証を行いました。



OBDN技術ブログによる動作検証は、該当するデバイスの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6
OpenBlocks A6 Debian 6.0 kernel: 2.6.31.8

1. 対応ドライバと事前準備
Digi Watchportシリーズは、TI UMPシリーズを使用しており、io_tiによりサポートされます。
本ドライバは、AX3およびA6向けにリリースされるカーネルには標準で組み込まれています。

dmesgでは、以下のメッセージが表示されます。(AX3の場合)

usb 1-1: new full speed USB device number 2 using ehci_marvell
usb 1-1: New USB device found, idVendor=1608, idProduct=030b
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1: Product: Watchport/D
usb 1-1: Manufacturer: Inside Out Networks
usb 1-1: SerialNumber: V61483226-0
usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for Edgeport TI 1 port adapter
USB Serial support registered for Edgeport TI 2 port adapter
io_ti 1-1:1.0: Edgeport TI 1 port adapter converter detected
usb 1-1: Edgeport TI 1 port adapter converter now attached to ttyUSB0
usbcore: registered new interface driver io_ti
io_ti: v0.7mode043006:Edgeport USB Serial Driver

デバイス名は、
/dev/ttyUSB0
となります、

2. 動作テスト方法
Watchportは、AX3またはA6本体のUSBポートに差し込む事により使用可能となります。
起動前/後に係らず、設定は必要ありません。

cuによる動作テストは以下の方法で行います。Dタイプの場合は、マニュアルを参照して、d<cr>とタイプし、結果が返ってくるのを確認してください。

# cu -l ttyUSB0 -s 9600
Connected.
26cm

上記は、Dセンサでの検証になります。Wセンサに関しては、別途マニュアルを参照願います。

--
2012/10/5 Wセンサの接続を確認しました。


[PR]

2012-08-09

OpenBlocks AX3でOpenFlowを試してみる

本文中に記載のLinuxソースコードは、開発段階のものです。
実際にお試しになる場合は、正式公開するバージョンに適宜読み替えて下さい。
また検証環境では、ストレージ併用モードを使用しています。


◆はじめに

以前OpenBlocks 600DにOpenvSwitchを導入しました。今回はOpenBlocks AX3に導入してみてどの程度の性能がでるか確認を行います。
さらに、以前OpenFlow ControllerとしてTremaを試してみましたが、今回はOepnFlowコントローラのNOXおよびPOXを試してみます。


◆OpenBlocks AX3へのOpen vSwitch導入

まずはopenvswitchコンパイルの準備としてlibssl-dev, pkg-configパッケージをインストールします。
 # aptitude install libssl-dev pkg-config
openvswitchの転送処理は前回同様カーネルモジュールで行うため、まずはlinuxカーネルのソースツリーが必要となります。
そこでソースを取得してbuildを行います。ちなみに、openvswitchのカーネルモジュールはlinux 3.3以降ではカーネルに含まれるようになりましたが、OpenBlocks AX3で採用しているlinux 3.0.6ではまだ含まれていませんので別途モジュール作成が必要となります。
 $ cd /tmp
 $ wget ftp://ftp.plathome.co.jp/pub/OBSAX3/CURRENT-20120703/source/ax3/linux-3.0.6.tar.gz
 $ su
 # cd /usr/src
 # tar zxvf /tmp/linux-3.0.6.tar.gz
 (今回はAX3上でtarの展開がうまく行かなかったため他のマシンで展開したものをコピーして利用しました)
 # ln -s linux-3.0.6 linux
 # cd linux
 # make obsax3_defconfig
 # make menuconfig
 # make uImage modules
 # make modules_install
つぎにopenvswitchのソースを取得してbuildを行います。今回は7月29日時点での最新版の1.6.1を使用しました。
 $ wget http://openvswitch.org/releases/openvswitch-1.6.1.tar.gz
 $ tar zxvf openvswitch-1.6.1.tar.gz
 $ cd openvswitch-1.6.1
 $ ./configure --with-linux=/lib/modules/`uname -r`/build
 $ make
makeが問題なく通ったらmake installを行います。/usr/local以下にインストールされます。
さらに作成したモジュールをinsmodします。
 $ su
 # make install
 # insmod datapath/linux/openvswitch_mod.ko
特にエラーメッセージ等が出なければ準備完了となります。

次にopenvswitchの基本動作を確認します。
まずはデータベースを新たに作成しデータベースサーバを起動、初期化をします。
続いてovs-vswitchdデーモンを起動します。
 # mkdir -p /usr/local/etc/openvswitch
 # ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
 2012-07-30T02:18:38Z|00001|lockfile|INFO|/usr/local/etc/openvswitch/.conf.db.~lock~: lock file does not exist, creating

 # ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
                     --remote=db:Open_vSwitch,manager_options \
                     --private-key=db:SSL,private_key \
                     --certificate=db:SSL,certificate \
                     --bootstrap-ca-cert=db:SSL,ca_cert \
                     --pidfile --detach

 # ovs-vsctl --no-wait init

 # ovs-vswitchd --pidfile --detach
 2012-07-30T02:19:50Z|00001|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connecting...
 2012-07-30T02:19:50Z|00002|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connected
基本動作としてeth0, eth1, eth2, eth3をブリッジさせる動作を確認します。
 # ovs-vsctl add-br br0
 # ovs-vsctl add-port br0 eth0
 # ovs-vsctl add-port br0 eth1
 # ovs-vsctl add-port br0 eth2
 # ovs-vsctl add-port br0 eth3
 # ifconfig br0 up
ここまでで準備は完了です。


◆OpenBlocks AX3でのOpen vSwitch性能測定

検証用のネットワーク構成は以下のようにします。
















OBSAX3#1でopenvswitchを動作させた状態でOBSAX3#2からPC#1へのpingやsshできることを確認します。

基本動作が確認できたところでOBSAX3#1のopenvswitchの性能測定を行います。
OBSAX3#2とPC#1間でnuttcpを使用して確認します。なお確認はmtu 1500のみで行いました。

まずPC#1でnuttcpをサーバモードで起動します。
 PC-1# nuttcp -S
そして、OBSAX3#2ではnuttcpをクライアントモードで起動し、10秒間測定します。
 obsax3-2# nuttcp -i1 -T10 192.168.111.14
 1119.3750 MB /  10.02 sec =  937.1064 Mbps 35 %TX 24 %RX 0 retrans 0.75 msRTT
結果は上記のように約940Mbpsの性能となりました。openvswitchなしでPC#1とobsax3#2を直結した場合でもほぼ同様の結果となりました。
測定に使用した機材の関係上この性能までしか確認できませんでしたががまだ余力がありそうな感じです。


◆Openflowパケット解析用のwireshark pluginをインストール

Openflowパケット解析のためにwiresharkのpluginをインストールします。
その前にまずはwiresharkパッケージをインストールします。
 $ su
 # aptitude install wireshark
次にpluginのソースを取得しbuildします。
 $ git clone git://gitosis.stanford.edu/openflow.git
 $ cd openflow/utilities/wireshark_dissectors/
 $ make
 # make install
make installを行うと/usr/lib/wireshark/plugins/packet-openflow.so
がインストールされwireshark, tsharkコマンドでこのpluginが利用可能となります。


◆OpenFlowコントローラNOXとPOXについて

NOXは最近VMware社に買収されたことでも話題になったNicira社がオープンソースとして公開しているOpenFlowコントローラです。
以前はC++およびPythonをサポートしていましたが、最近はC++のみのNOX、PythonのみのPOXと別物になっています。
以前のC++,Python両方をサポートしたNOXはNOX Classicという名前になっています。


















新しいNOX(C++版)をbuildするためにはlibtbbが必要となります。ところがlibtbbはIntelプロセッサのみのサポートとなっていますので、ARMプロセッサのOpenBlocks AX3では利用できません。
そこで今回は、NOX ClassicおよびPOXの二つのコントローラを試してみることにします。
なお、今回もOpen vSwitchを動作させるマシンとOpenflowコントローラを動作させるマシンは同一のマシン(OBSAX3#1)とします。


◆NOX Classicの導入

まずはNOX Classicのコンパイルに必要なパッケージをインストールします。
 $ su
 # aptitude install doxygen build-essential autoconf automake make g++ libtool python libssl-dev libboost-dev
 # aptitude install libboost-filesystem-dev libboost-test-dev libboost-serialization-dev python-twisted swig
続いてNOX Classicのソースをダウンロードしてbuildします。
今回利用したバージョンはcommit aee2a3fb696a497a87a30cfc3285d142a464cbc0 です。
 $ cd ~
 $ git clone http://github.com/noxrepo/nox-classic.git
 $ cd nox-classic
 $ ./boot.sh
 $ mkdir build
 $ cd build
 $ ../configure
 $ make
 $ cd src
 $ make check
make checkで特に問題なければ導入は完了です。


◆NOX Classicを動かしてみる

NOXにはスイッチ動作を行うサンプルが附属しているので試してみます。
C++版は ~/nox-classic/build/src/nox/coreapps/switch/ にあります。
 $ cd ~/nox-classic/build/src
 $ ./nox_core -v -i ptcp:6633 switch
これでOpenflowコントローラが起動しました。
次にOpen vSwitchをOpenflowコントローラに接続します。
 $ su
 # ovs-vsctl set-controller br0 tcp:127.0.0.1
OBSAX3#2からPC#1へpingを行って応答が返ることを確認します。
 obsax3-2$ ping -n 192.168.111.14
 PING 192.168.111.14 (192.168.111.14) 56(84) bytes of data.
 64 bytes from 192.168.111.14: icmp_req=1 ttl=64 time=8.05 ms
 64 bytes from 192.168.111.14: icmp_req=2 ttl=64 time=0.502 ms
 64 bytes from 192.168.111.14: icmp_req=3 ttl=64 time=0.347 ms
 64 bytes from 192.168.111.14: icmp_req=4 ttl=64 time=0.348 ms
このときtsharkでOpenflowパケットを観察してみると以下のようになりました。
 $ su
 # tshark -R of -i lo port 6633
   1.089456 PlatC2_00:05:35 -> Broadcast    OFP+ARP Packet In (AM) (BufID=8105) (78B) => Who has 192.168.111.14?  Tell 192.168.111.221
   1.089771    127.0.0.1 -> 127.0.0.1    OFP Packet Out (CSM) (BufID=8105) (24B)
   1.090701 XX:XX:XX:XX:XX:XX -> PlatC2_00:05:35 OFP+ARP Packet In (AM) (BufID=8106) (78B) => 192.168.111.14 is at XX:XX:XX:XX:XX:XX
   1.090953    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)
   1.092047 192.168.111.221 -> 192.168.111.14 OFP+ICMP Packet In (AM) (BufID=8107) (116B) => Echo (ping) request
   1.092298    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)
   1.093204 192.168.111.14 -> 192.168.111.221 OFP+ICMP Packet In (AM) (BufID=8108) (116B) => Echo (ping) reply
   1.093452    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)

◆POXの導入

POXの利用には正式にはPython 2.7が必要なようですが、OpenBlocks AX3(Debian Squeeze)にインストールされているPython 2.6.6 でも動くようなのでこれを利用します。

Python版のPOXはC++版のNOXに比べて必要なものが少ないため導入が簡単です。
POXのソースをダウンロードします。今回利用したものはcommit f95dd1a81584d716823bbf565fa68254416af603 です。
 $ cd ~
 $ git clone http://github.com/noxrepo/pox.git
全てpythonなのでコンパイルは不要ですぐに使用できます。


◆POXを動かしてみる

まずはOpen vSwitchをNOXから切り離しNOXをCtrl-Cで中断します。
 $ su
 # ovs-vsctl del-controller br0

 # ./nox_core ... (Ctrl-C)
準備ができたのでPOXに附属のl2スイッチを試してみます。
参考までにソースは~/pox/pox/forwarding/l2_learning.py です。
 $ cd ~/pox
 $ ./pox.py forwarding.l2_learning
 POX 0.0.0 / Copyright 2011 James McCauley
 DEBUG:core:POX 0.0.0 going up...
 DEBUG:core:Running on CPython (2.6.6/Dec 27 2010 21:57:32)
 INFO:core:POX 0.0.0 is up.
 This program comes with ABSOLUTELY NO WARRANTY.  This program is free software,
 and you are welcome to redistribute it under certain conditions.
 Type 'help(pox.license)' for details.
 DEBUG:openflow.of_01:Listening for connections on 0.0.0.0:6633
 Ready.
 POX>
これでOpenflowコントローラPOXが起動しました。
次にOpen vSwitchをOpenflowコントローラに接続します。
 $ su
 # ovs-vsctl set-controller br0 tcp:127.0.0.1
OBSAX3#2からPC#1へpingを行って応答が返ることを確認します。
 obsax3-2$ ping -n 192.168.111.14
 PING 192.168.111.14 (192.168.111.14) 56(84) bytes of data.
 64 bytes from 192.168.111.14: icmp_req=1 ttl=64 time=33.9 ms
 64 bytes from 192.168.111.14: icmp_req=2 ttl=64 time=0.787 ms
 64 bytes from 192.168.111.14: icmp_req=3 ttl=64 time=0.482 ms
 64 bytes from 192.168.111.14: icmp_req=4 ttl=64 time=0.471 ms
このときPOXを起動したコンソールには以下のようにDEBUGメッセージが表示されます。
 DEBUG:forwarding.l2_learning:installing flow for 00:0a:85:00:05:35.1 -> XX:XX:XX:XX:XX:XX.4
 DEBUG:forwarding.l2_learning:installing flow for XX:XX:XX:XX:XX:XX.4 -> 00:0a:85:00:05:35.1
またtsharkでOpenflowパケットを観察してみると以下のようになりました。
  4.554923 PlatC2_00:05:35 -> Broadcast    OFP+ARP Packet In (AM) (BufID=281) (78B) => Who has 192.168.111.14?  Tell 192.168.111.221
  4.580751    127.0.0.1 -> 127.0.0.1    OFP Packet Out (CSM) (BufID=281) (16B)
  5.554998 PlatC2_00:05:35 -> Broadcast    OFP+ARP Packet In (AM) (BufID=282) (78B) => Who has 192.168.111.14?  Tell 192.168.111.221
  5.590975    127.0.0.1 -> 127.0.0.1    OFP Packet Out (CSM) (BufID=282) (24B)
  5.591595 XX:XX:XX:XX:XX:XX -> PlatC2_00:05:35 OFP+ARP Packet In (AM) (BufID=283) (78B) => 192.168.111.14 is at XX:XX:XX:XX:XX:XX
  5.595215    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)
  5.595942 192.168.111.221 -> 192.168.111.14 OFP+ICMP Packet In (AM) (BufID=284) (116B) => Echo (ping) request
  5.595998 192.168.111.221 -> 192.168.111.14 OFP+ICMP Packet In (AM) (BufID=285) (116B) => Echo (ping) request
  5.600189    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)
  5.600744 192.168.111.14 -> 192.168.111.221 OFP+ICMP Packet In (AM) (BufID=286) (116B) => Echo (ping) reply
  5.604300    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)
  5.604831 192.168.111.14 -> 192.168.111.221 OFP+ICMP Packet In (AM) (BufID=287) (116B) => Echo (ping) reply
  5.608876    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)
  5.639848    127.0.0.1 -> 127.0.0.1    OFP Flow Mod (CSM) (80B)
コントローラにはARPやICMPが2個ずつ届いていますがNOXとほぼ同様のフローとなっています。


◆まとめ

OpenBlocks AX3でOpen vSwitchを動作させてみました。転送性能は約940Mbpsであることを確認しました。
またOpenflowコントローラのNOX ClassicおよびPOXをOpenBlocks AX3上で動作できることを確認しました。

2012-08-08

[.tested] RATOC REX-USBDVI2 最新版udlfbの導入 [AX3]



AX3に加えて、A6においても、Displaylink DL-195を使用した、USBディスプレイアダプタ REX-USBDVI2の動作検証を行ったのですが、A6と同様に、AX3に関しても、udlfbをplagableから最新のソースツリーをgit cloneして検証しました。

以前の検証記事はこちら。
【.tested】RATOC REX-USBDVI2 ディスプレイアダプタ [AX3]

1. カーネルの再構成
前回は、3.0.6カーネルに組み込まれたmoduleを使用しましたが、今回は、別に組み込むため、CONFIG_FB_UDLをコメントアウトして、カーネルを再構築します。
# CONFIG_FB_UDL=m

前回使用したカーネルではudlfb回りは標準のdefconfigのままですが、もし、独自にカーネルを構築している場合は、A6での検証記事を参考にして、必要なCONFIGを追加してください。

2. udlfbの作成
gitをインストールしていない場合は、以下の手順によりインストールしてください。

# aptitude install git-core

udlfbのソースコードを入手します。

# git clone http://git.plugable.com/webdav/udlfb

udlfbディレクトリ下にソースコードが展開されます。

# cd udlfb
# make
# make install

3. xf86-driver-displaylink ドライバの構築
今回は、前回構築したものを使いました。
構築方法は、
【.tested】RATOC REX-USBDVI2 ディスプレイアダプタ [AX3]
を参考にしてください。

4. Xorgの設定
/etc/X11/xorg.confに以下の設定をしてください。


Section "Files"
ModulePath "/usr/lib/xorg/modules"
ModulePath "/usr/local/lib/xorg/modules"
EndSection
Section "Device"
        Identifier      "DisplayLinkDevice"
        driver          "displaylink"
        Option  "fbdev" "/dev/fb0"
EndSection

5. 動作検証
1920x1080 LCDディスプレイを使用してみました。






3.0.6カーネルに含まれるものと、バージョンは0.4と同じであるため、新しいデバイスなどへのアプローチをしないならば、前回の設定のままでも良いかもしれません。

[PR]

2012-08-07

[.tested] RATOC REX-USBDVI2 ディスプレイアダプタ [A6]



RATOC REX-USBDVI2は、USBディスプレイアダプタです。
OpenBlocks A6での接続検証を行いました。

--
 2012/8/8 最新のudlfbソースコードを用いて動作確認し、記事を修正しました。 


OBDN技術ブログによる動作検証は、該当するデバイスの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks A6 Debian 6.0 kernel: 2.6.31.8
REX-USBDVI2 USBディスプレイアダプタ
OKI Minikeyboard Pro ポインティングデバイス付きミニキーボード
ELECOM U2H-TZS410B USBハブ

1. カーネルの再構築
以下のCONFIGを有効にして、カーネルの再構築を行います。
なお、カーネルの再構築に関しては、あらかじめSSD上にswapファイルを作成し、使用できる状態にしておく必要があります。

<USBキーボードおよびマウスへの対応>
CONFIG_INPUT_EVDEV=y

<Virtual Terminalの設定>
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y

<Graphics Support / FB >
CONFIG_FB=y
CONFIG_FB_CFB_IMAGEBLIT=m
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_VIRTUAL=m

ただし、上記のconfigを追加して、/usr/src/linux下にて

# make obsa6_defconfig arch=ARM oldconfig

を行っても、
CONFIG_FB_CFB_IMAGEBLIT=m
CONFIG_FB_DEFERRED_IO=y
がうまく組み込まれません。
対策としては、他のディスプレイドライバ(たとえばS3等)を組み込むなどの方法があるようですが、今回は、山下さんのハックしようのページから、

第三世代 LinkStation/玄箱をハックしよう

のページを参考に、Kconfigを書き換えてみました。

---
root@obsa6:/usr/src/linux/drivers/video# diff -c Kconfig.orig Kconfig
*** Kconfig.orig        Sat Aug  4 10:17:28 2012
--- Kconfig     Mon Aug  6 17:03:42 2012
***************
*** 114,120 ****
  config FB_CFB_IMAGEBLIT
        tristate
        depends on FB
!       default n
        ---help---
          Include the cfb_imageblit function for generic software image
          blitting. This is used by drivers that don't provide their own
--- 114,120 ----
  config FB_CFB_IMAGEBLIT
        tristate
        depends on FB
!       default m
        ---help---
          Include the cfb_imageblit function for generic software image
          blitting. This is used by drivers that don't provide their own
***************
*** 188,193 ****
--- 188,194 ----
  config FB_DEFERRED_IO
        bool
        depends on FB
+       default y

  config FB_HECUBA
        tristate

---

上記の修正をして、カーネルの再構築を行います。

2. X11パッケージの導入
X11の環境をインストールします。
Displaylink用Xserverの構築に必要な環境も合わせてインストールします。

# aptitude install xorg
# aptitude install xserver-xorg
# aptitude install xserver-xorg-dev

その他、ウィンドウマネージャ等、X11関連のパッケージリストは以下にありますので、環境整備に必要と思われるものをインストールしてください。


Debian リファレンス / 第7章 X Window システム

3. ディスプレイドライバの準備
REX-USBDVI2は、Displaylink社DL-195を使用しており、FrameBuffer用のドライバとして、udlfbを、
Xorg用のドライバとして、
xf86-driver-displaylink ( udlfb-0.2.3_and_xf86-video-displaylink-0.3.tar.gz )
を使用します。

<udlfb>
udlfbに関しては、A6標準の2.6.31カーネルにもドライバが組み込まれていますが、バージョンが古いため、最新のudlfbを入手し、インストールします。
gitをインストールしていない場合は、以下の手順によりインストールしてください。

# aptitude install git-core

udlfbのソースコードを入手します。

# git clone http://git.plugable.com/webdav/udlfb

udlfbディレクトリ下にソースコードが展開されます。

# cd udlfb
# make
# make install

dmesgでは、以下のメッセージが表示されます。

usb 1-1.1: new high speed USB device using ehci_marvell and address 6
usb 1-1.1: device descriptor read/64, error -32
usb 1-1.1: configuration #1 chosen from 1 choice
udlfb: DisplayLink REX-USBDVI2 - serial #240450
udlfb: vid_17e9&pid_0129&rev_0001 driver's dlfb_data struct at d2168000
udlfb: console enable=1
udlfb: fb_defio enable=1
udlfb: shadow enable=1
udlfb: vendor descriptor length:29 data:29 5f 01 0027 00 04 04 01 00 03
udlfb: udlfb: DL chip limited to 2360000 pixel modes
udlfb: allocated 4 65024 byte urbs
usbcore: registered new interface driver udlfb
udlfb: 1280x1024 @ 60 Hz valid mode
udlfb: 720x400 @ 70 Hz valid mode
udlfb: 640x480 @ 60 Hz valid mode
udlfb: 640x480 @ 67 Hz valid mode
udlfb: 640x480 @ 72 Hz valid mode
udlfb: 640x480 @ 75 Hz valid mode
udlfb: 800x600 @ 56 Hz valid mode
udlfb: 800x600 @ 60 Hz valid mode
udlfb: 800x600 @ 72 Hz valid mode
udlfb: 800x600 @ 75 Hz valid mode
udlfb: 832x624 @ 75 Hz valid mode
udlfb: 1024x768 @ 60 Hz valid mode
udlfb: 1024x768 @ 70 Hz valid mode
udlfb: 1024x768 @ 75 Hz valid mode
udlfb: 1280x1024 @ 75 Hz valid mode
udlfb: 1152x864 @ 75 Hz valid mode
udlfb: 1280x1024 @ 60 Hz valid mode
udlfb: 1280x960 @ 60 Hz valid mode
udlfb: 1152x864 @ 75 Hz valid mode
udlfb: udlfb: Reallocating framebuffer. Addresses will change!
udlfb: 1280x1024 @ 60 Hz valid mode
udlfb: set_par mode 1280x1024
udlfb: DisplayLink USB device /dev/fb0 attached. 1280x1024 resolution. Using 5120K framebuffer memory
udlfb: open /dev/fb0 user=1 fb_info=da12b800 count=1
udlfb: udlfb: released /dev/fb0 user=1 count=0
udlfb: open /dev/fb0 user=1 fb_info=da12b800 count=1
udlfb: open /dev/fb0 user=1 fb_info=da12b800 count=2
udlfb: /dev/fb0 FB_BLANK mode 0 --> 0

また、fbsetコマンドにより設定の確認が出来ます。
出荷状態ではfbsetが無いため、以下の手順でパッケージをインストールして下さい。

# aptitude install fbset

# fbset -i

udlfb: open /dev/fb0 user=1 fb_info=da12b800 count=3

mode "1280x1024-udlfb: udlfb: released /dev/fb0 user=1 count=2
60"
    # D: 108.003 MHz, H: 63.983 kHz, V: 60.021 Hz
    geometry 1280 1024 1280 1024 16
    timings 9259 248 48 38 1 112 3
    hsync high
    vsync high
    rgba 5/11,6/5,5/0,0/0
endmode

Frame buffer device information:
    Name        : udlfb
    Address     : 0xe0983000
    Size        : 2621440
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 0
    YPanStep    : 0
    YWrapStep   : 0
    LineLength  : 2560
    Accelerator : No

<xf86-driver-displaylink>
wgetによりドライバの構築環境を取得します。

# wget http://projects.unbit.it/downloads/udlfb-0.2.3_and_xf86-video-displaylink-0.3.tar.gz

取得したソースコードを展開します。

# tar zxf udlfb-0.2.3_and_xf86-video-displaylink-0.3.tar.gz

上記の展開により、
udlfb
xf86-video-displaylink
の2つのディレクトリにそれぞれのソースコードが展開されますが、udlfbは使用しません。

xf86-video-displaylinkへ移動します。

makeの前に、今回使用した環境では、ソースコードの一部に修正を加える必要があります。
以下のページを参考にしてください。

DL + Ubuntu 10.04 working OK

以下の部分を修正してください。

diff -Nu displaylink.c.orig displaylink.c
--- displaylink.c.orig    2009-06-11 02:38:15.000000000 +1200
+++ displaylink.c    2010-05-02 16:16:56.000000000 +1200
@@ -46,9 +46,6 @@

 #include "fb.h"

-#include "xf86Resources.h"
-#include "xf86RAC.h"
-
 #include "fbdevhw.h"


@@ -282,10 +279,6 @@

     fPtr->pEnt = xf86GetEntityInfo(pScrn->entityList[0]);

-    pScrn->racMemFlags = RAC_FB | RAC_COLORMAP | RAC_CURSOR | RAC_VIEWPORT;
-    /* XXX Is this right?  Can probably remove RAC_FB */
-    pScrn->racIoFlags = RAC_FB | RAC_COLORMAP | RAC_CURSOR | RAC_VIEWPORT;
-
     /* open device */
     if (!fbdevHWInit(pScrn,NULL,xf86FindOptionValue(fPtr->pEnt->device->options,"fbdev")))
         return FALSE;
@@ -545,8 +538,6 @@

     xf86DPMSInit(pScreen, fbdevHWDPMSSetWeak(), 0);

-    xf86CrtcScreenInit (pScreen);
-
     pScreen->SaveScreen = fbdevHWSaveScreenWeak();

     /* Wrap the current CloseScreen function */


上記の修正の後、makeし、install します。出荷状態の場合、pkg-configが含まれていませんので、パッケージ導入する必要があります。

# aptitude install  pkg-config

# cd displaylink/
# ./configure
# make

# sudo make install

4. Xorgの設定
/etc/X11/xorg.confに以下の設定をしてください。

Section "Files"
ModulePath "/usr/lib/xorg/modules"
ModulePath "/usr/local/lib/xorg/modules"
EndSection

Section "Device"
        Identifier      "DisplayLinkDevice"
        driver          "displaylink"
        Option  "fbdev" "/dev/fb0"
EndSection

3. Xの起動のテストと、ウィンドウマネージャの導入

今回のテストにおいても、以下のgnomeのパッケージをインストールし、gdmによりログインが可能な状態としてみました。

#aptitude install gnome-desktop-environment

日本語環境およびchromiumブラウザなどはDebian/squeezeのパッケージを入れています。
モニタは、1280x1024 LCDモニタです。


1920x1080dot のLCDモニタにおいても、若干転送が苦しい感じはしますが、出力は可能です。


--
2012/8/8 最新のudlfbを導入し、該当部分を書き換えました。

[PR]

2012-08-01

オープンソースカンファレンス 2012 Kansai@Kyoto

オープンソースカンファレンスは、オープンソースの今を伝えるイベント。
東京だけでなく、北は北海道、南は沖縄まで全国各地で開催しています。

今週末、8月3日(金曜日)・4日(土曜日)は、京都開催となります。概要は以下の通り

---
 日程:2012年8月3日(金)・4日(土) 10:00-17:00

会場京都リサーチパーク(KRP) 東地区 「アトリウム(総合受付)」「1号館」
    [交通・アクセスマップ] [GoogleMap]
   ・JR嵯峨野線(山陰線)「丹波口駅」より西へ徒歩5分
   ・「京都駅/西院駅/大宮駅/五条駅」からタクシーで約10分

費用:無料

内容:オープンソースに関する最新情報の提供
   ・展示 - オープンソースコミュニティ、企業・団体による展示
   ・セミナー - オープンソースの最新情報を提供

主催:オープンソースカンファレンス実行委員会

協力京都リサーチパーク株式会社(KRP-WEEK) 

企画運営:株式会社びぎねっと
 --


当社は、
「OpenBlocksによるマイクロサーバソリューション及びデベロッパネットワークのご紹介」
として、OpenBlocks A Familyを中心としたデモを行います。
.testedで検証した周辺機器なども合わせて展示します。

明日は、実際に見て、触っていただくと共に、実際の開発の状況や、OBDNを中心としたデベロッパネットワークの状況、周辺機器評価や、Linuxを含め、様々なOSの開発状況についてなど、気軽にお声がけいただけたらと思います。

また、1日目(8/3・金) 16:15~17:00 中会議室Aにて、セミナー枠を頂きました。
「A FamilyにおけるARM Linuxの実装と現状について」
A Familyが、実際どういう形で企画され、開発されていったか、現状どういう状態なのか、といった話をさせていただく予定です。

それでは京都でお会いしましょう。