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

Reply via email to