Figure 17-25 on page 438 and Figure 18-1 on page 460 illustrate the process of validating the incoming packet's headers.
Since each complete message is wholly contained with a single request packet, the RQ Logic can be designed to ignore the PSN field (i.e., it does not perform a check of the PSN in each packet to make sure that it is one higher than the PSN received in the previous request packet).
Some special-purpose CA designs (e.g., media streaming), however, may check each request packet's PSN in order to detect missing packets.
When the request packet arrives at the destination QP, the RQ Logic compares the DETH:Q_Key value to the Q_Key stored in the QP Context. The packet is accepted if they match; otherwise, the following actions are taken:
The RQ Logic silently drops the packet.
No RQ WQE is used.
No CQE is created.
The RQ Logic waits for the next request packet (i.e., the next message; remember that UD messages are a single packet in length).
RQ WQEs are only used to handle incoming Send Only or Send Only With Immediate operations.
The RQ Logic considers an inbound message completed successfully when it has:
Detected a valid message as indicated by the presence of an “Only” Opcode in the BTH.
Committed the message payload to the local memory (or a posted-write buffer that accepts writes bound for local memory) without error.
Successfully completed all of the validity checks (including VCRC and ICRC verification).
Assuming that a RQ WQE completes its respective inbound Send Only or Send Only With Immediate message transfer without any errors, the RQ Logic retires the WQE and creates a good completion CQE.
Table 20-4 on this page details the types of errors that may be detected by the QP's RQ Logic and how each is handled. Note that when some error types are detected, it is not possible to guarantee the state of local memory. Some or all of a given packet may have been committed to the local memory before the error is detected.
Error | Description | Handling |
---|---|---|
Malformed WQE | The RQ Logic detected a malformed RQ WQE while processing the packet. These errors are not caused by the sender. | Class A error handling:
|
Unsupported or reserved opcode | Inbound request packet's Opcode was either reserved or was for a function not supported by this QP (any opcode other than Send Only or Send Only With Immediate). | Class D error handling:
|
No RQE available | An inbound Send Only or Send Only With Immediate request packet has been received, but there is no RQ WQE posted, and therefore no Scatter Buffer List to define where the message is to be written in local memory. | The request is invalid and is silently dropped by the RQ Logic. |
Local QP Error | RQ Logic detected a local QP-related error while executing the request packet. The error prevented the RQ Logic from successfully executing the request. | Class A error handling:
|
Q_Key Violation | The destination QP's Q_Key did not match the Q_Key delivered in the request packet's DETH:Q_Key field. | Class D error handling:
|
Packet Header Violation | RQ Logic detected a header violation that requires a silent drop. See Figure 17-25 on page 438. | See Class D error handling earlier in this table. |
Length errors | One of the following errors was detected by the RQ Logic:
| See Class D error handling earlier in this table. |
CQ overflow | The inbound Send message transfer completed with no error, but the CQE could not be written to the CQ. The CQ is inaccessible or full. | Class G error handling:
|