Пример #1
0
void
gvinum_stop(int argc, char **argv)
{
	int err, fileid;

	fileid = kldfind(GVINUMMOD);
	if (fileid == -1) {
		warn("cannot find " GVINUMMOD);
		return;
	}

	/*
	 * This little hack prevents that we end up in an infinite loop in
	 * g_unload_class().  gv_unload() will return EAGAIN so that the GEOM
	 * event thread will be free for the g_wither_geom() call from
	 * gv_unload().  It's silly, but it works.
	 */
	printf("unloading " GVINUMMOD " kernel module... ");
	fflush(stdout);
	if ((err = kldunload(fileid)) != 0 && (errno == EAGAIN)) {
		sleep(1);
		err = kldunload(fileid);
	}
	if (err != 0) {
		printf(" failed!\n");
		warn("cannot unload " GVINUMMOD);
		return;
	}

	printf("done\n");
	exit(0);
}
Пример #2
0
int main( int argc, char** argv ) {
	struct kld_file_stat stat;
	int c, fileid, force, opt;
	char *filename;
	filename = NULL;
	opt = OPT_NULL;
	while ( ( c = getopt( argc, argv, "finv" ) ) != -1 ) {
		switch ( c ) {
			case 'f':
				opt |= OPT_FORCE;
				break;
			case 'i':
				opt |= OPT_ID;
				break;
			case 'n':
				break;
			case 'v':
				opt |= OPT_VERBOSE;
				break;
			default:
				usage();
		}
	}
	argc -= optind;
	argv += optind;
	if ( argc == 0 ) usage();
	while ( ( filename = *argv++ ) != NULL ) {
		if ( opt & OPT_ID ) {
			fileid = atoi( filename );
			if ( fileid < 0 ) errx( EXIT_FAILURE, "Invalid ID %s", optarg );
		} else {
			if ( ( fileid = kldfind( filename ) ) < 0 ) errx( EXIT_FAILURE, "can't find file %s", filename );
		}
		if ( opt & OPT_VERBOSE ) {
			stat.version = sizeof( stat );
			if ( kldstat( fileid, &stat ) < 0 ) err( EXIT_FAILURE, "can't stat file" );
			(void) printf( "Unloading %s, id=%d\n", stat.name, fileid );
		}
		if ( opt & OPT_FORCE ) force = LINKER_UNLOAD_FORCE;
		else force = LINKER_UNLOAD_NORMAL;
		if ( kldunloadf( fileid, force ) < 0 ) err( EXIT_FAILURE, "can't unload file" );
	}
	return ( EXIT_SUCCESS );
}
Пример #3
0
int
main(int argc, char **argv)
{
	int line, tokens;
	char buffer[BUFSIZ], *inputline, *token[GV_MAXARGS];

	/* Load the module if necessary. */
	if (kldfind(GVINUMMOD) < 0 && kldload(GVINUMMOD) < 0)
		err(1, GVINUMMOD ": Kernel module not available");

	/* Arguments given on the command line. */
	if (argc > 1) {
		argc--;
		argv++;
		parseline(argc, argv);

	/* Interactive mode. */
	} else {
		for (;;) {
			inputline = readline("gvinum -> ");
			if (inputline == NULL) {
				if (ferror(stdin)) {
					err(1, "can't read input");
				} else {
					printf("\n");
					exit(0);
				}
			} else if (*inputline) {
				add_history(inputline);
				strcpy(buffer, inputline);
				free(inputline);
				line++;		    /* count the lines */
				tokens = gv_tokenize(buffer, token, GV_MAXARGS);
				if (tokens)
					parseline(tokens, token);
			}
		}
	}
	exit(0);
}
Пример #4
0
int
main(int argc, char** argv)
{
    int c;
    int verbose = 0;
    int fileid = 0;
    int quiet = 0;
    char* filename = NULL;
    char* modname = NULL;
    char* p;

    while ((c = getopt(argc, argv, "i:m:n:qv")) != -1)
	switch (c) {
	case 'i':
	    fileid = (int)strtoul(optarg, &p, 10);
	    if (*p != '\0')
		usage();
	    break;
	case 'm':
	    modname = optarg;
	    break;
	case 'n':
	    filename = optarg;
	    break;
	case 'q':
	    quiet = 1;
	    break;
	case 'v':
	    verbose = 1;
	    break;
	default:
	    usage();
	}
    argc -= optind;
    argv += optind;

    if (argc != 0)
	usage();

    if (modname != NULL) {
	int modid;
	struct module_stat stat;

	if ((modid = modfind(modname)) < 0) {
	    if (!quiet)
		warn("can't find module %s", modname);
	    return 1;
	} else if (quiet) {
	    return 0;
	}

	stat.version = sizeof(struct module_stat);
	if (modstat(modid, &stat) < 0)
	    warn("can't stat module id %d", modid);
	else {
	    printf("Id  Refs Name\n");
	    printf("%3d %4d %s\n", stat.id, stat.refs, stat.name);
	}

	return 0;
    }

    if (filename != NULL) {
	if ((fileid = kldfind(filename)) < 0)
	    err(1, "can't find file %s", filename);
    }

    printf("Id Refs Address%*c Size     Name\n", POINTER_WIDTH - 7, ' ');
    if (fileid != 0)
	printfile(fileid, verbose);
    else
	for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid))
	    printfile(fileid, verbose);

    return 0;
}
Пример #5
0
int
main(int argc, char** argv)
{
    int c;
    int humanized = 0;
    int verbose = 0;
    int fileid = 0;
    int quiet = 0;
    char* filename = NULL;
    char* modname = NULL;
    char* p;

    while ((c = getopt(argc, argv, "dhi:m:n:qv")) != -1)
	switch (c) {
	case 'd':
	    showdata = 1;
	    break;
	case 'h':
	    humanized = 1;
	    break;
	case 'i':
	    fileid = (int)strtoul(optarg, &p, 10);
	    if (*p != '\0')
		usage();
	    break;
	case 'm':
	    modname = optarg;
	    break;
	case 'n':
	    filename = optarg;
	    break;
	case 'q':
	    quiet = 1;
	    break;
	case 'v':
	    verbose = 1;
	    break;
	default:
	    usage();
	}
    argc -= optind;
    argv += optind;

    if (argc != 0)
	usage();

    if (modname != NULL) {
	int modid;
	struct module_stat stat;

	if ((modid = modfind(modname)) < 0) {
	    if (!quiet)
		warn("can't find module %s", modname);
	    return 1;
	} else if (quiet) {
	    return 0;
	}

	stat.version = sizeof(struct module_stat);
	if (modstat(modid, &stat) < 0)
	    warn("can't stat module id %d", modid);
	else {
		if (showdata) {
		    printf("Id  Refs Name data..(int, uint, ulong)\n");
		    printf("%3d %4d %s (%d, %u, 0x%lx)\n", stat.id, stat.refs, stat.name, 
		        stat.data.intval, stat.data.uintval, stat.data.ulongval);
		} else {
		    printf("Id  Refs Name\n");
		    printf("%3d %4d %s\n", stat.id, stat.refs, stat.name);
		}
	}

	return 0;
    }

    if (filename != NULL) {
	if ((fileid = kldfind(filename)) < 0) {
	    if (!quiet)
		warn("can't find file %s", filename);
	    return 1;
	} else if (quiet) {
	    return 0;
	}
    }

    if (humanized)
	    printf("Id Refs Address%*c %5s Name\n", POINTER_WIDTH - 7, ' ', "Size");
    else
	    printf("Id Refs Address%*c %8s Name\n", POINTER_WIDTH - 7, ' ', "Size");
    if (fileid != 0)
	printfile(fileid, verbose, humanized);
    else
	for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid))
	    printfile(fileid, verbose, humanized);

    return 0;
}