Raspbian
Installation
raspbian を SD カードに書く。
いつも通り最新版にしておく。
apt-get update -y
apt-get dist-upgrade -y
手持ちのUSB接続日本語キーボード対応。コンソールの時に loadkeys jp106
で日本語になる(X window 使ってるときは別の方法)。
apt-get install console-data
手元にある NEC Aterm WL300NU-AG という usb wifi dongle 対応。中身は atheros で、carl9170 ドライバで動作させる。ファイルが足りないので要追加インストール。インストール後は udev から再起動しないといけないので、いっそのことシステム全体再起動しておくと漏れが無くて簡単。
apt-get install iw wireless-tools linux-firmware-free
raspbian が古いので、golang は自前でインストールする。
apt-get install mercurial
hg clone https://code.google.com/p/go
cd go/src && ./all.bash
raspbian が古いので、openvswitch も自前でインストールする(openflow 1.3対応のため)。
wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz
tar xf openvswitch-2.3.1.tar.gz && cd openvswitch-2.3.1 && ./configure && make install
Arch
本家サイトの記述を適宜参照する。
pacman -Suy
pacman -S iw wireless_tools crda
pacman -S lxde xorg-xinit xf86-video-fbdev
pacman -S git gcc make pkg-config patch openvswitch go
echo "exec startlxde" > .xinitrc
archのほうがraspi2のCPUに最適化されてて高速かな?古いものがないので、いろいろすっ飛ばせる。
lxde の無線マネージャを切りたい場合は、タスクバーで右クリック!してメニューを出す。シングルボタンマウス使用時は無理。
共通
gopenflow をビルドしておく。
go get github.com/hkwi/gopenflow
# ここで gopacket にパッチを当てる
cd $GOPATH/src/code.google.com/p/gopacket && curl https://gist.githubusercontent.com/hkwi/99b6cbdb5579bed4aa09/raw/2547d09ba5ceb6ab57995205f51e3f72d6e54424/gopacket.patch | patch -p1
go install github.com/hkwi/gopenflow/ofp4sw/trema_sw
go install github.com/hkwi/gopenflow/ofp4sw/ofctl
go install github.com/hkwi/gopenflow/ofp4sw/ofmon
運用
キーボード周り
その場で変更するのは次のコマンド。
- コンソール
sudo loadkeys jp106
- X window
setxkbmap -layout jp
Demo
window を使って、いろいろな出力を同時進行で見せておく。
startx
git clone https://github.com/hkwi/twink
cd twink && python -m twink.ovs
golib/bin/trema_sw -i 15 -e wlan0
launch packet in dumper in another window
golib/bin/ofmon unix:path/to/socket.monitor
demo follows...
ovs-ofctl -O OpenFlow13 dump-ports-desc unix:///path/to/socket.jackin
iw dev wlan0 interface add mon0 type monitor
ovs-ofctl -O OpenFlow13 dump-ports-desc unix:///path/to/socket.jackin
golib/bin/ofctl unix:path/to/socket.jackin dump-flows
golib/bin/ofctl unix:path/to/socket.jackin add-flow dot11_tag=0,@apply,output=controller
golib/bin/ofctl unix:path/to/socket.jackin dump-flows
golib/bin/ofctl unix:path/to/socket.jackin del-flows
golib/bin/ofctl unix:path/to/socket.jackin dump-flows
golib/bin/ofctl unix:path/to/socket.jackin add-flow addr1=ff:ff:ff:ff:ff:ff,@apply,output=controller
golib/bin/ofctl unix:path/to/socket.jackin del-flows
golib/bin/ofctl unix:path/to/socket.jackin add-flow addr2=--:--:--:--:--:--,@apply,output=controller # 対象機器のMACに読み替える
echo "ctrl_interface=/tmp/w" > s.conf
wpa_supplicant -Dnl80211 -iwlan0 -cs.conf &
wpa_cli -p /tmp/w
scan
scan_result
add_network
set_network 0 ssid "xxxx"
set_network 0 key_mgmt NONE
enable_network 0
select_network 0