Provided by: libpcp3-dev_6.2.0-1.1build4_amd64 

NAME
__pmAddIPC, __pmLookupIPC, __pmFdLookupIPC, __pmOverrideLastFd, __pmPrintIPC, __pmResetIPC - IPC version
infrastructure support
C SYNOPSIS
#include "pmapi.h"
#include "libpcp.h"
int __pmAddIPC(int fd, __pmIPC ipc);
int __pmLookupIPC(__pmIPC **ipcp);
int __pmFdLookupIPC(int fd, __pmIPC **ipcp);
void __pmOverrideLastFd(int fd);
void __pmPrintIPC(void);
void __pmResetIPC(int fd);
cc ... -lpcp
CAVEAT
This documentation is intended for internal Performance Co-Pilot (PCP) developer use.
These interfaces are not part of the PCP APIs that are guaranteed to remain fixed across releases, and
they may not work, or may provide different semantics at some point in the future.
DESCRIPTION
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 __pmIPC structure.
DIAGNOSTICS
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.
SEE ALSO
PMAPI(3)
Performance Co-Pilot PCP PMLOOKUPIPC(3)