I am sponsoring the following fasttrack for myself. Requested binding is
minor. Timeout is set for 9/02.

- John


Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI
This information is Copyright 2009 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         COMSTAR ALUA active/standby support
    1.2. Name of Document Author/Supplier:
         Author:  John Forte
    1.3  Date of This Document:
        26 August, 2009
4. Technical Description

COMSTAR (PSARC 2007/523 [1]) supports the SCSI standard [2] for Asymmetric 
Logical Unit Access (ALUA) but only supports the access state of 
Active/Optimized. This set of interfaces introduces support for a logical unit
access state of Standby on a peer node. This support is provided via the
existing libstmf(3LIB) introduced in PSARC 2007/253 and is targeted towards
developers of clustered storage systems in 2 node configurations. Use of these 
interfaces require a peer-to-peer communication channel be established between 
the two participating nodes in the COMSTAR (STMF) ALUA configuration.


4.1 Interfaces

    Minor binding.

        -------------+-----------------------+-------------------------
        Interface        Classification         Comments
        -------------+-----------------------+-------------------------
        libstmf      |   Committed           |  PSARC 2007/523


4.2 stmfSetAluaState

NAME
    stmfSetAluaState

SYNOPSIS
    cc [ flag... ] file... -lstmf [ library... ]
    #include <libstmf.h>

    int stmfSetAluaState(boolean_t enabled, uint8_t node)

PARAMETERS
    enabled     B_TRUE when enabling ALUA mode
                B_FALSE when disabling ALUA mode

    node        Must be the value 0 or 1

DESCRIPTION
    The stmfSetAluaState() function sets the Asymmetric Logical Unit Access
    State (ALUA) mode for STMF. When enabled is set to B_FALSE, node is ignored,
    otherwise, node must be set to 0 or 1.  The node setting must be different
    for each node in a paired config. This should be called only after the
    STMF proxy door service has been initialized(See stmfInitProxyDoor(3STMF)).
    When the ALUA state is enabled, all STMF logical units will be
    registered on the peer node as standby logical units. The standby logical
    units can then be exported to any SCSI initiator using the existing
    mechanisms in STMF, stmfAddViewEntry(3STMF) or the add-view
    subcommand of stmfadm(1M). Note: If ALUA mode is already enabled,
    it is valid to call this interface again with enabled set to B_TRUE.
    This action would result in a re-initialization of the ALUA mode. This
    can be used during recovery of a failed peer node.

RETURN VALUES

    The following values are returned:

    STMF_ERROR_INVALID_ARG      Either enabled or node was incorrectly set.

    STMF_STATUS_SUCCESS         The API call was successful

ATTRIBUTES
    See attributes(5) for descriptions of the  following  attributes:

    ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Committed                   |
    |_____________________________|_____________________________|
    | MT-Level                    | Safe                        |
    |_____________________________|_____________________________|


4.3 stmfGetAluaState

NAME
    stmfGetAluaState

SYNOPSIS
    cc [ flag... ] file... -lstmf [ library... ]
    #include <libstmf.h>

    int stmfGetAluaState(boolean_t *enabled, uint8_t *node)

PARAMETERS
    enabled     set to B_TRUE or B_FALSE on success

    node        set to 0 or 1 on success

DESCRIPTION
    The stmfGetAluaState() function returns the Asymmetric Logical Unit Access
    State (ALUA) mode for STMF along with the node setting.

RETURN VALUES

    The following values are returned:

    STMF_ERROR_INVALID_ARG      Either enabled or node was NULL.

    STMF_STATUS_SUCCESS         The API call was successful

ATTRIBUTES
    See attributes(5) for descriptions of the  following  attributes:

    ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Committed                   |
    |_____________________________|_____________________________|
    | MT-Level                    | Safe                        |
    |_____________________________|_____________________________|



4.4 stmfLuStandby

NAME
    stmfLuStandby

SYNOPSIS
    cc [ flag... ] file... -lstmf [ library... ]
    #include <libstmf.h>

    int stmfLuStandby(stmfGuid *luGuid)

PARAMETERS
    luGuid      a pointer to an stmfGuid structure containing the guid
                of the logical unit to set to standby

DESCRIPTION
    The stmfLuStandby() function sets the access state of a logical unit to
    standby mode.  When successfully set, a standby logical unit switches its
    asymmetric logical unit access state to a one of "Transition to
    Standby" (see stmfGetLuProp(3STMF). Once moved to this state, the backing
    store for the logical unit will be released by the logical unit provider
    (sbd for disk devices). In order to move a logical unit out of "Standby"
    or the "Transition to Standby" state, stmfImportLu(3STMF) or the import-lu
    subcommand of stmfadm(1M) must be executed on the logical unit. On a
    successful logical unit import, the access state of the logical unit will
    move to Active in addition to sending a message to its peer that will
    complete the peer's transition to Standby. The current access state for
    the logical unit can be retrieved using stmfGetLuProp(3STMF) where the
    property type is STMF_LU_PROP_ACCESS_STATE.

RETURN VALUES

    The following values are returned:

    STMF_ERROR_NOT_FOUND        The guid does not exist

    STMF_STATUS_SUCCESS         The API call was successful

ATTRIBUTES
    See attributes(5) for descriptions of the  following  attributes:

    ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Committed                   |
    |_____________________________|_____________________________|
    | MT-Level                    | Safe                        |
    |_____________________________|_____________________________|



4.5 stmfInitProxyDoor

NAME
    stmfInitProxyDoor

SYNOPSIS
    cc [ flag... ] file... -lstmf [ library... ]
    #include <libstmf.h>

    int stmfInitProxyDoor(int *hdl, int fd);

PARAMETERS
    hdl         a pointer to an int. This will contain the handle for
                the proxy door to be used in calls to
                stmfPostProxyMsg(3STMF) and stmfDestroyProxyDoor(3STMF)

    fd          The door file descriptor for the established door server

DESCRIPTION
    The stmfInitProxyDoor() function establishes the door server with the
    STMF proxy service. The STMF proxy service is responsible for sending
    SCSI commands to the peer node on behalf of a logical unit in the Standby
    asymmetric logical unit access (ALUA) state. stmfInitProxyDoor(3STMF)
    should be called once a peer-to-peer communication channel between the two
    participating ALUA nodes has been established by the caller.

    Door server interface:

    The door_call from the STMF proxy service to the door server will fill in
    the door_arg_t structure as follows:

        door_arg_t arg;
        uint32_t result;

        arg.data_ptr = buf;
        arg.data_size = size;
        arg.desc_ptr = NULL;
        arg.desc_num = 0;
        arg.rbuf = (char *)&result;
        arg.rsize = sizeof (result);

        The tuple <data_ptr, data_size> is expected to arrive at the
        peer node STMF proxy service via stmfPostProxyMsg(3STMF).

    The door server is expected to complete the door call with these
    arguments to door_return:

         uinit32_t result;

         (void) door_return((char *)&result, sizeof(result), NULL, 0);

    where result is of type uint32_t and set to 0 on success, non-zero
    on failure.

    Non-zero values are logged as errors without further action. No file
    descriptors will be exchanged by the door call or return.

RETURN VALUES

    The following values are returned:

    STMF_ERROR_DOOR_INSTALLED   A previous door has already been
                                established.

    STMF_STATUS_SUCCESS         The API call was successful

ATTRIBUTES
    See attributes(5) for descriptions of the  following  attributes:

    ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Committed                   |
    |_____________________________|_____________________________|
    | MT-Level                    | Safe                        |
    |_____________________________|_____________________________|

4.6 stmfDestroyProxyDoor

NAME
    stmfDestroyProxyDoor

SYNOPSIS
    cc [ flag... ] file... -lstmf [ library... ]
    #include <libstmf.h>

    void stmfDestroyProxyDoor(int hdl);

PARAMETERS
    hdl         hdl returned from a previous call to
                stmfInitProxyDoor(3STMF)

DESCRIPTION
    The stmfDestroyProxyDoor() function closes the door interface
    established in the call to stmfInitProxyDoor().

RETURN VALUES

    None


ATTRIBUTES
    See attributes(5) for descriptions of the  following  attributes:

    ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Committed                   |
    |_____________________________|_____________________________|
    | MT-Level                    | Safe                        |
    |_____________________________|_____________________________|


4.7 stmfPostProxyMsg

NAME
    stmfPostProxyMsg

SYNOPSIS
    cc [ flag... ] file... -lstmf [ library... ]
    #include <libstmf.h>

    int stmfPostProxyMsg(int hdl, void *buf, uint32_t buflen)

PARAMETERS
    hdl         Returned in a previous successful call to
                stmfInitProxyDoor(3STMF)

    buf         Pointer to buffer to received from peer node

    buflen      length of buf

DESCRIPTION
    The stmfPostProxyMsg() function passes down to the STMF proxy service
    the message received from the peer node's STMF proxy service door upcall.

RETURN VALUES

    The following values are returned:

    STMF_ERROR_INVALID_ARG      hdl is not valid or buf is NULL

    STMF_POST_MSG_FAILED        Failed to post message

    STMF_STATUS_SUCCESS         The API call was successful

ATTRIBUTES
    See attributes(5) for descriptions of the  following  attributes:

    ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Committed                   |
    |_____________________________|_____________________________|
    | MT-Level                    | Safe                        |
    |_____________________________|_____________________________|



4.8 Changes to stmfGetLuProp(3STMF) manpage

       decimal  representation (that is, no leading "0x"). The prop
       argument can be one of the following values:
  
+      STMF_LU_PROP_ACCESS_STATE 
+      
+          Asymmetric access state for the logical unit.
+          Set to one of:
+      
+          "0"   is    Active
+          "1"   is    Transition to Active
+          "2"   is    Standby
+          "3"   is    Transition to Standby
+ 
       STMF_LU_PROP_ALIAS
  
           Up to 255 characters representing a  user  defined  name

4.9 References

    [1] COMSTAR: Common Multiprotocol SCSI Target
        http://sac.sfbay/PSARC/2007/523

    [2] SCSI Primary Commands - 3 (SPC-3) revision 23
        http://www.t10.org/cgi-bin/ac.pl?t=f&f=spc3r23.pdf

6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                ON
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open


Reply via email to