Linux SCSI子系统分析(二)发现target的过程

Linux SCSI子系统分析(二)发现target的过程

发现过程

发现target的过程比较简单,从复杂的代码中总结出主要的流程如下图。这个流程和命令iscsiadm -m discovery -t st -p 192.168.8.1相对应:

Created with Raphaël 2.1.2 iscsiadm iscsiadm iscsid iscsid tgtd tgtd 取得默认iscsi配置 创建会话 创建链接 握手 发送所有target 输出所有target

这个发现的流程的代码写的挺复杂,但是总结出的流程还是比较简单的。主要就是iscsiadm这个程序和tgtd这个程序通过socket交互,取得所有的target。从tgtd侧返回的target格式如下:

“TargetName=iqn.2013-07.sds.ginkgo:ws\0TargetAddress=192.168.8.1:3260,1\0

注意看加红的地方,每个属性都是以字符休止符隔开的

函数调用过程

经过下图的函数调用流程,initiator端就取得到了target端所有的iqn
Created with Raphaël 2.1.2 iscsid iscsid tgtd tgtd iscsiadm iscsiadm main mgmt_ipc_listen main iscsi_portal_create 创建target成功后 会注册相应的回调函数 用于处理target对应的请求 event_loop main exec_dsc_op do_sendtargets idbm_sendtargets_defaults idbm_sync_config socket mgmt_ipc_handle IPC处理函数 用于处理IPC请求 config do_software_sendtargets discovery_sendtargets iscsi_alloc_session request_initiator_name socket mgmt_ioc_handle initiator config iscsi_create_session iscsi_login socket iscsi_tcp_event_handle cmnd_execute cmnd_exec_login succeed request_targets cmnd_exec_text text_scan_text target_list_build "TargetName=iqn.2013-07.sds.ginkgo:ws\0 TargetAddress=192.168.8.1:3260,1\0
发布了21 篇原创文章 · 获赞 6 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Perfecter/article/details/44067447