into the void

ソフトウェアに関する雑多な調査日記

Androidを載せたbeagleboard-xmをWiFi APにするまで(其の七)

BeagleBorad-xm上でDHCPサーバとDNSサーバを動かしてWiFi APとRouter機能を持たせる予定だったが、ひとまずはRouter機能はやめて有線側とBridgeさせるだけにしてみた。
Bridgeはbrctlコマンドを使って有線側インターフェスen0とWiFi側インタフェースath0をブリッジさせることで実現する。
brctlはbusyboxに入っているものを使う。

Kernelの再ビルド

brctlを使ってみたところ、Kernelが対応していない旨のエラーが出た。ので、ビルドオプションを変更してKernelをリビルドする。

make ARCH=arm CROSS_COMPILE=<top-dir>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- menuconfig

menuconfigで下記のオプションを有効にする。今後Router機能を使いたくなるかもしれないので、NATやMASQUERADEのオプションもついでに有効にしておいた。ブリッジさせるだけなら802.1d Ethernet Bridgingだけでいいと思う。

Networking Support --->
  Networking options
    [*] 802.1d Ethernet Bridging
    Network packet filtering framework (Netfilter) --->
      Core Netfilter Configuration --->
        <*> Netfilter connection tracking support
        [*] Connection tracking flow accounting
        [*] Connection mark tracking support
        [*] Connection tracking events
      IP: Netfilter Configuration --->
        <*> IPv4 connection tracking support (required for NAT)
        <*> IP tables support (required for filtering/masq/NAT)
          <*> Packet filtering
            <*> REJECT target support
          <*> LOG target support
          <*> Packet Mangling

いつも通りKernelをビルドして、出来上がったuImageをSDカードに書き込む。

make ARCH=arm CROSS_COMPILE=<top-dir>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- uImage

brctlでブリッジ接続

busyboxのbrctlコマンドをつかってブリッジ接続を有効にする。
今までやってきた設定もまとめて一つのシェルスクリプトにした。

MacBook AiriPhoneからつないで接続OK。IPやDNSサーバの情報は上位のルータからもらえていることも確認した。ここまでで、WiFi APとして使えるようになった。
あとは、起動時に自動でWiFi AP機能を有効にすることと、せっかくAndroid上で動いているのでアプリでWiFi AP設定用のUIを作ってみる。シリアル経由でつながっていなくてもWiFi APのOFF/ON、設定と電源ON/OFFが簡単にできるようにする。