OpenWRT AG300h – Open vSwitch


OpenWRT 是一個 Open Source 的 Linux AP 專案,可以在市面上尋找目前已經支援的裝置,買回來自己更新韌體,跟刷 Andriod 手機有類似的快感…,他還附有幾個網頁介面能裝,例如 Luci 非常具有 Linux hacker 味道不親和的介面…。紀錄一下建立的環境跟額外編譯 ovs 模組的指令。

只是蠻多的硬體配置都有點弱,這台 AG300H 配備蠻好的,如果不用考慮價格的話值得考慮…。

如果要自己準備編譯環境,找一台電腦裝 Ubuntu 就差不多了,剩下的交叉編譯環境 OpenWRT 官方都已經幫你準備好了。

這台是 MIPS 的 CPU Atheros AR7161@680MHz,記憶體 128MB,Flash 32MB。

目前有穩定版本 backfire,但是這台目前只有 trunk 版本有支援,先用 git 抓 source 。目前最新版的核心是採用 Linux 3.3.8

 $ git clone git://nbd.name/openwrt.git 
 $ cd openwrt
 $ make menuconfig

 Target System > Atheros AR7XXXX/AR9XXXX
 Target Profile > Buffalo WZR-HP-AG300H
 Kernel modules > Network Support > kmod-bridge (M)

 $ make kernel_menuconfig
 Network Support > Network Options > Open vSwitch(M)

裡面的設定很多都能調整,Profile 是幫你指定這台裝置所有的週邊,如果要額外一些驅動可以再加。然後就能開始編譯了~

 $ make -j 3

最後就會產生出。

 $ openwrt/staging_dir # toolchain
 $ openwrt/build_dir # kernel
 $ openwrt/bin # result

接著是自己編譯 ovs,其實上面的設定就有包含編譯核心內的 ovs 了,只是如果要一些非核心 ovs 的功能就要自己編譯了,就是透過他產生出來的 toolchain ,可以參考 openflow – DDWRT

$ wget http://openvswitch.org/releases/openvswitch-1.7.0.tar.gz
$ tar zxvf openvswitch-1.7.0.tar.gz
$ cd openvswitch-1.7.0
$ vim config
$ chmod 755 config
$ ./config

依照目錄跟 toolchain 的名稱設定。

#!/bin/bash
export WORKING=/home/mlwmlw/openwrt-ag300h
export TOOLCHAIN_PATH=$WORKING/staging_dir/toolchain
export PATH=$TOOLCHAIN_PATH/bin/:$PATH
export NAME=mips-openwrt-linux-uclibc
export LINUX=$WORKING/build_dir/linux-ar71xx_generic/linux-3.3.8/
export STAGING_DIR=$WORKING/staging_dir
./configure --with-linux=$LINUX KARCH=mips CC=$NAME-gcc AR=$NAME-ar LD=$NAME-ld RANLIB=$NAME-ranlib STRIP=$NAME-strip --host=mips CFLAGS="-std=gnu99 -g -I$TOOLCHAIN_PATH/include/ -L$TOOLCHAIN_PATH/lib/" --disable-ssl
make ARCH=mips CC=$NAME-gcc AR=$NAME-ar LD=$NAME-ld RANLIB=$NAME-ranlib STRIP=$NAME-strip

qemu
可以編譯成 taget 是 mips qemu,然後用 qemu 跑模擬測試看看。要注意是 qemu-system-mips or qemu-system-mipsel 是看你編譯成 big-endian or little endian

 $ sudo aptitude install qemu-kvm-extras
 $ qemu-system-mips -kernel openwrt-malta-be-vmlinux.elf -m 16 -nographic

如果要連結 openwrt vm 跟 host 的網路按照上面連結的設定是。

 $ qemu-system-mips -kernel openwrt-malta-be-vmlinux.elf -m 16 -net nic -net tap -nographic

但是好似怪怪的,只是還不太懂 nic 跟 tap 有什麼差別,而且好似要先用 tun 建立一個 tap,並且指定 tap 名稱。在把 tap 加到 bridge 裡面,這樣就能互通了。

 $ sudo tunctl # tap0
 $ brctl addif br0 tunctl
 $ ifconfig br0 10.1.1.123/24
 $ sudo qemu-system-mips -kernel openwrt-malta-be-vmlinux.elf -m 16 -net nic -net tap,ifname=tap0 -nographic

 openwrt # ifconfig eth0 10.1.1.1 netmask 255.255.255.0
 openwrt # ping 10.1.1.123

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *