subfunction causes data to be transferred from the source virtual storage to sink
virtual storage. The sink virtual machine can then respond with a REPLY subfunc­
tion. The REPLY subfunction causes data to be transferred from specified sink
virtual storage to a REPLY buffer in the source virtual storage. The source virtual
machine then receives a response external interrupt indicating that the SEND /RECV request is complete.
When the source virtual machine executes the SEND /RECV function it specifies
the address and length of both the SEND buffer and REPLY buffer. The address
and length specifications are contained within the user parameter list
(VMCPARM). The user parameter list also contains a message ID and userid of
the user to receive the data (See the "VMCPARM Parameter List".) The source virtual machine can cancel a previously executed SEND /RECV request
provided the sink virtual machine has not yet executed the REPLY or REJECT
subfunction. If the sink virtual machine has already executed the RECEIVE sub­
function, only the REPLY can be canceled (see "CANCEL: DIAGNOSE Code
X'68' Subfunction Code X'0006"'). The sink virtual machine can execute the REJECT subfunction in response to the SEND /RECV request and cause the entire operation to be terminated (See "REJECT: DIAGNOSE Code X'68' Subfunction Code X'OOll "'.) The sink virtual machine can respond to a SEND /RECV request with the REPLY
subfunction without executing the RECEIVE subfunction. This has the effect of
informing the source virtual machine that the sink virtual machine cannot accept
data but that it can send data. The source virtual machine could have executed the SEND /RECV subfunction only as a means to solicit data from the sink virtual
machine. The application of this protocol is up to VMCF users. The user
doubleword can be used as a means to control such an application (See "VMCF User Doubleword".) You can execute a SEND /RECV request using the PRIORITY option. The PRI­ ORITY option causes the sink external interrupt for the SEND /RECV request to
be queued ahead of any other nonpriority external interrupts. Response external
interrupts directed to the source of a PRIORITY message are also queued in priori­
tyorder.
SENDX: DIAGNOSE Code X'68' Subfunction Code X'0004' SENDX directs data to another virtual machine via a faster but more restrictive
protocol than the SEND subfunction. SENDX subfunction data reaches the sink
virtual machine at the same time the SEND external interrupt reaches the sink. In
order to use the SENDX subfunction, the sink virtual machine must have an
external interrupt buffer large enough to contain both the standard message header
and the data. The size of the external interrupt buffer is specified when you exe­
cute the AUTHORIZE subfunction. Attempts to execute SENDX are rejected
when the sink virtual machine's external interrupt buffer is not large enough to con­
tain the data. After the sink virtual machine receives the SEND external interrupt
and data, a response external interrupt is directed to the source virtual machine.
The SENDX subfunction eliminates the need for a sink virtual machine to execute
a RECEIVE subfunction.
A SENDX request can be canceled by the source virtual machine provided the SENDX external interrupt has not yet been reflected to the sink virtual machine (See "CANCEL: DIAGNOSE Code X'68' Subfunction Code X'0006"'.) The Virtual Machine Communication Facility 95
Specify the SENDX buffer address and length in the user parameter list (VMCPARM). The message ID and userid of the sink virtual machine are also
specified in VMCPARM. The SENDX subfunction can be executed with the PRIORITY option allowing the SEND external interrupt to be queued ahead of all nonpriority external interrupts
for the sink virtual machine.
A SENDX request cannot be rejected by the sink virtual machine since the mes­
sage is received at the same time the external interrupt is received.
You can execute the SENDX subfunction with a zero data length causing only the
message header and user doubleword to be transmitted.
RECEIVE: DIAGNOSE Code X'68' Subfunction Code X'0005' RECEIVE allows you to selectively accept messages or data sent via the SEND or SEND /RECV subfunctions. You must specify in the user parameter list (VMCP ARM) the virtual address and length of the RECEIVE buffer. The param­
eter list also contains the message ID of the message to be received and userid of
the virtual machine that originated the SEND or SEND /RECV request. When a
virtual machine has more than one message pending, the RECEIVE function can
be executed to select messages in any order by message ID.
You can execute the REJECT function in order to reject messages sent by other
virtual machines. The REJECT sub function terminates the SEND or SEND/RECV request (see "REJECT: DIAGNOSE Code X'68' Subfunction Code X'OOOB"'.) You can execute the RECEIVE subfunction in response to a SEND /RECV
request and then execute a REJECT subfunction rather than a REPLY. The user
doubleword passed back with the REJECT sub function could indicate "RESEND", for example, if the original data was not received correctly (depending on how you
want to use the protocol).
REPLY: DIAGNOSE Code X'68' Subfunction Code X'0007' REPLY allows you to direct data back to the sender of a SEND /RECV subfunc­
tion. (This simulates full duplex communication.) The REPLY subfunction is used
with the SEND /RECV subfunction. A user who receives a SEND /RECV external
interrupt normally responds by executing the RECEIVE sub function. The
RECEIVE sub function causes data to be transferred from the source virtual stor­
age to the sink virtual storage. The sink virtual machine can then respond with the REPLY subfunction causing data to be transferred from specified sink virtual stor­
age to the source virtual storage. The REPLY subfunction causes a response
external interrupt to be reflected to the source virtual machine.
The user parameter list (VMCP ARM) identifies the virtual buffer address and
length of reply data. When the REPLY subfunction is executed, the user parame­
ter list (VMCPARM) also contains the message ID and the userid of the virtual
machine to receive the reply.
The REPLY subfunction can be executed with a zero data length indicating no
response. You can transmit a reply (zero length or otherwise) using the user
doubleword.
96 VM/SP System Programmer's Guide
Previous Page Next Page