示例#1
0
static int do_cmd(int argc, char **argv)
{
	if (matches(*argv, "qdisc") == 0)
		return do_qdisc(argc-1, argv+1);

	if (matches(*argv, "class") == 0)
		return do_class(argc-1, argv+1);

	if (matches(*argv, "filter") == 0)
		return do_filter(argc-1, argv+1);

	if (matches(*argv, "actions") == 0)
		return do_action(argc-1, argv+1);

	if (matches(*argv, "monitor") == 0)
		return do_tcmonitor(argc-1, argv+1);

	if (matches(*argv, "help") == 0) {
		usage();
		return 0;
	}

	fprintf(stderr, "Object \"%s\" is unknown, try \"tc help\".\n",
		*argv);
	return -1;
}
示例#2
0
static void do_service(config_t *cpe, config_t *config, struct rs_config *rs_config)
{
	struct rs_start *rs_start = &rs_config->rs_start;
	config_t *cp;

	/* At this point we expect one sublist that contains the varios
	 * resource allocations
	 */
	if (!(cpe->flags & CFG_SUBLIST))
	{
		fatal("do_service: expected list at %s:%d",
			cpe->file, cpe->line);
	}
	if (cpe->next != NULL)
	{
		cpe= cpe->next;
		fatal("do_service: expected end of list at %s:%d",
			cpe->file, cpe->line);
	}
	cpe= cpe->list;

	/* Process the list */
	for (cp= cpe; cp; cp= cp->next)
	{
		if (!(cp->flags & CFG_SUBLIST))
		{
			fatal("do_service: expected list at %s:%d",
				cp->file, cp->line);
		}
		cpe= cp->list;
		if ((cpe->flags & CFG_STRING) || (cpe->flags & CFG_SUBLIST))
		{
			fatal("do_service: expected word at %s:%d",
				cpe->file, cpe->line);
		}

		if (strcmp(cpe->word, KW_CLASS) == 0)
		{
			do_class(cpe->next, config, rs_config);
			continue;
		}
		if (strcmp(cpe->word, KW_UID) == 0)
		{
			do_uid(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_SIGMGR) == 0)
		{
			do_sigmgr(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_TYPE) == 0)
		{
			do_type(cpe->next, rs_config);
			continue;
		}
		if (strcmp(cpe->word, KW_DESCR) == 0)
		{
			do_descr(cpe->next, rs_config);
			continue;
		}
		if (strcmp(cpe->word, KW_SCHEDULER) == 0)
		{
			do_scheduler(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_PRIORITY) == 0)
		{
			do_priority(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_QUANTUM) == 0)
		{
			do_quantum(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_CPU) == 0)
		{
			do_cpu(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_IRQ) == 0)
		{
			do_irq(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_IO) == 0)
		{
			do_io(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_PCI) == 0)
		{
			do_pci(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_SYSTEM) == 0)
		{
			do_system(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_IPC) == 0)
		{
			do_ipc(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_VM) == 0)
		{
			do_vm(cpe->next, rs_start);
			continue;
		}
		if (strcmp(cpe->word, KW_CONTROL) == 0)
		{
			do_control(cpe->next, rs_start);
			continue;
		}
	}
}
示例#3
0
int main(int argc, char **argv)
{
	char *basename;

	basename = strrchr(argv[0], '/');
	if (basename == NULL)
		basename = argv[0];
	else
		basename++;
	

	/* batch mode */
	if (argc > 1 && matches(argv[1], "-batch") == 0) {
		FILE *batch;
		char line[400];
		char *largv[100];
		int largc, ret=0;
#define	BMAXARG	(sizeof(largv)/sizeof(char *)-2)

		if (argc != 3) {
			fprintf(stderr, "Wrong number of arguments in batch mode\n");
			exit(-1);
		}
		if (matches(argv[2], "-") != 0) {
			if ((batch = fopen(argv[2], "r")) == NULL) {
				fprintf(stderr, "Cannot open file \"%s\" for reading: %s=n", argv[2], strerror(errno));
				exit(-1);
			}
		} else {
			if ((batch = fdopen(0, "r")) == NULL) {
				fprintf(stderr, "Cannot open stdin for reading: %s=n", strerror(errno));
				exit(-1);
			}
		}

		tc_core_init();

		while (fgets(line, sizeof(line)-1, batch)) {
			if (line[strlen(line)-1]=='\n') {
				line[strlen(line)-1] = '\0';
			} else {
				fprintf(stderr, "No newline at the end of line, looks like to long (%d chars or more)\n", strlen(line));
				exit(-1);
			}
			largc = 0;
			largv[largc]=strtok(line, " ");
			while ((largv[++largc]=strtok(NULL, " ")) != NULL) {
				if (largc > BMAXARG) {
					fprintf(stderr, "Over %d arguments in batch mode, enough!\n", BMAXARG);
					exit(-1);
				}
			}

			if (matches(largv[0], "qdisc") == 0) {
				ret += do_qdisc(largc-1, largv+1);
			} else if (matches(largv[0], "class") == 0) {
				ret += do_class(largc-1, largv+1);
			} else if (matches(largv[0], "filter") == 0) {
				ret += do_filter(largc-1, largv+1);
			} else if (matches(largv[0], "help") == 0) {
				usage();	/* note that usage() doesn't return */
			} else {
				fprintf(stderr, "Object \"%s\" is unknown, try \"tc help\".\n", largv[1]);
				exit(-1);
			}
		}
		fclose(batch);
		exit(0); /* end of batch, that's all */
	}

	while (argc > 1) {
		if (argv[1][0] != '-')
			break;
		if (matches(argv[1], "-stats") == 0 ||
			 matches(argv[1], "-statistics") == 0) {
			++show_stats;
		} else if (matches(argv[1], "-details") == 0) {
			++show_details;
		} else if (matches(argv[1], "-raw") == 0) {
			++show_raw;
		} else if (matches(argv[1], "-Version") == 0) {
			printf("tc utility, iproute2-ss%s\n", SNAPSHOT);
			exit(0);
		} else if (matches(argv[1], "-iec") == 0) {
			++use_iec;
		} else if (matches(argv[1], "-help") == 0) {
			usage();
		} else {
			fprintf(stderr, "Option \"%s\" is unknown, try \"tc -help\".\n", argv[1]);
			exit(-1);
		}
		argc--;	argv++;
	}

	tc_core_init();

	if (argc > 1) {
		if (matches(argv[1], "qdisc") == 0)
			return do_qdisc(argc-2, argv+2);
		if (matches(argv[1], "class") == 0)
			return do_class(argc-2, argv+2);
		if (matches(argv[1], "filter") == 0)
			return do_filter(argc-2, argv+2);
		if (matches(argv[1], "help") == 0)
			usage();
		fprintf(stderr, "Object \"%s\" is unknown, try \"tc help\".\n", argv[1]);
		exit(-1);
	}

	usage();
}