
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@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; -- 1.7.1