[Libvirt-cim] [PATCH] SwitchService: make command configurable

Wenchao Xia xiawenc at linux.vnet.ibm.com
Tue Apr 9 10:31:15 UTC 2013


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





More information about the Libvirt-cim mailing list