Before checking net config, rtnet should be ready.

Signed-off-by: Hongzhan Chen <hongzhan.c...@intel.com>

diff --git a/testsuite/smokey/net_common/setup.c 
b/testsuite/smokey/net_common/setup.c
index 1badabdfb..bdae10bfb 100644
--- a/testsuite/smokey/net_common/setup.c
+++ b/testsuite/smokey/net_common/setup.c
@@ -138,6 +138,56 @@ static int do_down(const char *intf)
        return 0;
 }
 
+static int smokey_net_modinfo(int modid)
+{
+       struct module *m = modules + modid;
+       char buffer[128];
+       int err;
+
+       if (modid < 0)
+               return -EINVAL;
+
+       smokey_trace("%s module: modinfoing", m->name);
+       err = smokey_check_errno(
+               snprintf(buffer, sizeof(buffer), "modinfo %s", m->name));
+       if (err < 0)
+               return err;
+
+       err = smokey_check_errno(system(buffer));
+       if (err < 0)
+               return err;
+
+       if (!WIFEXITED(err)) {
+               smokey_warning("%s: abnormal exit", buffer);
+               return -EINVAL;
+       }
+
+       if (WEXITSTATUS(err) != 0) {
+               /* double check if there is 'module not found' error,
+                * translate it into -ENOSYS
+                */
+               err = smokey_check_errno(
+                       snprintf(buffer, sizeof(buffer),
+                               "modinfo %s 2>&1 | grep '%s not found'",
+                               m->name, m->name));
+               if (err < 0)
+                       return err;
+
+               err = smokey_check_errno(system(buffer));
+               if (err < 0)
+                       return err;
+
+               if (!WIFEXITED(err) || WEXITSTATUS(err) != 0) {
+                       smokey_warning("%s: abnormal exit", buffer);
+                       return -EINVAL;
+               }
+
+               return -ENOSYS;
+       }
+
+       return err;
+}
+
 static int smokey_net_modprobe(int modid)
 {
        struct module *m = modules + modid;
@@ -408,6 +458,14 @@ int smokey_net_setup(const char *driver, const char *intf, 
int tested_config,
        struct sockaddr_in *in_peer = vpeer;
        struct sockaddr *peer = vpeer;
 
+       err = smokey_net_modinfo(MODID_RTNET);
+       if (err < 0)
+               return err;
+
+       err = smokey_net_modprobe(MODID_RTNET);
+       if (err < 0)
+               return err;
+
        err = cobalt_corectl(_CC_COBALT_GET_NET_CONFIG,
                        &net_config, sizeof(net_config));
        if (err == -EINVAL)
-- 
2.17.1


Reply via email to