更新>MCS/MPIO/64bitLBAパッチ 2008/12/25版
SCSIステータスを最終パケットで返すようになったので、
小さいサイズでのREAD処理が早くなってネットワーク的に優しくなったはず?
一部の挙動が時々おかしいのだけど、何やらmallocで確保した領域が
すべてゼロクリアされている事を期待しているのかもしれない。
全コードを精査するのは面倒なので、後ろ向きにゼロクリアしてみた。
ここで精査するぐらいなら書き直します(笑)
なんだか当初の予定とは別の方向にいってるような気が・・・(汗)
とりあえず、一ヶ月間の作業成果はこんな感じです。
パッチファイル: iscsi-target-20081217-patch.bz2
更新版をご利用ください。
# cd /usr/ports/net/iscsi-target
# make clean
# make patch
# bzcat < /path/to/iscsi-target-20081217-patch.bz2 | patch -p0
# make
# make install
新しいコマンドラインオプション:
-C 同一ターゲットへの接続コネクション数(デフォルト8)
-P 接続可能なポータルのIPアドレス(セミコロン区切り)
※IPv6で指定する場合は[]付きでIPv6アドレスを書きます。
新しい機能:
targetsファイル内のネットマスクをセミコロン区切りで複数指定できます。
ネットマスク指定で/以降を省略するとIPv4は/32、IPv6は/128とみなします。
targetsファイル内のflagsカラムにターゲット接続(ログイン)時の
認証とダイジェストを強制するフラグを指定できます。
auth 認証を必要とします。 digest データおよびヘッダダイジェストを必要とします。 headerdigest ヘッダダイジェストを必要とします。 datadigest データダイジェストを必要とします。
認証情報は/usr/local/etc/iscsi/authsに書きます。
Microsoft iSCSI Initiator が相手の場合はシークレットを
12文字以上16文字以下で指定します。
ダイジェスト機能(CRC32によるデータチェック)を有効にできます。
データダイジェスト=ディスクへの読み書きデータなどに有効。
ヘッダダイジェスト=iSCSIプロトコルヘッダに有効。
いわゆる仕様:
全てのIPアドレスが同じポート番号でグループ1のネットワークポータルになります。
ポート番号は従来の-pオプションで変更可能ですがグループ番号は固定です。
ダイジェストエラーになった場合にTCP接続の強制終了を第一選択肢にする。
相互認証(mutual authentication)には対応していません。
主な修正点:
ビット演算を気休め的に変更してみました。
mallocで領域確保時に毎回ゼロクリアするように変更しました。
ターゲットログイン時に認証やダイジェストを強制するモードをつけました。
ターゲットログイン時にネットマスクに一致しないイニシエータは拒否するようになりました。
SCSIコマンドのModeSense(6)に少し応答するように変更しました。
Data-Inフェーズの最終PDUでSCSIコマンドステータスも返すように変更しました。
タスクコマンドを正しく処理できなかったのを修正しました。
デフォルトの同時接続数を8に変更しました。
~参考設定~
ターゲットにはしばらくブログに書いてきたExpress5800/110Geに
Intel PRO 1000/PT Desktop Adapter を増設して利用しました。
ホストはWindows Server 2008に同型カードを挿しました。
それぞれのカードのIPアドレスを別のネットワークにして、
スイッチングハブをそれぞれに独立して接続します。
(参考設定ではIPv4に192.168.2.0/24と192.168.3.0/24を、
IPv6に2001:380:e00:42::/64をルータ広告で利用)
ターゲット側(FreeBSD 7.1):
/etc/rc.conf
ifconfig_em0="inet 192.168.3.36 netmask 255.255.255.0"
ifconfig_em1="inet 192.168.2.36 netmask 255.255.255.0"
ipv6_enable="YES"
iscsi_target_enable="YES"
iscsi_target_flags="-s 32 -C 8 -P '192.168.2.36;192.168.3.36;[2001:380:e00:42:21f:d0ff:fe16:38bd]'"
/usr/local/etc/iscsi/targets
# extents file start length
extent0 /tank/iscsi/iscsi-target0 0 80GB
extent1 /tank/iscsi/iscsi-target1 0 80GB
extent2 /tank/iscsi/iscsi-target2 0 80GB
# target flags storage netmask
target0 rw,auth extent0 192.168.2.0/24
target1 rw,digest extent1 192.168.2.33;129.168.3.33/32;[2001:380:e00:42:a957:4bf:58e0:bedc]/128
target2 rw,auth,headerdigest extent2 192.168.2.0/24;129.168.3.0/24
/usr/local/etc/iscsi/auths
# name:type:secret
iqn.1991-05.com.microsoft\:ceres:CHAP:1234567890123456
ホスト側(Windows Server 2008):
オンボードLANに192.168.2.33/24を、
Intel PRO 1000/PTに192.168.3.33/24を割り当てました。
ここではIPv4による画像のみ掲載しますがIPv6でも同様に接続できます。
ターゲットへログオンするときに[詳細設定]でローカルアダプタ、ソースIP、
ターゲットポータルを指定します。
必要に応じてダイジェストにチェックを付けて有効にします。
(指定しなくてもターゲット側で強制していれば自動的に有効になります)
接続に認証が必要な場合は指定します。
接続できたら、[詳細]でターゲットのプロパティを開きます。
セッションタブの[接続]を押します。
[追加]を押します。
ソースIP、ターゲットポータルを別のものを指定します。
必要に応じてダイジェストおよび認証を指定します。
負荷分散ポリシーを適当に変更します。








重要:FreeBSD iscsi-target MCS/MPIOパッチ 2008/12/18版 for Microsoft iSCSI Initiator…
通信エラー発生時の不具合を多々修正しました(汗)
相互認証に対応しました。
パッチファイル: iscsi-target-20081218-patch.bz2
# cd /usr/ports/net/iscsi-target
# make clean
# make patch
# bzcat < /path/to/iscs…