The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/1746
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) ===
From 49072f06f746b1957504c62133445ccf04ddb31c Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Thu, 10 Aug 2017 23:42:41 +0200 Subject: [PATCH 1/6] confile: cleanup Signed-off-by: Christian Brauner <[email protected]> --- src/lxc/confile.c | 61 +++++++++++++------------------------------------------ 1 file changed, 14 insertions(+), 47 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 4a9dfc5d8..a5cfec9ef 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -139,31 +139,21 @@ static struct lxc_config_t config[] = { { "lxc.tty.dir", set_config_tty_dir, get_config_tty_dir, clr_config_tty_dir, }, { "lxc.tty.max", set_config_tty_max, get_config_tty_max, clr_config_tty_max, }, - /* REMOVE IN LXC 3.0 - legacy pts key - */ + /* [START]: REMOVE IN LXC 3.0 */ { "lxc.pts", set_config_pty_max, get_config_pty_max, clr_config_pty_max, }, - - /* REMOVE IN LXC 3.0 - legacy devttydir key - */ { "lxc.devttydir", set_config_tty_dir, get_config_tty_dir, clr_config_tty_dir, }, - - /* REMOVE IN LXC 3.0 - legacy tty key - */ { "lxc.tty", set_config_tty_max, get_config_tty_max, clr_config_tty_max, }, + /* [END]: REMOVE IN LXC 3.0 */ { "lxc.apparmor.profile", set_config_apparmor_profile, get_config_apparmor_profile, clr_config_apparmor_profile, }, { "lxc.apparmor.allow_incomplete", set_config_apparmor_allow_incomplete, get_config_apparmor_allow_incomplete, clr_config_apparmor_allow_incomplete, }, { "lxc.selinux.context", set_config_selinux_context, get_config_selinux_context, clr_config_selinux_context, }, - /* REMOVE IN LXC 3.0 - legacy security keys - */ + /* [START]: REMOVE IN LXC 3.0 */ { "lxc.aa_profile", set_config_lsm_aa_profile, get_config_lsm_aa_profile, clr_config_lsm_aa_profile, }, { "lxc.aa_allow_incomplete", set_config_lsm_aa_incomplete, get_config_lsm_aa_incomplete, clr_config_lsm_aa_incomplete, }, { "lxc.se_context", set_config_lsm_se_context, get_config_lsm_se_context, clr_config_lsm_se_context, }, + /* [END]: REMOVE IN LXC 3.0 */ { "lxc.cgroup", set_config_cgroup, get_config_cgroup, clr_config_cgroup, }, { "lxc.id_map", set_config_idmaps, get_config_idmaps, clr_config_idmaps, }, @@ -174,27 +164,14 @@ static struct lxc_config_t config[] = { { "lxc.rootfs.options", set_config_rootfs_options, get_config_rootfs_options, clr_config_rootfs_options, }, { "lxc.rootfs.path", set_config_rootfs_path, get_config_rootfs_path, clr_config_rootfs_path, }, - /* REMOVE IN LXC 3.0 - legacy mount key - */ + /* [START]: REMOVE IN LXC 3.0 */ { "lxc.mount", set_config_mount_fstab, get_config_mount_fstab, clr_config_mount_fstab, }, - - /* REMOVE IN LXC 3.0 - legacy rootfs.backend key - */ { "lxc.rootfs.backend", set_config_rootfs_backend, get_config_rootfs_backend, clr_config_rootfs_backend, }, - - /* REMOVE IN LXC 3.0 - legacy rootfs key - */ { "lxc.rootfs", set_config_rootfs_path, get_config_rootfs_path, clr_config_rootfs_path, }, + { "lxc.utsname", set_config_uts_name, get_config_uts_name, clr_config_uts_name, }, + /* [END]: REMOVE IN LXC 3.0 */ - /* REMOVE IN LXC 3.0 - legacy utsname key - */ - { "lxc.utsname", set_config_uts_name, get_config_uts_name, clr_config_uts_name, }, - - { "lxc.uts.name", set_config_uts_name, get_config_uts_name, clr_config_uts_name, }, + { "lxc.uts.name", set_config_uts_name, get_config_uts_name, clr_config_uts_name, }, { "lxc.hook.pre-start", set_config_hooks, get_config_hooks, clr_config_hooks, }, { "lxc.hook.pre-mount", set_config_hooks, get_config_hooks, clr_config_hooks, }, { "lxc.hook.mount", set_config_hooks, get_config_hooks, clr_config_hooks, }, @@ -206,9 +183,7 @@ static struct lxc_config_t config[] = { { "lxc.hook.destroy", set_config_hooks, get_config_hooks, clr_config_hooks, }, { "lxc.hook", set_config_hooks, get_config_hooks, clr_config_hooks, }, - /* REMOVE IN LXC 3.0 - legacy security keys - */ + /* [START]: REMOVE IN LXC 3.0 */ { "lxc.network.type", set_config_network_legacy_type, get_config_network_legacy_item, clr_config_network_legacy_item, }, { "lxc.network.flags", set_config_network_legacy_flags, get_config_network_legacy_item, clr_config_network_legacy_item, }, { "lxc.network.link", set_config_network_legacy_link, get_config_network_legacy_item, clr_config_network_legacy_item, }, @@ -226,6 +201,7 @@ static struct lxc_config_t config[] = { { "lxc.network.ipv6", set_config_network_legacy_ipv6, get_config_network_legacy_item, clr_config_network_legacy_item, }, { "lxc.network.", set_config_network_legacy_nic, get_config_network_legacy_item, clr_config_network_legacy_item, }, { "lxc.network", set_config_network_legacy, get_config_network_legacy, clr_config_network_legacy, }, + /* [END]: REMOVE IN LXC 3.0 */ { "lxc.net.type", set_config_net_type, get_config_net_type, clr_config_net_type, }, { "lxc.net.flags", set_config_net_flags, get_config_net_flags, clr_config_net_flags, }, @@ -252,22 +228,13 @@ static struct lxc_config_t config[] = { { "lxc.include", set_config_includefiles, get_config_includefiles, clr_config_includefiles, }, { "lxc.autodev", set_config_autodev, get_config_autodev, clr_config_autodev, }, - /* REMOVE IN LXC 3.0 - legacy seccomp key - */ + /* [START]: REMOVE IN LXC 3.0 */ { "lxc.seccomp", set_config_seccomp_profile, get_config_seccomp_profile, clr_config_seccomp_profile, }, - - /* REMOVE IN LXC 3.0 - legacy console key - */ { "lxc.console", set_config_console_path, get_config_console_path, clr_config_console_path, }, - - /* REMOVE IN LXC 3.0 - legacy singal keys - */ { "lxc.haltsignal", set_config_signal_halt, get_config_signal_halt, clr_config_signal_halt, }, { "lxc.rebootsignal", set_config_signal_reboot, get_config_signal_reboot, clr_config_signal_reboot, }, { "lxc.stopsignal", set_config_signal_stop, get_config_signal_stop, clr_config_signal_stop, }, + /* [END]: REMOVE IN LXC 3.0 */ { "lxc.signal.halt", set_config_signal_halt, get_config_signal_halt, clr_config_signal_halt, }, { "lxc.signal.reboot", set_config_signal_reboot, get_config_signal_reboot, clr_config_signal_reboot, }, @@ -281,7 +248,7 @@ static struct lxc_config_t config[] = { { "lxc.ephemeral", set_config_ephemeral, get_config_ephemeral, clr_config_ephemeral, }, { "lxc.no_new_privs", set_config_no_new_privs, get_config_no_new_privs, clr_config_no_new_privs, }, - /* REMOVE IN LXC 3.0: legacy keys [START]*/ + /* [START]: REMOVE IN LXC 3.0 */ { "lxc.syslog", set_config_log_syslog, get_config_log_syslog, clr_config_log_syslog, }, { "lxc.loglevel", set_config_log_level, get_config_log_level, clr_config_log_level, }, { "lxc.logfile", set_config_log_file, get_config_log_file, clr_config_log_file, }, @@ -289,7 +256,7 @@ static struct lxc_config_t config[] = { { "lxc.init_uid", set_config_init_uid, get_config_init_uid, clr_config_init_uid, }, { "lxc.init_gid", set_config_init_gid, get_config_init_gid, clr_config_init_gid, }, { "lxc.limit", set_config_limit, get_config_limit, clr_config_limit, }, - /* REMOVE IN LXC 3.0: legacy keys [END]*/ + /* [END]: REMOVE IN LXC 3.0 */ { "lxc.log.syslog", set_config_log_syslog, get_config_log_syslog, clr_config_log_syslog, }, { "lxc.log.level", set_config_log_level, get_config_log_level, clr_config_log_level, }, From 70c1e708fa948596e72d041738947f7e637cc9c7 Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Thu, 10 Aug 2017 23:48:59 +0200 Subject: [PATCH 2/6] confile: non-functional changes Signed-off-by: Christian Brauner <[email protected]> --- src/lxc/confile.c | 37 ++++++++++++++++++++----------------- src/lxc/confile.h | 2 ++ 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index a5cfec9ef..cd77e875a 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -4,6 +4,8 @@ * * Authors: * Daniel Lezcano <daniel.lezcano at free.fr> + * Serge Hallyn <[email protected]> + * Christian Brauner <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -19,39 +21,40 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + #define _GNU_SOURCE -#define __STDC_FORMAT_MACROS /* Required for PRIu64 to work. */ +#define __STDC_FORMAT_MACROS +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <inttypes.h> +#include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <syslog.h> +#include <time.h> #include <unistd.h> -#include <errno.h> -#include <fcntl.h> -#include <ctype.h> -#include <inttypes.h> /* Required for PRIu64 to work. */ -#include <signal.h> +#include <arpa/inet.h> +#include <net/if.h> +#include <netinet/in.h> +#include <sys/param.h> #include <sys/stat.h> #include <sys/types.h> -#include <sys/param.h> #include <sys/utsname.h> -#include <arpa/inet.h> -#include <netinet/in.h> -#include <net/if.h> -#include <time.h> -#include <dirent.h> -#include <syslog.h> -#include "parse.h" +#include "conf.h" #include "config.h" #include "confile.h" #include "confile_legacy.h" #include "confile_utils.h" -#include "utils.h" #include "log.h" -#include "conf.h" -#include "network.h" #include "lxcseccomp.h" +#include "network.h" +#include "parse.h" #include "storage.h" +#include "utils.h" #if HAVE_IFADDRS_H #include <ifaddrs.h> diff --git a/src/lxc/confile.h b/src/lxc/confile.h index 047e0ee6c..8c4991f0e 100644 --- a/src/lxc/confile.h +++ b/src/lxc/confile.h @@ -5,6 +5,8 @@ * * Authors: * Daniel Lezcano <daniel.lezcano at free.fr> + * Serge Hallyn <[email protected]> + * Christian Brauner <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public From 01f55c40982b424ae56bd8753616faecfe8a3456 Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Fri, 11 Aug 2017 00:11:34 +0200 Subject: [PATCH 3/6] confile: rework lxc_list_net() Signed-off-by: Christian Brauner <[email protected]> --- src/lxc/confile.c | 152 +++++++++++++++++++------------------------------ src/lxc/confile.h | 9 ++- src/lxc/lxccontainer.c | 2 +- 3 files changed, 69 insertions(+), 94 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index cd77e875a..91e90cac7 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -435,98 +435,6 @@ static int set_config_net_type(const char *key, const char *value, return 0; } -/* - * If you have p="lxc.net.0.link", pass it p+8 - * to get back '0' (the index of the nic). - */ -static int get_network_netdev_idx(const char *key) -{ - int ret, idx; - - if (*key < '0' || *key > '9') - return -1; - - ret = sscanf(key, "%d", &idx); - if (ret != 1) - return -1; - - return idx; -} - -/* - * If you have p="lxc.net.0", pass this p+8 and it will return - * the netdev of the first configured nic. - */ -static struct lxc_netdev *get_netdev_from_key(const char *key, - struct lxc_list *network) -{ - int idx; - struct lxc_list *it; - int i = 0; - struct lxc_netdev *netdev = NULL; - - idx = get_network_netdev_idx(key); - if (idx == -1) - return NULL; - - lxc_list_for_each(it, network) { - if (idx == i++) { - netdev = it->elem; - break; - } - } - - return netdev; -} - -extern int lxc_list_nicconfigs(struct lxc_conf *c, const char *key, char *retv, - int inlen) -{ - struct lxc_netdev *netdev; - int len; - int fulllen = 0; - - netdev = get_netdev_from_key(key + 8, &c->network); - if (!netdev) - return -1; - - if (!retv) - inlen = 0; - else - memset(retv, 0, inlen); - - strprint(retv, inlen, "type\n"); - strprint(retv, inlen, "script.up\n"); - strprint(retv, inlen, "script.down\n"); - if (netdev->type != LXC_NET_EMPTY) { - strprint(retv, inlen, "flags\n"); - strprint(retv, inlen, "link\n"); - strprint(retv, inlen, "name\n"); - strprint(retv, inlen, "hwaddr\n"); - strprint(retv, inlen, "mtu\n"); - strprint(retv, inlen, "ipv6.address\n"); - strprint(retv, inlen, "ipv6.gateway\n"); - strprint(retv, inlen, "ipv4.address\n"); - strprint(retv, inlen, "ipv4.gateway\n"); - } - - switch (netdev->type) { - case LXC_NET_VETH: - strprint(retv, inlen, "veth.pair\n"); - break; - case LXC_NET_MACVLAN: - strprint(retv, inlen, "macvlan.mode\n"); - break; - case LXC_NET_VLAN: - strprint(retv, inlen, "vlan.id\n"); - break; - case LXC_NET_PHYS: - break; - } - - return fulllen; -} - static int set_config_net_flags(const char *key, const char *value, struct lxc_conf *lxc_conf, void *data) { @@ -3734,6 +3642,66 @@ static struct lxc_config_t *get_network_config_ops(const char *key, return NULL; } +int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen) +{ + int len; + const char *idxstring; + struct lxc_config_t *config; + struct lxc_netdev *netdev; + int fulllen = 0; + ssize_t idx = -1; + char *deindexed_key = NULL; + + idxstring = key + 8; + if (!isdigit(*idxstring)) + return -1; + + config = get_network_config_ops(key, c, &idx, &deindexed_key); + if (!config || idx < 0) + return -1; + + netdev = lxc_get_netdev_by_idx(c, (unsigned int)idx, false); + free(deindexed_key); + if (!netdev) + return -1; + + if (!retv) + inlen = 0; + else + memset(retv, 0, inlen); + + strprint(retv, inlen, "type\n"); + strprint(retv, inlen, "script.up\n"); + strprint(retv, inlen, "script.down\n"); + if (netdev->type != LXC_NET_EMPTY) { + strprint(retv, inlen, "flags\n"); + strprint(retv, inlen, "link\n"); + strprint(retv, inlen, "name\n"); + strprint(retv, inlen, "hwaddr\n"); + strprint(retv, inlen, "mtu\n"); + strprint(retv, inlen, "ipv6.address\n"); + strprint(retv, inlen, "ipv6.gateway\n"); + strprint(retv, inlen, "ipv4.address\n"); + strprint(retv, inlen, "ipv4.gateway\n"); + } + + switch (netdev->type) { + case LXC_NET_VETH: + strprint(retv, inlen, "veth.pair\n"); + break; + case LXC_NET_MACVLAN: + strprint(retv, inlen, "macvlan.mode\n"); + break; + case LXC_NET_VLAN: + strprint(retv, inlen, "vlan.id\n"); + break; + case LXC_NET_PHYS: + break; + } + + return fulllen; +} + /* * Config entry is something like "lxc.net.0.ipv4" the key 'lxc.net.' * was found. So we make sure next comes an integer, find the right callback diff --git a/src/lxc/confile.h b/src/lxc/confile.h index 8c4991f0e..a5c2e36bf 100644 --- a/src/lxc/confile.h +++ b/src/lxc/confile.h @@ -38,6 +38,7 @@ typedef int (*config_set_cb)(const char *, const char *, struct lxc_conf *, typedef int (*config_get_cb)(const char *, char *, int, struct lxc_conf *, void *); typedef int (*config_clr_cb)(const char *, struct lxc_conf *c, void *data); + struct lxc_config_t { char *name; config_set_cb set; @@ -46,7 +47,13 @@ struct lxc_config_t { }; extern struct lxc_config_t *lxc_getconfig(const char *key); -extern int lxc_list_nicconfigs(struct lxc_conf *c, const char *key, char *retv, int inlen); + +/* List all configuration items associated with a given network. For example + * pass "lxc.net.[i]" to retrieve all configuration items associated with + * the network associated with index [i]. + */ +extern int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, + int inlen); extern int lxc_listconfigs(char *retv, int inlen); extern int lxc_config_read(const char *file, struct lxc_conf *conf, bool from_include); extern int append_unexp_config_line(const char *line, struct lxc_conf *conf); diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 44b4068d2..025ac4e17 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -2261,7 +2261,7 @@ static int do_lxcapi_get_keys(struct lxc_container *c, const char *key, char *re return -1; int ret = -1; if (strncmp(key, "lxc.net.", 8) == 0) - ret = lxc_list_nicconfigs(c->lxc_conf, key, retv, inlen); + ret = lxc_list_net(c->lxc_conf, key, retv, inlen); else if (strncmp(key, "lxc.network.", 12) == 0) ret = lxc_list_nicconfigs_legacy(c->lxc_conf, key, retv, inlen); container_mem_unlock(c); From 3aea1a764305bc8ce32aa1e33254e42186a9d171 Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Fri, 11 Aug 2017 00:13:25 +0200 Subject: [PATCH 4/6] confile: non-functional changes Signed-off-by: Christian Brauner <[email protected]> --- src/lxc/confile.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lxc/confile.h b/src/lxc/confile.h index a5c2e36bf..191676ffb 100644 --- a/src/lxc/confile.h +++ b/src/lxc/confile.h @@ -33,11 +33,12 @@ struct lxc_conf; struct lxc_list; -typedef int (*config_set_cb)(const char *, const char *, struct lxc_conf *, +typedef int (*config_set_cb)(const char *key, const char *value, + struct lxc_conf *conf, void *data); +typedef int (*config_get_cb)(const char *key, char *value, int inlen, + struct lxc_conf *conf, void *data); +typedef int (*config_clr_cb)(const char *key, struct lxc_conf *conf, void *data); -typedef int (*config_get_cb)(const char *, char *, int, struct lxc_conf *, - void *); -typedef int (*config_clr_cb)(const char *, struct lxc_conf *c, void *data); struct lxc_config_t { char *name; From cfc67626817dc65e397cfc9904498771536de82b Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Fri, 11 Aug 2017 00:19:10 +0200 Subject: [PATCH 5/6] confile: lxc_listconfigs -> lxc_list_config_items Signed-off-by: Christian Brauner <[email protected]> --- src/lxc/confile.c | 42 +++++++++++++++++++++--------------------- src/lxc/confile.h | 2 +- src/lxc/confile_utils.c | 1 - src/lxc/lxccontainer.c | 2 +- src/tests/config_jump_table.c | 4 ++-- 5 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 91e90cac7..6f863e5da 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -366,27 +366,6 @@ extern struct lxc_config_t *lxc_getconfig(const char *key) return NULL; } -int lxc_listconfigs(char *retv, int inlen) -{ - size_t i; - int len; - int fulllen = 0; - - if (!retv) - inlen = 0; - else - memset(retv, 0, inlen); - - for (i = 0; i < config_size; i++) { - char *s = config[i].name; - if (s[strlen(s) - 1] == '.') - continue; - strprint(retv, inlen, "%s\n", s); - } - - return fulllen; -} - static int set_config_net(const char *key, const char *value, struct lxc_conf *lxc_conf, void *data) { @@ -4506,3 +4485,24 @@ static int get_config_net_ipv6_address(const char *key, char *retv, int inlen, return fulllen; } + +int lxc_list_config_items(char *retv, int inlen) +{ + size_t i; + int len; + int fulllen = 0; + + if (!retv) + inlen = 0; + else + memset(retv, 0, inlen); + + for (i = 0; i < config_size; i++) { + char *s = config[i].name; + if (s[strlen(s) - 1] == '.') + continue; + strprint(retv, inlen, "%s\n", s); + } + + return fulllen; +} diff --git a/src/lxc/confile.h b/src/lxc/confile.h index 191676ffb..ef0343945 100644 --- a/src/lxc/confile.h +++ b/src/lxc/confile.h @@ -55,7 +55,7 @@ extern struct lxc_config_t *lxc_getconfig(const char *key); */ extern int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen); -extern int lxc_listconfigs(char *retv, int inlen); +extern int lxc_list_config_items(char *retv, int inlen); extern int lxc_config_read(const char *file, struct lxc_conf *conf, bool from_include); extern int append_unexp_config_line(const char *line, struct lxc_conf *conf); diff --git a/src/lxc/confile_utils.c b/src/lxc/confile_utils.c index 332b98ae8..fa3f64598 100644 --- a/src/lxc/confile_utils.c +++ b/src/lxc/confile_utils.c @@ -680,4 +680,3 @@ bool parse_limit_value(const char **value, unsigned long *res) return true; } - diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 025ac4e17..a02e93e77 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -2249,7 +2249,7 @@ WRAP_API_1(char *, lxcapi_get_running_config_item, const char *) static int do_lxcapi_get_keys(struct lxc_container *c, const char *key, char *retv, int inlen) { if (!key) - return lxc_listconfigs(retv, inlen); + return lxc_list_config_items(retv, inlen); /* * Support 'lxc.net.<idx>', i.e. 'lxc.net.0' * This is an intelligent result to show which keys are valid given diff --git a/src/tests/config_jump_table.c b/src/tests/config_jump_table.c index f2f70dd33..1fb244d42 100644 --- a/src/tests/config_jump_table.c +++ b/src/tests/config_jump_table.c @@ -38,7 +38,7 @@ int main(int argc, char *argv[]) int fulllen = 0, inlen = 0, ret = EXIT_FAILURE; char *key, *keys, *saveptr = NULL; - fulllen = lxc_listconfigs(NULL, inlen); + fulllen = lxc_list_config_items(NULL, inlen); keys = malloc(sizeof(char) * fulllen + 1); if (!keys) { @@ -46,7 +46,7 @@ int main(int argc, char *argv[]) exit(ret); } - if (lxc_listconfigs(keys, fulllen) != fulllen) { + if (lxc_list_config_items(keys, fulllen) != fulllen) { lxc_error("%s\n", "failed to retrieve configuration keys"); goto on_error; } From a5448c1530ba3778f8a14edc0c4a232db6cbe04b Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Fri, 11 Aug 2017 00:30:09 +0200 Subject: [PATCH 6/6] confile: move lxc_list_net() Signed-off-by: Christian Brauner <[email protected]> --- src/lxc/confile.c | 120 ++++++++++++++++++++++++------------------------- src/lxc/lxccontainer.c | 2 +- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 6f863e5da..032051555 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -3621,66 +3621,6 @@ static struct lxc_config_t *get_network_config_ops(const char *key, return NULL; } -int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen) -{ - int len; - const char *idxstring; - struct lxc_config_t *config; - struct lxc_netdev *netdev; - int fulllen = 0; - ssize_t idx = -1; - char *deindexed_key = NULL; - - idxstring = key + 8; - if (!isdigit(*idxstring)) - return -1; - - config = get_network_config_ops(key, c, &idx, &deindexed_key); - if (!config || idx < 0) - return -1; - - netdev = lxc_get_netdev_by_idx(c, (unsigned int)idx, false); - free(deindexed_key); - if (!netdev) - return -1; - - if (!retv) - inlen = 0; - else - memset(retv, 0, inlen); - - strprint(retv, inlen, "type\n"); - strprint(retv, inlen, "script.up\n"); - strprint(retv, inlen, "script.down\n"); - if (netdev->type != LXC_NET_EMPTY) { - strprint(retv, inlen, "flags\n"); - strprint(retv, inlen, "link\n"); - strprint(retv, inlen, "name\n"); - strprint(retv, inlen, "hwaddr\n"); - strprint(retv, inlen, "mtu\n"); - strprint(retv, inlen, "ipv6.address\n"); - strprint(retv, inlen, "ipv6.gateway\n"); - strprint(retv, inlen, "ipv4.address\n"); - strprint(retv, inlen, "ipv4.gateway\n"); - } - - switch (netdev->type) { - case LXC_NET_VETH: - strprint(retv, inlen, "veth.pair\n"); - break; - case LXC_NET_MACVLAN: - strprint(retv, inlen, "macvlan.mode\n"); - break; - case LXC_NET_VLAN: - strprint(retv, inlen, "vlan.id\n"); - break; - case LXC_NET_PHYS: - break; - } - - return fulllen; -} - /* * Config entry is something like "lxc.net.0.ipv4" the key 'lxc.net.' * was found. So we make sure next comes an integer, find the right callback @@ -4506,3 +4446,63 @@ int lxc_list_config_items(char *retv, int inlen) return fulllen; } + +int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen) +{ + int len; + const char *idxstring; + struct lxc_config_t *config; + struct lxc_netdev *netdev; + int fulllen = 0; + ssize_t idx = -1; + char *deindexed_key = NULL; + + idxstring = key + 8; + if (!isdigit(*idxstring)) + return -1; + + config = get_network_config_ops(key, c, &idx, &deindexed_key); + if (!config || idx < 0) + return -1; + + netdev = lxc_get_netdev_by_idx(c, (unsigned int)idx, false); + free(deindexed_key); + if (!netdev) + return -1; + + if (!retv) + inlen = 0; + else + memset(retv, 0, inlen); + + strprint(retv, inlen, "type\n"); + strprint(retv, inlen, "script.up\n"); + strprint(retv, inlen, "script.down\n"); + if (netdev->type != LXC_NET_EMPTY) { + strprint(retv, inlen, "flags\n"); + strprint(retv, inlen, "link\n"); + strprint(retv, inlen, "name\n"); + strprint(retv, inlen, "hwaddr\n"); + strprint(retv, inlen, "mtu\n"); + strprint(retv, inlen, "ipv6.address\n"); + strprint(retv, inlen, "ipv6.gateway\n"); + strprint(retv, inlen, "ipv4.address\n"); + strprint(retv, inlen, "ipv4.gateway\n"); + } + + switch (netdev->type) { + case LXC_NET_VETH: + strprint(retv, inlen, "veth.pair\n"); + break; + case LXC_NET_MACVLAN: + strprint(retv, inlen, "macvlan.mode\n"); + break; + case LXC_NET_VLAN: + strprint(retv, inlen, "vlan.id\n"); + break; + case LXC_NET_PHYS: + break; + } + + return fulllen; +} diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index a02e93e77..34696069c 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -2260,7 +2260,7 @@ static int do_lxcapi_get_keys(struct lxc_container *c, const char *key, char *re if (container_mem_lock(c)) return -1; int ret = -1; - if (strncmp(key, "lxc.net.", 8) == 0) + if (!strncmp(key, "lxc.net.", 8)) ret = lxc_list_net(c->lxc_conf, key, retv, inlen); else if (strncmp(key, "lxc.network.", 12) == 0) ret = lxc_list_nicconfigs_legacy(c->lxc_conf, key, retv, inlen);
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
