[Libvirt-cim] [PATCH] SwitchService: make command configurable
Wenchao Xia
xiawenc at linux.vnet.ibm.com
Tue Apr 9 10:40:34 UTC 2013
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)?
> 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 at 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
More information about the Libvirt-cim
mailing list