[lxc-devel] [PATCH] export lxc_cmd_get_config_item via API and use in for lxc-info

S.Çağlar Onur caglar at 10ur.org
Mon Jan 27 22:58:28 UTC 2014


On Mon, Jan 27, 2014 at 9:37 AM, S.Çağlar Onur <caglar at 10ur.org> wrote:
>
> On Jan 27, 2014 4:31 AM, "Stéphane Graber" <stgraber at ubuntu.com> wrote:
>>
>> On Mon, Jan 27, 2014 at 12:59:53AM -0500, S.Çağlar Onur wrote:
>> > This allows external users to query network related config items
>> > from the running containers.
>> >
>> > Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
>>
>> Looks reasonable, though I'd probably go with get_running_config_item
>> instead of get_cmd_config_item.
>>
>> If you're fine with that rename, I'll do the change and apply it.
>
> Yes, that's fine with me. Thanks!

I had some free time so I just renamed and sent to list for review.

>> > ---
>> >  src/lxc/lxc_info.c     |  8 ++++----
>> >  src/lxc/lxccontainer.c | 14 ++++++++++++++
>> >  src/lxc/lxccontainer.h | 13 +++++++++++++
>> >  3 files changed, 31 insertions(+), 4 deletions(-)
>> >
>> > diff --git a/src/lxc/lxc_info.c b/src/lxc/lxc_info.c
>> > index ee45c58..501d9c8 100644
>> > --- a/src/lxc/lxc_info.c
>> > +++ b/src/lxc/lxc_info.c
>> > @@ -139,7 +139,7 @@ static unsigned long long str_size_humanize(char
>> > *iobuf, size_t iobufsz)
>> >       return val;
>> >  }
>> >
>> > -static void print_net_stats(const char *name, const char *lxcpath)
>> > +static void print_net_stats(struct lxc_container *c)
>> >  {
>> >       int rc,netnr;
>> >       unsigned long long rx_bytes = 0, tx_bytes = 0;
>> > @@ -149,7 +149,7 @@ static void print_net_stats(const char *name, const
>> > char *lxcpath)
>> >
>> >       for(netnr = 0; ;netnr++) {
>> >               sprintf(buf, "lxc.network.%d.type", netnr);
>> > -             type = lxc_cmd_get_config_item(name, buf, lxcpath);
>> > +             type = c->get_cmd_config_item(c, buf);
>> >               if (!type)
>> >                       break;
>> >
>> > @@ -159,7 +159,7 @@ static void print_net_stats(const char *name, const
>> > char *lxcpath)
>> >                       sprintf(buf, "lxc.network.%d.link", netnr);
>> >               }
>> >               free(type);
>> > -             ifname = lxc_cmd_get_config_item(name, buf, lxcpath);
>> > +             ifname = c->get_cmd_config_item(c, buf);
>> >               if (!ifname)
>> >                       return;
>> >               printf("%-15s %s\n", "Link:", ifname);
>> > @@ -326,7 +326,7 @@ static int print_info(const char *name, const char
>> > *lxcpath)
>> >
>> >       if (stats) {
>> >               print_stats(c);
>> > -             print_net_stats(name, lxcpath);
>> > +             print_net_stats(c);
>> >       }
>> >
>> >       for(i = 0; i < keys; i++) {
>> > diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
>> > index d0c5e07..1ddac35 100644
>> > --- a/src/lxc/lxccontainer.c
>> > +++ b/src/lxc/lxccontainer.c
>> > @@ -1738,6 +1738,19 @@ static int lxcapi_get_config_item(struct
>> > lxc_container *c, const char *key, char
>> >       return ret;
>> >  }
>> >
>> > +static char* lxcapi_get_cmd_config_item(struct lxc_container *c, const
>> > char *key)
>> > +{
>> > +     char *ret;
>> > +
>> > +     if (!c || !c->lxc_conf)
>> > +             return NULL;
>> > +     if (container_mem_lock(c))
>> > +             return NULL;
>> > +     ret = lxc_cmd_get_config_item(c->name, key,
>> > c->get_config_path(c));
>> > +     container_mem_unlock(c);
>> > +     return ret;
>> > +}
>> > +
>> >  static int lxcapi_get_keys(struct lxc_container *c, const char *key,
>> > char *retv, int inlen)
>> >  {
>> >       if (!key)
>> > @@ -3259,6 +3272,7 @@ struct lxc_container *lxc_container_new(const char
>> > *name, const char *configpath
>> >       c->clear_config = lxcapi_clear_config;
>> >       c->clear_config_item = lxcapi_clear_config_item;
>> >       c->get_config_item = lxcapi_get_config_item;
>> > +     c->get_cmd_config_item = lxcapi_get_cmd_config_item;
>> >       c->get_cgroup_item = lxcapi_get_cgroup_item;
>> >       c->set_cgroup_item = lxcapi_set_cgroup_item;
>> >       c->get_config_path = lxcapi_get_config_path;
>> > diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h
>> > index 84caa31..ed9b767 100644
>> > --- a/src/lxc/lxccontainer.h
>> > +++ b/src/lxc/lxccontainer.h
>> > @@ -410,6 +410,19 @@ struct lxc_container {
>> >        */
>> >       int (*get_config_item)(struct lxc_container *c, const char *key,
>> > char *retv, int inlen);
>> >
>> > +
>> > +     /*!
>> > +      * \brief Retrieve the value of a config item from running
>> > container.
>> > +      *
>> > +      * \param c Container.
>> > +      * \param key Name of option to get.
>> > +      *
>> > +      * \return the item or NULL on error.
>> > +      *
>> > +      * \note Returned string must be freed by the caller.
>> > +      */
>> > +     char* (*get_cmd_config_item)(struct lxc_container *c, const char
>> > *key);
>> > +
>> >       /*!
>> >        * \brief Retrieve a list of config item keys given a key
>> >        * prefix.
>> > --
>> > 1.8.3.2
>> >
>> > _______________________________________________
>> > lxc-devel mailing list
>> > lxc-devel at lists.linuxcontainers.org
>> > http://lists.linuxcontainers.org/listinfo/lxc-devel
>>
>> --
>> Stéphane Graber
>> Ubuntu developer
>> http://www.ubuntu.com
>>
>> _______________________________________________
>> lxc-devel mailing list
>> lxc-devel at lists.linuxcontainers.org
>> http://lists.linuxcontainers.org/listinfo/lxc-devel
>>



-- 
S.Çağlar Onur <caglar at 10ur.org>


More information about the lxc-devel mailing list