[Armadillo:01760] Re: Armadillo-210のdhcpdでのエラー
林田 平馬
email@hidden
2007年 7月 17日 (火) 04:20:26 JST
林田です。
上記タイトルのエラーですが何とか解決できました。
小俣さんに提供していただいたdhcpdumpのおかげで、問題をカーネルと切り離す
ことができたので、ISC-DHCPのバグと決め打ちし、ソースとにらめっこしました。
ソース中のエラーを吐いていた関数(decode_udp_ip_header)をgrepで特定し、再度
ググリ直し、ISC-DHCP 3.0.3で修正された下記の問題を見つけました。
decode_udp_ip_header was changed so that the IP address was copied out to a
variable,
rather than referenced by a pointer. This enforces 4-byte alignment of the
32-bit IP
address value. Thanks to a patch from Dr. Peter Poeml.
詳細はわかりませんが、カーネルから渡されたパケットのヘッダデータを配列(構造体)
に格納(decode_udp_ip_headerの仕事)する際に、ずれて、値が壊れていただけのようです。
そこで最新版である3.0.6のソースを参考に、Atmark-dist付属(バージョン2.5)版の
decode_udp_ip_header関数の入れ替えを行いました。
行った作業としては
1、DISTROOT/user/dhcp-isc/common/packet.c内にあるdecode_udp_ip_header関数
を3.0.6版のものにコピペ。
2、decode_udp_ip_header関数の引数が少し変更されているので、プロトタイプ宣言部分
(〜/dhcp-isc/includes/dhcpd.h内)の変更。これも3.0.6版からコピペ。
3、decode_udp_ip_header関数が呼び出される〜/dhcp-isc/common/nit.c , lpf.c ,
dlpi.c ,
upf.c , bpf.cのそれぞれの該当部分(grepで確認してください)を3.0.6版を参考に修正。
エラーログを吐く部分の変数の扱いなどは、適当にながしました。
恐らくこれで動くようになると思います。
もしダメなら、3.0.6版の〜/dhcp-isc/common/bpf.c内にあるBPF-WORDALIGNで処理し
ている部分を参考に、現行版の〜/dhcp-isc/common/bpf.cを修正してみてください。
上記の作業をする前に、この作業を行ってうまくいかず、そのまま続けて上記の作業を
行いうまくいったので、必須かどうかわからなくなりました。
以上です。
何とか動いてくれて、ホッとしました。
小俣さんの手厚いサポートが無ければ、見つけきれなかったと思います。
本当にありがとうございました。
同時に行っていた、pppdのオンデマンドダイヤルの方も、Armadillo210で動いてくれまし
た(auの携帯モデムと接続)ので、初期の目標であったダイヤルアップサーバとしての
機能を持たせることはできました。引続き200シリーズ(Atmark-dist)で用意されている
他の機能を検証しながら、小型で低消費電力な特徴を活かし、遠隔無人監視システム
などへの応用を目指したいと思います。
armadillo メーリングリストの案内