April 1, 1981
The source virtual machine can cancel a previously executed SEND/RECV request provided the sink virtual machine has not yet executed the REPLY or REJECTsubfunction. If the sink machine has already executed
the RECEIVE subfunction, only the REPLY be canceled 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·0011'"). The sink virtual machine can respond to a SEND/RECV request with the REPLY subfunction without executing the RECEIVE 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 t::> control such an application (see "VMCF User Doubleword") ... You can execute a SEND/RECV request using the PRIORITY option. The PRIORITY 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 priority order. 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 execute the AUTHORIZE subfunction. Attempts to execute SENDX are rejected when the
sink virtual machine's external interrupt buffer is not large enough to
contain 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·
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 allowing the SEND external interrupt to be queued ahead
nonpriority external interrupts for the sink virtual machine.
of all
A SENDX request cannot be rejected by the sink virtual machine since t1re - . is -- - rec-e iv-edat th-e-sa-me - ti-m-e - the -ext-eFn-a-l---i-n-t-e-£I'up-t- is received. You can execute the SENDX subfunction with a zero data length causing
only the message header and user doubleword to be transmitted.
Part 2. Control Program (CP) 157
Page of GC20-1807-7 As Updated April 1, 1981 by TNL GN25-0829 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 (VKCPARK) the virtual address and length of the RECEIVE buffer.
The parameter list also contains the message ID of the message to be
received and userid of the yirtual 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 subfunction terminates the SEND or SEND/RECV request (see "REJECT: DIAGNOSE Code X'68' Subfunction Code X' 00 11' ") 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 subfunction could indicate "RESEND", for example, if the original data was not received correctly
(depending on how you want to use the protocol). REPLY allows you to direct data back to the sender of a SEND/RECV subfunction. (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 subfunction. The RECEIVE subfunction causes data to be
transferred from the source virtual storage 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 storage 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 (VMCPARM) identifies the virtual buffer
address and length of reply data. When the REPLY subfunction is
executed, the user parameter list (VMCPARM) also contains the message ID
and the userid of the virtual machine to receive the reply.
The REPLY subfunction can be executed
indicating no response. You can transmit
otherwise) usinq the user doubleword. with a zero data length
a reply {zero length or
A reply can be executed in response to a SEND/RECV request without
executing the RECEIVE subfunction. This indicates that you do not want
to receive the messaqe but may want to send a reply. A reply of zero
length could be executed simply to terminate the SEND/RECV request. The
application of the REPLY subfunction is a user decision. It must be
used to terminate a SEND/RECV request, however, unless the REJECT
subfunction is executed (see "REJECT: DIAGNOSE Code x'68' Subfunction
Code X' 0011''') The REPLY subfunct ion is com plete when the source
virtual machine receives the external interrupt response. A REPLY subfunction cannot be executed in response to a SEND request
(this is a protocol violation).
158 IBM VM/370 System Programmer's Guide
Previous Page Next Page