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

Inherits MadTest.

Public Member Functions

 C14_024_12 ()
 
boolean execute () throws TestException
 

Protected Member Functions

boolean initialize () throws TestException
 

Detailed Description

24.1.5.15 V1C14-024.1.1 SUBNET MANAGEMENT ATTRIBUTE - MULTICASTFORWARDINGTABLE

Abstract: This test performs checks of the MulticastForwardingTable attribute and components. Included are tests for both Read-Only (RO) and Read-Write (RW) attribute components.

Coverage: v1c13-024,v1c14-024.1.1, v1c14-027, v1c14-030

Topology Configuration: SimpleLink: Tester=MAD Tester; Width=1X, 2X, 4X, 8X, or 12X; Speed=SDR, DDR, QDR, FDR, EDR, HDR; DUT=Switch.

DUT Qualifiers: None, unless specified in algorithm section.

Notes:

  1. Additional checking of method/attribute combinations is performed in tests for v1c14-003.
  2. This TD should be executed for switchs only since the attribute is not applicable for CAs and routers.

Test Case Description

◆ C14_024_12()

24.1.5.15.1 24.1.5.15.2 MULTICAST FORWARDING TABLE TEST FOR SUPPORTED/UNSUPPORTED ATTRIBUTE

Assertions: v1c13-024#07, v1c14-024.1.1#12.01, v1c14-024.1.1#12.02, v1c14-024.1.1#12.03

Notes:

  1. Variable DUT_FDB_MULTICAST_CAP of type Integer.
  2. SMP_DATA is variable of type MadPacketSpec Initialization: 1. PortInfo:PortState is Initialized, Armed or Active for both MADTester and DUT.

Developer: Kevin King

Test Procedure

◆ initialize()

boolean initialize ( ) throws TestException
protected

Initialization:

  1. PortInfo:PortState is Initialized, Armed or Active for both MADTester and DUT.

◆ execute()

boolean execute ( ) throws TestException

Test Procedure:

  1. SendMad(SubnGet(SwitchInfo))

  2. ReceiveMad(SubnGetResp(SwitchInfo))

  3. If (DUT_FDB_MULTICAST_CAP == 0) // v1c14-024.1.1#12.01 ...
    • Remark: MulticastForwardingTable not supported by this switch.
  4. Repeating steps 5 to 10 for all MulticastForwardingTable attribute block values (AttributeModifier[8:0] == 0 to 511) and all 16 ports groups (AttributeModifier[31:28] == 0 to 15).
  5. SendMad (SubnSet(MulticastForwardingTable where MADHeader:AttributeModifier as specified))
  6. SMP_DATA = ReceiveMad (SubnGetResp(MulticastForwardingTable))
  7. Verify SMP_DATA format: // v1c14-024.1.1#12.03
    • MADHeader:AttributeID == MulticastForwardingTable
    • MADHeader:AttributeModifier == with same value as sent above MADHeader:Status.code == 7 // v1c13-024#07.
  8. SendMad (SubnGet(MulticastForwardingTable where MADHeader:AttributeModifier as specified))
  9. SMP_DATA = ReceiveMad (SubnGetResp(MulticastForwardingTable))
  10. Verify SMP_DATA format: // v1c14-024.1.1#12.02
    • MADHeader:AttributeID == MulticastForwardingTable
    • MADHeader:AttributeModifier == same value as sent above
    • MADHeader:Status.code == 7 // v1c13-024#07
    • Remark: Any entry beyond the end of the table should be read back as 0 and since the table is not supported all entries should be read back as 0.
  11. Else DUT supports MulticastForwardingTable ...
  12. SendMad(SubnGet(NodeInfo))
  13. NUM_PORTS = ReceiveMad ( SubnGetResp(NodeInfo):NumPorts)
  14. Verify (DUT_FDB_MULTICAST_CAP != 0) // v1c14-024.1.1#12.01
    • Remark: Multicast forwarding Table supported by this switch.
  15. Repeating steps 7 to 18 for all MulticastForwardingTable attribute values (AttributeModifier[8:0] == 0 to 511) and all 16 ports groups (AttributeModifier[31:28] == 0 to 15)
  16. SendMad (SubnGet(MulticastForwardingTable where AttributeModifier as specified ))
  17. SMP_DATA = ReceiveMad(SubnGetResp(MulticastForwardingTable) ) //v1c14-024.1.1#12.02
  18. SMP_DATA_1 = (NOT SMP_DATA)
  19. SendMad (SubnSet(MulticastForwardingTable where MADHeader:Attribute-Modifier as specified))
  20. SMP_DATA = ReceiveMad(SubnGetResp(MulticastForwardingTable))
  21. Verify SMP_DATA format: // v1c14-024.1.1#12.02
    • MADHeader:AttributeID == MulticastForwardingTable
    • MADHeader:AttributeModifier == as specified
    • Remark: DUT_FDB_MULTICAST_CAP refers to number of LIDs/entries supported and the content of the AttributeModifier refers to index to 32 PortMasks Blocks.
  22. Set UPPER_LIMIT_OUTPUT_PORT_BLOCK to (((AM[31:28] + 1)*16) - 1)
  23. Set LOWER_LIMIT_OUTPUT_PORT_BLOCK to (AM[31:28] *16)
  24. If (MADHeader:AttributeModifier[8:0] > (((DUT_FDB_MULTICAST_CAP - 1)/32)) Then ...
    • Remark: If AttributeModifier[8:0] is bigger than ((DUT_FDB_MULTICAST_CAP - 1)/ 32) then all this 32 PortMasks block is not supported by the device.
    • MADHeader:MADData all returned data in Mad should be read back as Zero. // v1c14-027#01, v1c14-030#01
    • Remark: Verify that if attempting to set an un-supported entries in the MulticastForwardingTable, which are defined as read-only-zeroed-value entries (and should be treated by the DUT as such) only zeros are sent by the DUT as SubnGetResp , and the DUT while attempting to write to these un-supported entries should ignore and fill all entries with zeros.
    • MADHeader:Status.Code == 7 // v1c13-024#07
  25. Else If (MADHeader:AttributeModifier[8:0] == ((DUT_FDB_MULTICAST_CAP - 1)/ 32) Then...
    • Remark: If AttributeModifier[8:0] is equal to ((DUT_FDB_MULTICAST_CAP - 1)/ 32) it implies that not all the PortMasks in this 32 PortMasks block might be supported by the device - and they be handled differently then others.
    • Repeat the next 12 bullets where MFT index within block holds all values from 0 to 31.
    • If MFT index within block < (DUT_FDB_MULTICAST_CAP MODULO 32), then ...
    • If LOWER_LIMIT_OUTPUT_PORT_BLOCK > NUM_PORTS
    • Remark: This entry in the block is supported but the output ports are not supported by the node.
    • MADHeader:Status.Code == 7 // v1c13-024#07
    • MADHeader:MADData all returned data in Mad should be read back as Zero. // v1c14-027#01, v1c14-030#01
    • Else If UPPER_LIMIT_OUTPUT_PORT_BLOCK > NUM_PORTS
    • Remark: This entry in the block is supported and at least part of the output ports of this block are supported by the node.
    • MADHeader:Status.Code == 0 // v1c13-024#01
    • Output ports bit where index <= NUM_PORTS are as set above while Output ports bit index above NUM_PORTS should be read back as Zero. // v1c14-027#01, v1c14-030#01.
    • Else
    • Remark: This entry in the block is supported and all output ports of this block are supported by the node.
    • MADHeader:Status.Code == 0 // v1c13-024#01
    • MADHeader:MADData.PortMask == SMP_DATA_1.MulticastForwardingTable.PortMask
    • End If
    • Else MFT index within block >= (DUT_FDB_MULTICAST_CAP MODULO 32), then MADHeader:MADData.entry should be read back as Zero. // v1c14-027#01, v1c14-030#01
    • Remark: This entry in the block is not supported
  26. Else (MFT index within block < (DUT_FDB_MULTICAST_CAP MODULO 32))
    • Remark: Valid MulticastForwardingTable entry according to MulticastForwardingCap - returned values should not be Zero unless configured to be so or output port is beyond the number of ports supported by the node.
    • If MFT index within block < (DUT_FDB_MULTICAST_CAP MODULO 32), then
    • If LOWER_LIMIT_OUTPUT_PORT_BLOCK > NUM_PORTS
    • Remark: This entry in the block is supported but the output ports are not supported by the node.
    • MADHeader:Status.Code == 7 // v1c13-024#07
    • MADHeader:MADData all returned data in Mad should be read back as Zero. // v1c14-027#01, v1c14-030#01
    • Else If UPPER_LIMIT_OUTPUT_PORT_BLOCK > NUM_PORTS
    • Remark: This entry in the block is supported and at least part of the output ports of this block are supported by the node.
    • MADHeader:Status.Code == 0 // v1c13-024#01
    • Output ports bit where index <= NUM_PORTS are as set above while Output ports bit index above NUM_PORTS should be read back as Zero. // v1c14-027#01, v1c14-030#01.
    • Else
    • Remark: This entry in the block is supported and all output ports of this block are supported by the node.
    • MADHeader:Status.Code == 0 // v1c13-024#01
    • MADHeader:MADData.PortMask == SMP_DATA_1.MulticastForwardingTable.PortMask
    • End If
  27. Endif


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