InfiniBand Test Specification  1.0.38
Public Member Functions | Protected Member Functions | List of all members

Inherits TransportTest.

Public Member Functions

 C09_060_09 ()
boolean execute () throws TestException

Protected Member Functions

boolean initialize () throws TestException


Abstract: This test verifies the completion rules for Reliable Services.

Coverage: v1c09-060

Topology Configuration: SimpleLink: Tester=Transport Tester; Width=1X, 4X, or 12X; DUT=xCA

DUT Qualifiers: Must be able to support 2 outstanding requests before requiring an ACK.


  1. If the DUT requires an ACK for each request posted on the SQ, we will timeout on the second TransportRxIbPacket() command. For this behavior, the DUT should have set the AckReq bit in the first message to demand an ACK. We are not checking AckReq in this test.
  2. We could change the test to conditionally send an ACK if the AckReq bit is set but do not feel that anyone would have such an implementation that only supported one outstanding request at a time.

Test Case Description

◆ C09_060_09() V1C09-060 RC Atomic Compare and Swap Case

Assertions: V1c09-060#07


  • The DUT (as requester) will post a RC Atomic Compare Swap request but will not complete until the TT (as responder) returns an ACK covering all the request packets transmitted for that message.
  • Variable CC as structure of type ChannelContext_t
  • Variable ATOMICWQE as structure of type RcAtomicDut_t
  • Variables PACKET_IN, PACKET_OUT as structure of type PacketType_t
  • Variable COMPLETE as structure of type PollDut_t
  • Variable N of type Integer for loops

Developer: Mike Bogochow

Test Procedure

◆ initialize()

boolean initialize ( ) throws TestException


  1. OpenRcChannel( CC ) // (reliable connection)

  2. Set QP ACK timeout = 0 (infinite) so that the DUT will not retransmit

◆ execute()

boolean execute ( ) throws TestException

Test Procedure:

  1. Register memory region for receiving remote packets

  2. Post one receive request for each expected packet from DUT

  3. Transmit 2 RC Atomic Compare Swap WQEs from DUT

    • ATOMICWQE.MsgSize = 0
    • ATOMICWQE.Count = 2
    • ATOMICWQE.R_KEY = 0x12345 // User specified R-Key
    • ATOMICWQE.VA = 0x999000 // User specified VA
    • ATOMICWQE.CMP_ADD = 1 // User specified compare/add
    • ATOMICWQE.SWAP = 0 // User specified swap
    • PostRcRdmaWr( CC, ATOMICWQE )

  4. Receive all expected packets

  5. Verify all packets were received and were valid

  6. Verify each message contained packets with opcodes Send First, Middle, and Last with incrementing PSN

  7. Transmit Atomic ACK packet to acknowledge the first Send request (MSN = 1)

    • PACKET_OUT.AETH_Syndrome = ACK
    • = 0xff2db5001e58b3e7
    • CC.TT_TxRespPSN = Mod( CC.DUT_Start_PSN + 0, 2^24 )
      • Remark: This is ACKing the last packet of the first message
    • TransportTxPacket( CC, PACKET_OUT )

  8. Poll for completion of first Send message on DUT's send queue

  9. Verify exactly 1 work completion was dequeued from the send queue

  10. Verify that the status of the work completion indicates successful completion

  11. Poll for completion of second Send message on DUT's send queue

  12. Verify second WQE will not complete as it has not been acknowledged. There will be a timeout waiting for this to happen.

  13. CloseRcChannel( CC )

    • Remark: Flush unacknowledged WQE.

The documentation for this class was generated from the following file: