nbd-tester-client: analyse bad data using hash function huersistic
[nbd.git] / nbd-tester-client.c
index ed9214e..134652c 100644 (file)
@@ -1087,7 +1087,12 @@ int integrity_test(gchar* hostname, int port, char* name, int sock,
                                        if (checkbuf(dbuf, blkhash[blknum], blknum))
                                        {
                                                retval=-1;
-                                               snprintf(errstr, errstr_len, "Bad reply data: seq %08x", blkhash[blknum]);
+                                               snprintf(errstr, errstr_len, "Bad reply data: I wanted blk %08x, seq %08x but I got (at a guess) blk %08x, seq %08x",
+                                                        (unsigned int) blknum,
+                                                        blkhash[blknum],
+                                                        ((uint32_t *)(dbuf))[0],
+                                                        ((uint32_t *)(dbuf))[1]
+                                                        );
                                                goto err_open;
                                                
                                        }
@@ -1183,10 +1188,13 @@ int main(int argc, char**argv) {
        int testflags=0;
        testfunc test = throughput_test;
 
+       /* Ignore SIGPIPE as we want to pick up the error from write() */
+       signal (SIGPIPE, SIG_IGN);
+
        if(argc<3) {
                g_message("%d: Not enough arguments", (int)getpid());
                g_message("%d: Usage: %s <hostname> <port>", (int)getpid(), argv[0]);
-               g_message("%d: Or: %s <hostname> -N <exportname>", (int)getpid(), argv[0]);
+               g_message("%d: Or: %s <hostname> -N <exportname> [<port>]", (int)getpid(), argv[0]);
                exit(EXIT_FAILURE);
        }
        logging();
@@ -1199,7 +1207,6 @@ int main(int argc, char**argv) {
                                                nonopt++;
                                                break;
                                        case 1:
-                                               if(want_port)
                                                p=(strtol(argv[2], NULL, 0));
                                                if(p==LONG_MIN||p==LONG_MAX) {
                                                        g_critical("Could not parse port number: %s", strerror(errno));
@@ -1210,7 +1217,9 @@ int main(int argc, char**argv) {
                                break;
                        case 'N':
                                name=g_strdup(optarg);
-                               p = 10809;
+                               if(!p) {
+                                       p = 10809;
+                               }
                                want_port = false;
                                break;
                        case 't':