- int blocksize=1024;
- char *hostname;
- int swap=0;
-
- logging();
-
- if (argc < 3) {
- errmsg:
- fprintf(stderr, "nbd-client version %s\n", PACKAGE_VERSION);
- fprintf(stderr, "Usage: nbd-client [bs=blocksize] host port nbd_device [-swap]\n");
- fprintf(stderr, "Or : nbd-client -d nbd_device\n");
- fprintf(stderr, "Default value for blocksize is 1024 (recommended for ethernet)\n");
- fprintf(stderr, "Allowed values for blocksize are 512,1024,2048,4096\n"); /* will be checked in kernel :) */
- fprintf(stderr, "Note, that kernel 2.4.2 and older ones do not work correctly with\n");
- fprintf(stderr, "blocksizes other than 1024 without patches\n");
- return 1;
- }
-
- ++argv; --argc; /* skip programname */
-
- if (strcmp(argv[0], "-d")==0) {
- nbd = open(argv[1], O_RDWR);
- if (nbd < 0)
- err("Can not open NBD: %m");
- printf("Disconnecting: que, ");
- if (ioctl(nbd, NBD_CLEAR_QUE)< 0)
- err("Ioctl failed: %m\n");
- printf("disconnect, ");
-#ifdef NBD_DISCONNECT
- if (ioctl(nbd, NBD_DISCONNECT)<0)
- err("Ioctl failed: %m\n");
- printf("sock, ");
-#else
- fprintf(stderr, "Can't disconnect: I was not compiled with disconnect support!\n" );
- exit(1);
-#endif
- if (ioctl(nbd, NBD_CLEAR_SOCK)<0)
- err("Ioctl failed: %m\n");
- printf("done\n");
- return 0;
- }
-
- if (strncmp(argv[0], "bs=", 3)==0) {
- blocksize=atoi(argv[0]+3);
- ++argv; --argc; /* skip blocksize */
- }
-
- if (argc==0) goto errmsg;
- hostname=argv[0];
- ++argv; --argc; /* skip hostname */
-
- if (argc==0) goto errmsg;
- port = atoi(argv[0]);
- ++argv; --argc; /* skip port */
-
- if (argc==0) goto errmsg;
- sock = opennet(hostname, port);
- nbd = open(argv[0], O_RDWR);
- if (nbd < 0)
- err("Can not open NBD: %m");
- ++argv; --argc; /* skip device */
-
- if (argc>1) goto errmsg;
- if (argc!=0) swap=1;
- argv=NULL; argc=0; /* don't use it later suddenly */