Skip to content

Commit

Permalink
Merge pull request #2630 from brauner/2018-09-20/remove_locking
Browse files Browse the repository at this point in the history
api_extensions: introduce lxc_has_api_extension()
  • Loading branch information
stgraber committed Sep 21, 2018
2 parents ef92a78 + aafa5f9 commit 7c88724
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 1 deletion.
34 changes: 34 additions & 0 deletions doc/api-extensions.md
@@ -0,0 +1,34 @@
# API extensions

The changes below were introduced to the LXC API after the 3.0 API was finalized.

They are all backward compatible and can be detected by client tools by
called the `lxc_has_api_extension` function.

## lxc\_log

This introduces a way to initialize a logging instance from the API for a given
container.

## lxc\_config\_item\_is\_supported

This introduces the `lxc_config_item_is_supported` function. It allows users to
check whether their LXC instance supports a given configuration key.

## console\_log

This adds support to container's console log. The console log is implemented as
an efficient ringbuffer.

## reboot2

This adds `reboot2()` as a new API extension. This function properly waits
until a reboot succeeded. It takes a timeout argument. When set to `> 0`
`reboot2()` will block until the timeout is reached, if timeout is set to zero
`reboot2()` will not block, if set to -1 `reboot2()` will block indefinitly.

## mount\_injection

This adds support for injecting and removing mounts into/from a running
containers. Two new API functions `mount()` and `umount()` are added. They
mirror the current mount and umount API of the kernel.
4 changes: 3 additions & 1 deletion src/lxc/Makefile.am
Expand Up @@ -2,7 +2,8 @@ pkginclude_HEADERS = attach_options.h \
lxccontainer.h \
version.h

noinst_HEADERS = attach.h \
noinst_HEADERS = api_extensions.h \
attach.h \
caps.h \
cgroups/cgroup.h \
cgroups/cgroup_utils.h \
Expand Down Expand Up @@ -85,6 +86,7 @@ endif

lib_LTLIBRARIES = liblxc.la
liblxc_la_SOURCES = af_unix.c af_unix.h \
api_extensions.h \
attach.c attach.h \
caps.c caps.h \
cgroups/cgfsng.c \
Expand Down
48 changes: 48 additions & 0 deletions src/lxc/api_extensions.h
@@ -0,0 +1,48 @@
/* liblxcapi
*
* Copyright © 2018 Christian Brauner <christian.brauner@ubuntu.com>.
* Copyright © 2018 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2, as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#ifndef __LXC_API_EXTENSIONS_H
#define __LXC_API_EXTENSIONS_H

#include "config.h"
#include <stdio.h>
#include <stdlib.h>

/*
* api_extensions is the list of all API extensions in the order they were
* added.
The following kind of changes come with a new extensions:
- New public functions
- New configuration key
- New valid values for a configuration key
*/
static char *api_extensions[] = {
"lxc_log",
"lxc_config_item_is_supported",
"console_log",
"reboot2",
"mount_injection",
"cgroup_relative",
};

static size_t nr_api_extensions = sizeof(api_extensions) / sizeof(*api_extensions);

#endif /* __LXC_API_EXTENSIONS_H */
14 changes: 14 additions & 0 deletions src/lxc/lxccontainer.c
Expand Up @@ -42,6 +42,7 @@
#include <unistd.h>

#include "af_unix.h"
#include "api_extensions.h"
#include "attach.h"
#include "cgroup.h"
#include "commands.h"
Expand Down Expand Up @@ -5671,3 +5672,16 @@ bool lxc_config_item_is_supported(const char *key)
{
return !!lxc_get_config(key);
}

bool lxc_has_api_extension(const char *extension)
{
/* The NULL API extension is always present. :) */
if (!extension)
return true;

for (size_t i = 0; i < nr_api_extensions; i++)
if (strcmp(api_extensions[i], extension) == 0)
return true;

return false;
}
7 changes: 7 additions & 0 deletions src/lxc/lxccontainer.h
Expand Up @@ -1123,6 +1123,13 @@ void lxc_log_close(void);
*/
bool lxc_config_item_is_supported(const char *key);

/*!
* \brief Check if an API extension is supported by this LXC instance.
*
* \param extension API extension to check for.
*/
bool lxc_has_api_extension(const char *extension);

#ifdef __cplusplus
}
#endif
Expand Down

0 comments on commit 7c88724

Please sign in to comment.