---
name: "sd_machine_get_class"
section: "3"
platform: "linux"
package: "systemd-libs"
version: "262.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/sd_machine_get_class"
---

# sd\_machine\_get\_class(3)

Determine the class and network interface indices of a locally running virtual machine or container

## NAME

sd\_machine\_get\_class, sd\_machine\_get\_ifindices - Determine the class and network interface indices of a locally running virtual machine or container

## SYNOPSIS

```
#include <systemd/sd-login.h>
```

**int sd\_machine\_get\_class(const char\*** *machine***, char \*\****class***);**

**int sd\_machine\_get\_ifindices(const char\*** *machine***, int \*\****ret\_ifindices***);**

## DESCRIPTION

**sd\_machine\_get\_class()** may be used to determine the class of a locally running virtual machine or container that is registered with [**systemd-machined.service**(8)](/systemd-machined.service/8.md). The string returned is either "vm" or "container". The returned string needs to be freed with the libc [**free**(3)](/free/3.md) call after use.

**sd\_machine\_get\_ifindices()** may be used to determine the numeric indices of the network interfaces on the host that are pointing towards the specified locally running virtual machine or container. The vm or container must be registered with [**systemd-machined.service**(8)](/systemd-machined.service/8.md). The output parameter *ret\_ifindices* may be passed as **NULL** when the output value is not needed. The returned array needs to be freed with the libc [**free**(3)](/free/3.md) call after use.

## RETURN VALUE

On success, these functions return a non-negative integer. **sd\_machine\_get\_ifindices()** returns the number of the relevant network interfaces. On failure, these calls return a negative errno-style error code.

### Errors

Returned errors may indicate the following problems:

**-ENXIO**

The specified machine does not exist or is currently not running.

**-EINVAL**

An input parameter was invalid (out of range, or **NULL**, where that is not accepted).

**-ENOMEM**

Memory allocation failed.

## NOTES

Functions described here are available as a shared library, which can be compiled against and linked to with the **libsystemd** [**pkg-config**(1)](/pkg-config/1.md) file.

The code described here uses [**getenv**(3)](/getenv/3.md), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not call [**setenv**(3)](/setenv/3.md) from a parallel thread. It is recommended to only do calls to **setenv()** from an early phase of the program when no other threads have been started.

## HISTORY

**sd\_machine\_get\_class()** and **sd\_machine\_get\_ifindices()** were added in version 217.

## SEE ALSO

[**systemd**(1)](/systemd/1.md), [**sd-login**(3)](/sd-login/3.md), [**systemd-machined.service**(8)](/systemd-machined.service/8.md), [**sd\_pid\_get\_machine\_name**(3)](/sd_pid_get_machine_name/3.md)
