__pmAddIPC, __pmLookupIPC, __pmFdLookupIPC, __pmOverrideLastFd,
__pmPrintIPC, __pmResetIPC - IPC version infrastructure support
int __pmAddIPC(int fd, __pmIPC ipc)
int __pmLookupIPC(__pmIPC **)
int __pmFdLookupIPC(int fd, __pmIPC **ipcp)
void __pmOverrideLastFd(int fd)
void __pmResetIPC(int fd)
cc ... -lpcp
IPC channels throughout the distributed PCP framework are affected by
the PCP 2.0 (and later) PDU changes. These functions are the interface
to the libpcp IPC connection management global data. This data
consists of a hash table of __pmIPC structures (indexed by file
descriptor) and a cached, most-recently-used file descriptor.
Newly created IPC channels must be registered with the hash table using
__pmAddIPC, such that the PDU sending and decoding routines can
determine whether they need to perform any PDU version translations or
not, for backward compatibility with previous the PCP 1.x IPC protocol.
__pmLookupIPC and __pmFdLookupIPC both provide handles to the __pmIPC
structure associated with the given file descriptor, as previously
established by a call to __pmAddIPC. The difference between the two is
that one allows an explicit file descriptor lookup, and the other uses
the cached, most-recently-used file descriptor. So __pmLookupIPC
actually calls __pmFdLookupIPC using this cached file descriptor as the
argument. The justification for having both is that in some places it
is not possible to use __pmFdLookupIPC (which is preferred), since at
that particular level of the PMAPI a file descriptor is not available
(see the __pmDecodeError code for an example).
The __pmOverrideLastFd is an escape mechanism for use in those
situations where the last PDU fetch did not go through the usual
channels (ie. __pmGetPDU), so as to ensure that the cached file
descriptor is the correct file descriptor for the PDU which is
currently being processed. This will typically be used for archive PDU
processing or where version information is not available for a given
file descriptor (eg. immediately prior to a PDU version exchange).
__pmPrintIPC is a useful debugging routine for displaying a table
mapping all currently registered file descriptors to their associated
PDU version numbers. Unused entries in this table should display the
value zero in the version column.
__pmResetIPC resets the version information associated with the given
file descriptor to some known (invalid) number. Subsequent lookups on
this file descriptor will return an UNKNOWN_VERSION embedded within the
A negative return value from __pmLookupIPC indicates that the requested
file descriptor is not registered in the hash table. This typically
indicates closure of an IPC channel, so PM_ERR_IPC is returned if this
is the case.