int main(int argc, char **argv) { int ret; int do_batching = 0; char *batchfile = NULL; 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], "-pretty") == 0) { ++show_pretty; } else if (matches(argv[1], "-Version") == 0) { printf("tc utility, iproute2-ss%s\n", SNAPSHOT); return 0; } else if (matches(argv[1], "-iec") == 0) { ++use_iec; } else if (matches(argv[1], "-help") == 0) { usage(); return 0; } else if (matches(argv[1], "-force") == 0) { ++force; } else if (matches(argv[1], "-batch") == 0) { do_batching = 1; if (argc > 2) batchfile = argv[2]; argc--; argv++; } else { fprintf(stderr, "Option \"%s\" is unknown, try \"tc -help\".\n", argv[1]); return -1; } argc--; argv++; } if (do_batching) return batch(batchfile); if (argc <= 1) { usage(); return 0; } tc_core_init(); if (rtnl_open(&rth, 0) < 0) { fprintf(stderr, "Cannot open rtnetlink\n"); exit(1); } ret = do_cmd(argc-1, argv+1); rtnl_close(&rth); return ret; }
static int batch(const char *name) { char *line = NULL; size_t len = 0; int ret = 0; batch_mode = 1; if (name && strcmp(name, "-") != 0) { if (freopen(name, "r", stdin) == NULL) { fprintf(stderr, "Cannot open file \"%s\" for reading: %s\n", name, strerror(errno)); return -1; } } tc_core_init(); if (rtnl_open(&rth, 0) < 0) { fprintf(stderr, "Cannot open rtnetlink\n"); return -1; } cmdlineno = 0; while (getcmdline(&line, &len, stdin) != -1) { char *largv[100]; int largc; largc = makeargs(line, largv, 100); if (largc == 0) continue; /* blank line */ if (do_cmd(largc, largv)) { fprintf(stderr, "Command failed %s:%d\n", name, cmdlineno); ret = 1; if (!force) break; } } if (line) free(line); rtnl_close(&rth); return ret; }
int main(int argc, char **argv) { int ret; char *batch_file = NULL; 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], "-pretty") == 0) { ++show_pretty; } else if (matches(argv[1], "-graph") == 0) { show_graph = 1; } else if (matches(argv[1], "-Version") == 0) { printf("tc utility, iproute2-ss%s\n", SNAPSHOT); return 0; } else if (matches(argv[1], "-iec") == 0) { ++use_iec; } else if (matches(argv[1], "-help") == 0) { usage(); return 0; } else if (matches(argv[1], "-force") == 0) { ++force; } else if (matches(argv[1], "-batch") == 0) { argc--; argv++; if (argc <= 1) usage(); batch_file = argv[1]; } else if (matches(argv[1], "-netns") == 0) { NEXT_ARG(); if (netns_switch(argv[1])) return -1; } else if (matches(argv[1], "-names") == 0 || matches(argv[1], "-nm") == 0) { use_names = true; } else if (matches(argv[1], "-cf") == 0 || matches(argv[1], "-conf") == 0) { NEXT_ARG(); conf_file = argv[1]; } else if (matches(argv[1], "-timestamp") == 0) { timestamp++; } else if (matches(argv[1], "-tshort") == 0) { ++timestamp; ++timestamp_short; } else if (matches(argv[1], "-json") == 0) { ++json; } else { fprintf(stderr, "Option \"%s\" is unknown, try \"tc -help\".\n", argv[1]); return -1; } argc--; argv++; } if (batch_file) return batch(batch_file); if (argc <= 1) { usage(); return 0; } tc_core_init(); if (rtnl_open(&rth, 0) < 0) { fprintf(stderr, "Cannot open rtnetlink\n"); exit(1); } if (use_names && cls_names_init(conf_file)) { ret = -1; goto Exit; } ret = do_cmd(argc-1, argv+1); Exit: rtnl_close(&rth); if (use_names) cls_names_uninit(); return ret; }
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(); }