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
SANAGI Terumasa
初めまして。通りすがりのコメントですが、失礼いたします。
FreeBSD 7.0-R(ppc)でも同様に再現し、書かれているコードを元に修正したところ、問題なく動作することを確認しています。このコードを元に修正したいと思うのですが、ライセンスの問題がありそうなので、許可を頂ければ幸いです。
Hiromichi Iwaoka
日頃Net上のプログラムだけでなく、Blogにある情報等に助けられてますので、本当は、アーキテクチャみてコード修正するようにしてパッチとかにして公開出来れば… とも思ったのですがスキルレベル・語学力? 含めて私では手も足も出ません。
そこで、せめて誰かの目にとまってお役にたてればと思って日記に書いてる状態ですので、特に問題有りません。使ってやって下さい。よろしくお願いいたします。
SANAGI Terumasa
ありがとうございます。とりあえずpatchをsend-prしておきました。
http://www.freebsd.org/cgi/query-pr.cgi?pr=122898
一部改変してありますので、お手数ですが、問題があれば私宛にメール、または、
http://docs.freebsd.org/cgi/getmsg.cgi?fetch=2401511+0+current/freebsd-ports-bugs
のスレッドに繋いで頂けると幸いです。
/* 私の英語は非常にいい加減ですが、それでよければ翻訳いたします */
Hiromichi Iwaoka
嬉しい限りです。ありがとうございました。