[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