[Libvirt-cim] [PATCH 2/4] FilterList: Add 'Priority' property

Sharad Mishra snmishra at linux.vnet.ibm.com
Tue Jan 31 19:15:15 UTC 2012


+1 looks okay

-Sharad

On Mon, 2012-01-30 at 21:57 -0200, Eduardo Lima (Etrunko) wrote:
> From: "Eduardo Lima (Etrunko)" <eblima at br.ibm.com>
> 
> According to libvirt network filter specification, since verstion 0.9.8,
> filter lists can be assigned priorities.
> 
> Signed-off-by: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
> ---
>  libxkutil/acl_parsing.c |    2 ++
>  libxkutil/acl_parsing.h |    1 +
>  schema/FilterList.mof   |    9 +++++++++
>  src/Makefile.am         |    4 ++--
>  src/Virt_FilterEntry.c  |   11 ++++-------
>  src/Virt_FilterEntry.h  |    6 ++++++
>  src/Virt_FilterList.c   |    5 ++++-
>  7 files changed, 28 insertions(+), 10 deletions(-)
> 
> diff --git a/libxkutil/acl_parsing.c b/libxkutil/acl_parsing.c
> index 9c4b4b2..2930928 100644
> --- a/libxkutil/acl_parsing.c
> +++ b/libxkutil/acl_parsing.c
> @@ -134,6 +134,7 @@ void cleanup_filter(struct acl_filter *filter)
>          free(filter->uuid);
>          free(filter->name);
>          free(filter->chain);
> +        free(filter->priority);
> 
>          for (i = 0; i < filter->rule_ct; i++)
>                  cleanup_rule(filter->rules[i]);
> @@ -345,6 +346,7 @@ static int parse_acl_filter(xmlNode *fnode, struct acl_filter *filter)
>                  goto err;
> 
>          filter->chain = get_attr_value(fnode, "chain");
> +        filter->priority = get_attr_value(fnode, "priority");
> 
>          for (child = fnode->children; child != NULL; child = child->next) {
>                  if (XSTREQ(child->name, "uuid")) {
> diff --git a/libxkutil/acl_parsing.h b/libxkutil/acl_parsing.h
> index 5b99175..5abcb02 100644
> --- a/libxkutil/acl_parsing.h
> +++ b/libxkutil/acl_parsing.h
> @@ -148,6 +148,7 @@ struct acl_filter {
>          char *uuid;
>          char *name;
>          char *chain;
> +        char *priority;
> 
>          struct acl_rule **rules;
>          int rule_ct;
> diff --git a/schema/FilterList.mof b/schema/FilterList.mof
> index a98c14d..7339db6 100644
> --- a/schema/FilterList.mof
> +++ b/schema/FilterList.mof
> @@ -1,4 +1,13 @@
>  // Copyright IBM Corp. 2011
>  class KVM_FilterList : CIM_FilterList
>  {
> +        [Description("The priority of the filter controls the order in which "
> +                "the filter will be, instantiated relative to other filters. "
> +                "Filters with lower value will be instantiated and therefore "
> +                "evaluated before rules with higher value. Valid values are "
> +                "in the range of -1000 to 1000. If this attribute is not "
> +                "provided, the value 500 will automatically be assigned."),
> +        MinValue(-1000),
> +        MaxValue(1000)]
> +        sint16 Priority = 500;
>  };
> diff --git a/src/Makefile.am b/src/Makefile.am
> index c28dc9a..3f90926 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -255,9 +255,9 @@ libVirt_FilterEntry_la_DEPENDENCIES = libVirt_HostSystem.la
>  libVirt_FilterEntry_la_SOURCES = Virt_FilterEntry.c
>  libVirt_FilterEntry_la_LIBADD = -lVirt_HostSystem
> 
> -libVirt_FilterList_la_DEPENDENCIES = libVirt_HostSystem.la
> +libVirt_FilterList_la_DEPENDENCIES = libVirt_HostSystem.la libVirt_FilterEntry.la
>  libVirt_FilterList_la_SOURCES = Virt_FilterList.c
> -libVirt_FilterList_la_LIBADD = -lVirt_HostSystem
> +libVirt_FilterList_la_LIBADD = -lVirt_HostSystem -lVirt_FilterEntry
> 
>  libVirt_EntriesInFilterList_la_DEPENDENCIES = libVirt_FilterEntry.la libVirt_FilterList.la 
>  libVirt_EntriesInFilterList_la_SOURCES = Virt_EntriesInFilterList.c
> diff --git a/src/Virt_FilterEntry.c b/src/Virt_FilterEntry.c
> index a4fa4cd..c058b5e 100644
> --- a/src/Virt_FilterEntry.c
> +++ b/src/Virt_FilterEntry.c
> @@ -192,15 +192,12 @@ static int convert_direction(const char *s)
>          return direction;
>  }
> 
> -static int convert_priority(const char *s)
> +int convert_priority(const char *s)
>  {
> -        int priority = 0;
> -
> -        if (s != NULL) {
> -                priority = atoi(s);
> -        }
> +        if (s == NULL)
> +                return 0;
> 
> -        return priority;
> +        return atoi(s);
>  }
> 
>  static int convert_action(const char *s)
> diff --git a/src/Virt_FilterEntry.h b/src/Virt_FilterEntry.h
> index 2fe17c4..a30f46d 100644
> --- a/src/Virt_FilterEntry.h
> +++ b/src/Virt_FilterEntry.h
> @@ -72,6 +72,12 @@ CMPIStatus instance_from_rule(
>                  struct acl_rule *rule,
>                  CMPIInstance **instance);
> 
> +/**
> + * Convert a string representing the priority to corresponding integer value
> + *
> + * @param s A pointer to a string representing the priority
> + */
> +int convert_priority(const char *s);
>  #endif
> 
>  /*
> diff --git a/src/Virt_FilterList.c b/src/Virt_FilterList.c
> index 5b1b6e8..9b5dbae 100644
> --- a/src/Virt_FilterList.c
> +++ b/src/Virt_FilterList.c
> @@ -31,6 +31,7 @@
> 
>  #include "Virt_FilterList.h"
>  #include "Virt_HostSystem.h"
> +#include "Virt_FilterEntry.h"
> 
>  const static CMPIBroker *_BROKER;
> 
> @@ -44,7 +45,7 @@ static CMPIInstance *convert_filter_to_instance(
>          CMPIInstance *inst = NULL;
>          const char *sys_name = NULL;
>          const char *sys_ccname = NULL;
> -        int direction = 0;
> +        int direction = 0, priority;
> 
>          inst = get_typed_instance(broker,
>                                    CLASSNAME(reference),
> @@ -77,6 +78,8 @@ static CMPIInstance *convert_filter_to_instance(
>                          CMPI_chars);
>          CMSetProperty(inst, "Direction", (CMPIValue *)&direction, CMPI_uint16);
> 
> +        priority = convert_priority(filter->priority);
> +        CMSetProperty(inst, "Priority", (CMPIValue *)&priority, CMPI_sint16);
>   out:
>          return inst;
>  }





More information about the Libvirt-cim mailing list