---
name: "pmlocalpmda"
section: "3"
platform: "linux"
package: "libpcp3-dev"
version: "3.9.10"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/__pmLocalPMDA"
---

# pmlocalpmda(3)

change the table of DSO PMDAs for PM\_CONTEXT\_LOCAL contexts

Part of [\_\_pmLocalPMDA(3)](/__pmLocalPMDA/3.md).

## NAME

**\_\_pmLocalPMDA** - change the table of DSO PMDAs for PM\_CONTEXT\_LOCAL contexts

## C SYNOPSIS

**#include \<pcp/pmapi.h\>**\
 **#include \<pcp/impl.h\>**

**int \_\_pmLocalPMDA(int** *op***, int** *domain***, const char \****name***, const char \****init***);**

**cc ... -lpcp**

## DESCRIPTION

PCP contexts of type **PM\_CONTEXT\_LOCAL** are used by clients that wish to fetch metrics directly from one or more PMDAs on the local host without involving [**pmcd**(1)](/pmcd/1.md). A PMDA that is to be used in this way must have been built as a Dynamic Shared Object (DSO).

Historically the table of PMDAs available for use with **PM\_CONTEXT\_LOCAL** was hardcoded to the following:

- \*

  The PMDA (or PMDAs) that export the operating system performance data and data about process activity.

- \*

  The **mmv** PMDA.

- \*

  The **sample** PMDA provided **$PCP\_LITE\_SAMPLE** or **$PMDA\_LOCAL\_SAMPLE** is set in the environment - used mostly for QA and testing.

The initial table of PMDAs available for use with **PM\_CONTEXT\_LOCAL** is now generated dynamically from all those PMDAs that have been installed as DSOs on the local host. The one exception is the \`\`pmcd'' PMDA which only operates correctly in the address space of a running [**pmcd**(1)](/pmcd/1.md) process and so is not available to an application using a **PM\_CONTEXT\_LOCAL** context.

**\_\_pmLocalPMDA** provides a number of services to amend the table of PMDAs available for use with **PM\_CONTEXT\_LOCAL**.

The *op* argument specifies the what should be done and takes one of the following values and actions:

- PM\_LOCAL\_ADD

  Append an entry to the table for the PMDA with a Performance Metrics Domain (PMD) of *domain*, the path to the DSO PMDA is given by *path* and the PMDA's initialization routine is *init*.

- PM\_LOCAL\_DEL

  Removes all entries in the table where the *domain* matches, or the *path* matches.  Setting the arguments *domain* to -1 or *path* to **NULL** to force matching on the *other* argument. The *init* argument is ignored.

- PM\_LOCAL\_CLEAR

  Remove all entries from the table.  All the other arguments are ignored in this case.

The *domain*, *name* and *init* arguments have similar syntax and semantics to the associated fields in the [**pmcd**(1)](/pmcd/1.md) configuration file. The one difference is the *path* argument which is used by **\_\_pmLocalPMDA** to find a likely looking DSO by searching in this order: **$PCP\_PMDAS\_DIR** /*path*, *path*, **$PCP\_PMDAS\_DIR** /*path* .*dso-suffix* and finally *path* .*dso-suffix* (*dso-suffix* is the local platform specific default file name suffix for a DSO, e.g. **so** for Linux, **dylib** for Mac OS X, **dll** for Windows, etc.).

## RETURN VALUE

In most cases, **\_\_pmLocalPMDA** returns 0 to indicate success. If *op* is invalid, then the return value is **PM\_ERR\_CONV** else if there is no matching table entry found for a **PM\_LOCAL\_DEL** operation, PM\_ERR\_INDOM is returned.

## SEE ALSO

[**pmcd**(1)](/pmcd/1.md), [**PMAPI**(3)](/PMAPI/3.md), [**pmNewContext**(3)](/pmNewContext/3.md) and [**\_\_pmSpecLocalPMDA**(3)](/__pmSpecLocalPMDA/3.md).
