On Tue, Apr 09, 2013 at 06:40:34PM +0800, Wenchao Xia wrote:
Hi, John
Sorry to interrupt but still need you to review this patch, which
make it work more flex on different version.
By the way, I got only 3 fail and they seems small problems in test
suit's code, do you think it is ready to release 0.6.2(with this patch
pushed)?
didn't we want to have the testsuite patches pushed too before the
release ?
Daniel
> In RH6.4 lldptool query command and output changed a bit,
> to make it work on different version, the string used in search and
> options used in lldptool command should be set in configuration file.
>
> Signed-off-by: Wenchao Xia <xiawenc(a)linux.vnet.ibm.com>
> ---
> libvirt-cim.conf | 12 ++++++++++++
> libxkutil/misc_util.c | 27 +++++++++++++++++++++++++++
> libxkutil/misc_util.h | 4 +++-
> src/Virt_SwitchService.c | 31 ++++++++++++++++++++++++-------
> 4 files changed, 66 insertions(+), 8 deletions(-)
>
> diff --git a/libvirt-cim.conf b/libvirt-cim.conf
> index 37d7b0f..40fc94a 100644
> --- a/libvirt-cim.conf
> +++ b/libvirt-cim.conf
> @@ -30,3 +30,15 @@
> # Default value: NULL, that is not set.
> #
> # migrate_ssh_temp_key = "/root/vm_migrate_tmp_id_rsa";
> +
> +# lldptool_query_options (string)
> +# Defines the command used in SwitchService to query VEPA support, will be
> +# used as "lldptool -i [INTERFACE] [OPTIONS]"
> +#
> +# lldptool_query_options = "-t -g ncb -V evbcfg";
> +
> +# vsi_search_string (string)
> +# Defines the string used in SwitchService to search in lldptool's output
> +#
> +# vsi_search_string0 = "supported forwarding mode: (0x40) reflective
relay";
> +# vsi_search_string1 = "supported capabilities: (0x7) RTE ECP VDP";
> diff --git a/libxkutil/misc_util.c b/libxkutil/misc_util.c
> index 00eb4b1..1a9a1b4 100644
> --- a/libxkutil/misc_util.c
> +++ b/libxkutil/misc_util.c
> @@ -236,6 +236,33 @@ const char *get_mig_ssh_tmp_key(void)
> return prop.value_string;
> }
>
> +const char *get_lldptool_query_options(void)
> +{
> + static LibvirtcimConfigProperty prop = {
> + "lldptool_query_options", CONFIG_STRING, {0},
0};
> +
> + libvirt_cim_config_get(&prop);
> + return prop.value_string;
> +}
> +
> +const char *get_vsi_search_string0(void)
> +{
> + static LibvirtcimConfigProperty prop = {
> + "vsi_search_string0", CONFIG_STRING, {0}, 0};
> +
> + libvirt_cim_config_get(&prop);
> + return prop.value_string;
> +}
> +
> +const char *get_vsi_search_string1(void)
> +{
> + static LibvirtcimConfigProperty prop = {
> + "vsi_search_string1", CONFIG_STRING, {0}, 0};
> +
> + libvirt_cim_config_get(&prop);
> + return prop.value_string;
> +}
> +
> virConnectPtr connect_by_classname(const CMPIBroker *broker,
> const char *classname,
> CMPIStatus *s)
> diff --git a/libxkutil/misc_util.h b/libxkutil/misc_util.h
> index 0f52290..06a37cc 100644
> --- a/libxkutil/misc_util.h
> +++ b/libxkutil/misc_util.h
> @@ -154,7 +154,9 @@ int virt_set_status(const CMPIBroker *broker,
>
> /* get libvirt-cim config */
> const char *get_mig_ssh_tmp_key(void);
> -
> +const char *get_lldptool_query_options(void);
> +const char *get_vsi_search_string0(void);
> +const char *get_vsi_search_string1(void);
> /*
> * Local Variables:
> * mode: C
> diff --git a/src/Virt_SwitchService.c b/src/Virt_SwitchService.c
> index 8991426..103f125 100644
> --- a/src/Virt_SwitchService.c
> +++ b/src/Virt_SwitchService.c
> @@ -46,13 +46,24 @@ static CMPIStatus check_vsi_support(char *command)
> CMPIStatus s = {CMPI_RC_OK, NULL};
> char buff[MAX_LEN];
> FILE *stream = NULL;
> - const char *searchStr[] = {" supported forwarding mode: "
> - "(0x40) reflective relay",
> - " supported capabilities: "
> - "(0x07) RTE ECP VDP",
> - NULL};
> + const char *string0 = get_vsi_search_string0();
> + const char *string1 = get_vsi_search_string1();
> + const char *searchStr[3];
> int matched = 0;
>
> + if (!string0) {
> + string0 = " supported forwarding mode: "
> + "(0x40) reflective relay";
> + }
> + if (!string1) {
> + string1 = " supported capabilities: "
> + "(0x7) RTE ECP VDP";
> + }
> + CU_DEBUG("vsi searching for string [%s] [%s]", string0,
string1);
> + searchStr[0] = string0;
> + searchStr[1] = string1;
> + searchStr[2] = NULL;
> +
> // Run lldptool command to find vsi support.
> stream = popen(command, "r");
> if (stream == NULL) {
> @@ -214,6 +225,7 @@ static CMPIStatus get_switchservice(const CMPIObjectPath
*reference,
> int i;
> char **if_list;
> char cmd[MAX_LEN];
> + const char *lldptool_query_options = NULL;
>
> *_inst = NULL;
> conn = connect_by_classname(broker, CLASSNAME(reference), &s);
> @@ -257,10 +269,15 @@ static CMPIStatus get_switchservice(const CMPIObjectPath
*reference,
>
> CU_DEBUG("Found %d interfaces", count);
>
> + lldptool_query_options = get_lldptool_query_options();
> + if (!lldptool_query_options) {
> + lldptool_query_options = "-t -g ncb -V evbcfg";
> + }
>
> for (i=0; i<count; i++) {
> - sprintf(cmd, "lldptool -i %s -t -V evbcfg", if_list[i]);
> - CU_DEBUG("running command %s ...", cmd);
> + sprintf(cmd, "lldptool -i %s %s",
> + if_list[i], lldptool_query_options);
> + CU_DEBUG("running command [%s]", cmd);
> s = check_vsi_support(cmd);
> if (s.rc == CMPI_RC_OK) {
> vsi = true;
>
--
Best Regards
Wenchao Xia
--
Daniel Veillard | Open Source and Standards, Red Hat
veillard(a)redhat.com | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
http://veillard.com/ | virtualization library
http://libvirt.org/