玄箱 + NetBSD + iSCSI target

NetBSDを入れた玄箱でiSCSIのターゲットを走らせて遊んでみようとしていたのですが、どうも上手く動きません。
Vistaからは接続できて認識できている様なのですが、FreeBSD6.2のマシンから接続するとどういう訳か、同じディスクを何回も認識してすごいことになります。(ディスクドライブを何百台と接続しようとする!
切り分けの為に、x86ベースのマシンをTargetにすると問題なく動いてました。

んー 悩んでいても仕方がないのでキャプチャしてパケットを比較して見てみると、x86と玄箱で確かに微妙に動きが異なる部分があります。
良く理解はしていませんが、ISID(識別用ID?)とかLUN(こいつはSCSIのLUNと一緒かな?)が一部抜け落ちてます。
どうも、必要なデータの一部(上位2バイト)飛んでいるようです。

可能性の高いところとしてはCPUアーキテクチャの違いによるプログラムの振舞の違いとPowerPC環境でのテスト不足でしょうか?

この手の問題はコード追うしかないよなぁー と思って泣く泣くコード追いかけてみました。

結果... ネットワークとのデータの受け渡しをしているデータ変換関数に機種依存が有る事を発見。
修正したら機嫌よく動きだしました。いわゆるエンディアン関係の問題の様です。
(当然、修正したコードは今度はIntelじゃ動かないけどw 汎用的に修正できるほどの腕はありません。orz)

自分用メモ
 環境は無印KURO-BOX+NetBSD4?+pkgsrcのnetbsd-iscsi-target(20071221)を使用してます。

cd /usr/pkgsrc/devel/netbsd-iscsi-target/
make configure
vi work/netbsd-iscsi-20071221/include/iscsiutil.h ※こいつを編集します。
make install

編集する個所は
 80行前後の ISCSI_NTOHL6/ISCSI_HTON6の定義部分
 それぞれ
#define ISCSI_HTONLL6(x) \
      (uint64_t)( ((uint64_t)(x) & (uint64_t)0x0000ffffffffffffuLL) << 16)
#define ISCSI_NTOHLL6(x) \
      (uint64_t)( ((uint64_t)(x) & (uint64_t)0xffffffffffff0000uLL) >> 16)
 に書き換えて終了♪

FreeBSD6.2Rのiscsi-initiatorの導入はこの情報が役に立ちました。
http://www.southernledger.com/blogs/ee99ee/?p=33


しかし...
 VistaIPv6対応とか言いながら、IPv6でiSCSIつなぎに行ってくれないなぁー パケットすら出さずに「そんなホストありません」と諦めてくれます。Hosts書いてもDNS書いてもダメ。 ちょっと残念
 それにしてもオープンソース派の意見の中にオープンソースはM$とかの商用ソフトと違って問題が出たら、どこかの偉い人がすぐにパッチを出してくれるから安全だし困らないと言う説もありますが... パッチも情報も無いし。 orz