Whamcloud - gitweb
LU-1422 cray: Cray platforms set the initial connection value to high
[fs/lustre-release.git] / lustre / liblustre / tests / echo_test.c
index a77e951..a602f12 100644 (file)
@@ -1,29 +1,45 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
+/*
+ * GPL HEADER START
  *
- * Lustre Light user test program
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
- *  Copyright (c) 2002-2004 Cluster File Systems, Inc.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
  *
- *   This file is part of Lustre, http://www.lustre.org.
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
  *
- *   Lustre is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  *
- *   Lustre is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
  *
- *   You should have received a copy of the GNU General Public License
- *   along with Lustre; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * GPL HEADER END
+ */
+/*
+ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Use is subject to license terms.
+ */
+/*
+ * This file is part of Lustre, http://www.lustre.org/
+ * Lustre is a trademark of Sun Microsystems, Inc.
+ *
+ * lustre/liblustre/tests/echo_test.c
+ *
+ * Lustre Light user test program
  */
 
 #include <liblustre.h>
-#include <linux/obd.h>
-#include <linux/obd_class.h>
+#include <obd.h>
+#include <obd_class.h>
+#include <obd_ost.h>
 
 #define LIBLUSTRE_TEST 1
 #include "../utils/lctl.c"
 
 extern int class_handle_ioctl(unsigned int cmd, unsigned long arg);
 
-struct pingcli_args {
-        ptl_nid_t mynid;
-        ptl_nid_t nid;
-       ptl_pid_t port;
-        int count;
-        int size;
-};
-
-/*      bug #4615       */
-#if 0
-char *portals_id2str(int nal, ptl_process_id_t id, char *str)
-{
-        switch(nal){
-        case TCPNAL:
-                /* userspace NAL */
-        case IIBNAL:
-        case VIBNAL:
-        case OPENIBNAL:
-        case RANAL:
-        case SOCKNAL:
-                snprintf(str, PTL_NALFMT_SIZE - 1, "%u:%u.%u.%u.%u,%u",
-                         (__u32)(id.nid >> 32), HIPQUAD((id.nid)) , id.pid);
-                break;
-        case QSWNAL:
-        case GMNAL:
-        case LONAL:
-                snprintf(str, PTL_NALFMT_SIZE - 1, "%u:%u,%u",
-                         (__u32)(id.nid >> 32), (__u32)id.nid, id.pid);
-                break;
-        default:
-                snprintf(str, PTL_NALFMT_SIZE - 1, "?%d? %llx,%lx",
-                         nal, (long long)id.nid, (long)id.pid );
-                break;
-        }
-        return str;
-}
-#endif
-
 static int liblustre_ioctl(int dev_id, unsigned int opc, void *ptr)
 {
        int   rc = -EINVAL;
@@ -95,52 +73,51 @@ static char *echo_dev_name = "ECHO_CLIENT_DEV_NAME";
 
 static int connect_echo_client(void)
 {
-        struct lustre_cfg *lcfg;
+       struct lustre_cfg *lcfg;
         struct lustre_cfg_bufs bufs;
-       ptl_nid_t nid;
+        lnet_nid_t nid;
        char *peer = "ECHO_PEER_NID";
        class_uuid_t osc_uuid, echo_uuid;
        struct obd_uuid osc_uuid_str, echo_uuid_str;
-       int nal, err;
+       int err;
        ENTRY;
 
-        generate_random_uuid(osc_uuid);
+        ll_generate_random_uuid(osc_uuid);
         class_uuid_unparse(osc_uuid, &osc_uuid_str);
-        generate_random_uuid(echo_uuid);
+        ll_generate_random_uuid(echo_uuid);
         class_uuid_unparse(echo_uuid, &echo_uuid_str);
 
-        if (ptl_parse_nid(&nid, echo_server_nid)) {
+        nid = libcfs_str2nid(echo_server_nid);
+        if (nid == LNET_NID_ANY) {
                 CERROR("Can't parse NID %s\n", echo_server_nid);
                 RETURN(-EINVAL);
         }
-        nal = ptl_name2nal("tcp");
-        if (nal <= 0) {
-                CERROR("Can't parse NAL tcp\n");
-                RETURN(-EINVAL);
-        }
+
         /* add uuid */
         lustre_cfg_bufs_reset(&bufs, NULL);
         lustre_cfg_bufs_set_string(&bufs, 1, peer);
         lcfg = lustre_cfg_new(LCFG_ADD_UUID, &bufs);
         lcfg->lcfg_nid = nid;
-        lcfg->lcfg_nal = nal;
         err = class_process_config(lcfg);
         lustre_cfg_free(lcfg);
         if (err < 0) {
-                CERROR("failed add_uuid\n");
+               CERROR("failed add_uuid\n");
                 RETURN(-EINVAL);
-        }
-        lustre_cfg_bufs_reset(&bufs, LUSTRE_OSC_NAME);
+       }
+
+        /* attach osc */
+        lustre_cfg_bufs_reset(&bufs, osc_dev_name);
+        lustre_cfg_bufs_set_string(&bufs, 1, LUSTRE_OSC_NAME);
         lustre_cfg_bufs_set_string(&bufs, 2, osc_uuid_str.uuid);
         lcfg = lustre_cfg_new(LCFG_ATTACH, &bufs);
         err = class_process_config(lcfg);
         lustre_cfg_free(lcfg);
         if (err < 0) {
-                CERROR("failed attach osc\n");
+               CERROR("failed attach osc\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        /* setup osc */
+       /* setup osc */
         lustre_cfg_bufs_reset(&bufs, osc_dev_name);
         lustre_cfg_bufs_set_string(&bufs, 1, echo_server_ostname);
         lustre_cfg_bufs_set_string(&bufs, 2, peer);
@@ -148,11 +125,11 @@ static int connect_echo_client(void)
         err = class_process_config(lcfg);
         lustre_cfg_free(lcfg);
         if (err < 0) {
-                CERROR("failed setup osc\n");
+               CERROR("failed setup osc\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        /* attach echo_client */
+       /* attach echo_client */
         lustre_cfg_bufs_reset(&bufs, echo_dev_name);
         lustre_cfg_bufs_set_string(&bufs, 1, "echo_client");
         lustre_cfg_bufs_set_string(&bufs, 2, echo_uuid_str.uuid);
@@ -160,11 +137,11 @@ static int connect_echo_client(void)
         err = class_process_config(lcfg);
         lustre_cfg_free(lcfg);
         if (err < 0) {
-                CERROR("failed attach echo_client\n");
+               CERROR("failed attach echo_client\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        /* setup echo_client */
+       /* setup echo_client */
         lustre_cfg_bufs_reset(&bufs, echo_dev_name);
         lustre_cfg_bufs_set_string(&bufs, 1, osc_dev_name);
         lustre_cfg_bufs_set_string(&bufs, 2, NULL);
@@ -172,65 +149,68 @@ static int connect_echo_client(void)
         err = class_process_config(lcfg);
         lustre_cfg_free(lcfg);
         if (err < 0) {
-                CERROR("failed setup echo_client\n");
+               CERROR("failed setup echo_client\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        RETURN(0);
+       RETURN(0);
 }
 
 static int disconnect_echo_client(void)
 {
-       struct lustre_cfg lcfg;
+       struct lustre_cfg_bufs bufs;
+        struct lustre_cfg *lcfg = NULL;
        int err;
        ENTRY;
 
-        /* cleanup echo_client */
+       /* cleanup echo_client */
         lustre_cfg_bufs_reset(&bufs, echo_dev_name);
         lcfg = lustre_cfg_new(LCFG_CLEANUP, &bufs);
         err = class_process_config(lcfg);
         if (err < 0) {
                 lustre_cfg_free(lcfg);
-                CERROR("failed cleanup echo_client\n");
+               CERROR("failed cleanup echo_client\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        /* detach echo_client */
+       /* detach echo_client */
         lcfg->lcfg_command = LCFG_DETACH;
         err = class_process_config(lcfg);
         lustre_cfg_free(lcfg);
         if (err < 0) {
-                CERROR("failed detach echo_client\n");
+               CERROR("failed detach echo_client\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        /* cleanup osc */
+       /* cleanup osc */
         lustre_cfg_bufs_reset(&bufs, osc_dev_name);
         lcfg = lustre_cfg_new(LCFG_CLEANUP, &bufs);
         err = class_process_config(lcfg);
         if (err < 0) {
                 lustre_cfg_free(lcfg);
-                CERROR("failed cleanup osc device\n");
+               CERROR("failed cleanup osc device\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        /* detach osc */
+       /* detach osc */
         lcfg->lcfg_command = LCFG_DETACH;
         err = class_process_config(lcfg);
         lustre_cfg_free(lcfg);
         if (err < 0) {
-                CERROR("failed detach osc device\n");
+               CERROR("failed detach osc device\n");
                 RETURN(-EINVAL);
-        }
+       }
 
-        RETURN(0);
+       RETURN(0);
 }
 
 static void usage(const char *s)
 {
-       printf("Usage: %s -s ost_host_name [-n ost_name]\n", s);
+       printf("Usage: %s -s ost_host_name [-n ost_name] [-x lctl_options ...]\n", s);
        printf("    ost_host_name: the host name of echo server\n");
        printf("    ost_name: ost name, default is \"obd1\"\n");
+        printf("    lctl_options: options to pass to lctl.\n");
+        printf("            (e.g. -x --device 1 test_getattr 10000 -5)\n");
 }
 
 extern int time_ptlwait1;
@@ -240,8 +220,13 @@ extern int time_ptlselect;
 int main(int argc, char **argv) 
 {
        int c, rc;
+       int xindex  = -1;  /* index of -x option */
 
-       while ((c = getopt(argc, argv, "s:n:")) != -1) {
+        /* loop until all options are consumed or we hit
+         * a -x option 
+         */
+       while ((c = getopt(argc, argv, "s:n:x:")) != -1 && 
+               xindex == -1) {
                switch (c) {
                case 's':
                        echo_server_nid = optarg;
@@ -249,13 +234,20 @@ int main(int argc, char **argv)
                case 'n':
                        echo_server_ostname = optarg;
                        break;
+               case 'x':
+                       xindex = optind-1;
+                       break;
                default:
                        usage(argv[0]);
                        return 1;
                }
        }
 
-        if (optind != argc)
+        /*
+         * Only warn with usage() if the -x option isn't specificed
+         * because when using -x this check is not valid.
+         */
+        if (optind != argc && xindex == -1)
                 usage(argv[0]);
 
        if (!echo_server_nid) {
@@ -263,15 +255,15 @@ int main(int argc, char **argv)
                return 1;
        }
 
-       portal_debug = 0;
-       portal_subsystem_debug = 0;
+        libcfs_debug = 0;
+        libcfs_subsystem_debug = 0;
 
         liblustre_init_random();
-        liblustre_set_nal_nid();
 
-        if (liblustre_init_current(argv[0]) ||
+       if (liblustre_init_current(argv[0]) ||
            init_obdclass() || init_lib_portals() ||
            ptlrpc_init() ||
+           lmv_init() ||
            mdc_init() ||
            lov_init() ||
            osc_init() ||
@@ -286,7 +278,21 @@ int main(int argc, char **argv)
 
        set_ioc_handler(liblustre_ioctl);
 
-       rc = lctl_main(1, &argv[0]);
+
+        /*
+         * If the -x option is not specified pass no args to lctl
+         * otherwise pass all the options after the "-x" to lctl
+         *
+         * HACK: in the case when the -x option is specified
+         * lctl sees argv[0] == "-x" and not the real argv[0] seen
+         * in this function.  If that is a problem, a mapping will
+         * have to be done to fix that.  However for normal functioning
+         * it seems to be irrelavant
+         */
+       if( xindex == -1 )
+               rc = lctl_main(1, &argv[0]);
+       else
+               rc = lctl_main(argc-xindex+1, &argv[xindex-1]);
 
        rc |= disconnect_echo_client();