📄 scsi_fc_transport.txt
字号:
SCSI FC Tansport =============================================Date: 4/12/2007Kernel Revisions for features: rports : <<TBS>> vports : 2.6.22 (? TBD)Introduction============This file documents the features and components of the SCSI FC Transport.It also provides documents the API between the transport and FC LLDDs.The FC transport can be found at: drivers/scsi/scsi_transport_fc.c include/scsi/scsi_transport_fc.h include/scsi/scsi_netlink_fc.hThis file is found at Documentation/scsi/scsi_fc_transport.txtFC Remote Ports (rports)========================================================================<< To Be Supplied >>FC Virtual Ports (vports)========================================================================Overview:------------------------------- New FC standards have defined mechanisms which allows for a single physical port to appear on as multiple communication ports. Using the N_Port Id Virtualization (NPIV) mechanism, a point-to-point connection to a Fabric can be assigned more than 1 N_Port_ID. Each N_Port_ID appears as a separate port to other endpoints on the fabric, even though it shares one physical link to the switch for communication. Each N_Port_ID can have a unique view of the fabric based on fabric zoning and array lun-masking (just like a normal non-NPIV adapter). Using the Virtual Fabric (VF) mechanism, adding a fabric header to each frame allows the port to interact with the Fabric Port to join multiple fabrics. The port will obtain an N_Port_ID on each fabric it joins. Each fabric will have its own unique view of endpoints and configuration parameters. NPIV may be used together with VF so that the port can obtain multiple N_Port_IDs on each virtual fabric. The FC transport is now recognizing a new object - a vport. A vport is an entity that has a world-wide unique World Wide Port Name (wwpn) and World Wide Node Name (wwnn). The transport also allows for the FC4's to be specified for the vport, with FCP_Initiator being the primary role expected. Once instantiated by one of the above methods, it will have a distinct N_Port_ID and view of fabric endpoints and storage entities. The fc_host associated with the physical adapter will export the ability to create vports. The transport will create the vport object within the Linux device tree, and instruct the fc_host's driver to instantiate the virtual port. Typically, the driver will create a new scsi_host instance on the vport, resulting in a unique <H,C,T,L> namespace for the vport. Thus, whether a FC port is based on a physical port or on a virtual port, each will appear as a unique scsi_host with its own target and lun space. Note: At this time, the transport is written to create only NPIV-based vports. However, consideration was given to VF-based vports and it should be a minor change to add support if needed. The remaining discussion will concentrate on NPIV. Note: World Wide Name assignment (and uniqueness guarantees) are left up to an administrative entity controling the vport. For example, if vports are to be associated with virtual machines, a XEN mgmt utility would be responsible for creating wwpn/wwnn's for the vport, using it's own naming authority and OUI. (Note: it already does this for virtual MAC addresses).Device Trees and Vport Objects:------------------------------- Today, the device tree typically contains the scsi_host object, with rports and scsi target objects underneath it. Currently the FC transport creates the vport object and places it under the scsi_host object corresponding to the physical adapter. The LLDD will allocate a new scsi_host for the vport and link it's object under the vport. The remainder of the tree under the vports scsi_host is the same as the non-NPIV case. The transport is written currently to easily allow the parent of the vport to be something other than the scsi_host. This could be used in the future to link the object onto a vm-specific device tree. If the vport's parent is not the physical port's scsi_host, a symbolic link to the vport object will be placed in the physical port's scsi_host. Here's what to expect in the device tree : The typical Physical Port's Scsi_Host: /sys/devices/.../host17/ and it has the typical decendent tree: /sys/devices/.../host17/rport-17:0-0/target17:0:0/17:0:0:0: and then the vport is created on the Physical Port: /sys/devices/.../host17/vport-17:0-0 and the vport's Scsi_Host is then created: /sys/devices/.../host17/vport-17:0-0/host18 and then the rest of the tree progresses, such as: /sys/devices/.../host17/vport-17:0-0/host18/rport-18:0-0/target18:0:0/18:0:0:0: Here's what to expect in the sysfs tree : scsi_hosts: /sys/class/scsi_host/host17 physical port's scsi_host /sys/class/scsi_host/host18 vport's scsi_host fc_hosts: /sys/class/fc_host/host17 physical port's fc_host /sys/class/fc_host/host18 vport's fc_host fc_vports: /sys/class/fc_vports/vport-17:0-0 the vport's fc_vport fc_rports: /sys/class/fc_remote_ports/rport-17:0-0 rport on the physical port /sys/class/fc_remote_ports/rport-18:0-0 rport on the vportVport Attributes:------------------------------- The new fc_vport class object has the following attributes node_name: Read_Only The WWNN of the vport port_name: Read_Only The WWPN of the vport roles: Read_Only Indicates the FC4 roles enabled on the vport. symbolic_name: Read_Write A string, appended to the driver's symbolic port name string, which is registered with the switch to identify the vport. For example, a hypervisor could set this string to "Xen Domain 2 VM 5 Vport 2", and this set of identifiers can be seen on switch management screens to identify the port. vport_delete: Write_Only When written with a "1", will tear down the vport. vport_disable: Write_Only When written with a "1", will transition the vport to a disabled. state. The vport will still be instantiated with the Linux kernel, but it will not be active on the FC link. When written with a "0", will enable the vport. vport_last_state: Read_Only Indicates the previous state of the vport. See the section below on "Vport States". vport_state: Read_Only Indicates the state of the vport. See the section below on "Vport States". vport_type: Read_Only Reflects the FC mechanism used to create the virtual port. Only NPIV is supported currently. For the fc_host class object, the following attributes are added for vports: max_npiv_vports: Read_Only Indicates the maximum number of NPIV-based vports that the driver/adapter can support on the fc_host. npiv_vports_inuse: Read_Only Indicates how many NPIV-based vports have been instantiated on the fc_host. vport_create: Write_Only A "simple" create interface to instantiate a vport on an fc_host. A "<WWPN>:<WWNN>" string is written to the attribute. The transport then instantiates the vport object and calls the LLDD to create the vport with the role of FCP_Initiator. Each WWN is specified as 16 hex characters and may *not* contain any prefixes (e.g. 0x, x, etc). vport_delete: Write_Only A "simple" delete interface to teardown a vport. A "<WWPN>:<WWNN>" string is written to the attribute. The transport will locate the vport on the fc_host with the same WWNs and tear it down. Each WWN is specified as 16 hex characters and may *not* contain any prefixes (e.g. 0x, x, etc).Vport States:------------------------------- Vport instantiation consists of two parts: - Creation with the kernel and LLDD. This means all transport and driver data structures are built up, and device objects created. This is equivalent to a driver "attach" on an adapter, which is independent of the adapter's link state. - Instantiation of the vport on the FC link via ELS traffic, etc. This is equivalent to a "link up" and successfull link initialization. Futher information can be found in the interfaces section below for Vport Creation. Once a vport has been instantiated with the kernel/LLDD, a vport state can be reported via the sysfs attribute. The following states exist: FC_VPORT_UNKNOWN - Unknown An temporary state, typically set only while the vport is being instantiated with the kernel and LLDD. FC_VPORT_ACTIVE - Active The vport has been successfully been created on the FC link. It is fully functional. FC_VPORT_DISABLED - Disabled The vport instantiated, but "disabled". The vport is not instantiated on the FC link. This is equivalent to a physical port with the link "down". FC_VPORT_LINKDOWN - Linkdown The vport is not operational as the physical link is not operational. FC_VPORT_INITIALIZING - Initializing The vport is in the process of instantiating on the FC link. The LLDD will set this state just prior to starting the ELS traffic to create the vport. This state will persist until the vport is successfully created (state becomes FC_VPORT_ACTIVE) or it fails (state is one of the values below). As this state is transitory, it will not be preserved in the "vport_last_state". FC_VPORT_NO_FABRIC_SUPP - No Fabric Support The vport is not operational. One of the following conditions were
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -