int process_arguments (int argc, char **argv) { int c; int option = 0; static struct option longopts[] = { MP_LONGOPTS_DEFAULT, {"tcp", required_argument, NULL, (int)'T'}, {"udp", required_argument, NULL, (int)'U'}, {"raw", required_argument, NULL, (int)'R'}, MP_LONGOPTS_WC, MP_LONGOPTS_END, }; /* Set default */ mp_threshold_set_warning_time(&socket_thresholds, "1000"); mp_threshold_set_critical_time(&socket_thresholds, "1024"); while (1) { c = mp_getopt(&argc, &argv, MP_OPTSTR_DEFAULT"T:U:R:c:w:46", longopts, &option); if (c == -1 || c == EOF) break; getopt_46(c, &ipv); getopt_wc(c, optarg, &socket_thresholds); switch (c) { case 'T': if (optarg) tcpport = strtol(optarg,NULL,10); else tcpport = 0; break; case 'U': if (optarg) udpport = strtol(optarg,NULL,10); else udpport = 0; break; case 'R': if (optarg) rawport = strtol(optarg,NULL,10); else rawport = 0; break; } } /* Check requirements */ if (tcpport < 0 && udpport < 0 && rawport < 0) usage("--tcp, --udp or --raw mandatory."); return(OK); }
int process_arguments (int argc, char **argv) { int c; int option = 0; static struct option longopts[] = { MP_LONGOPTS_DEFAULT, MP_LONGOPTS_HOST, {"packets", required_argument, 0, 'p'}, {"quick", no_argument, 0, 'q'}, {"interval", required_argument, 0, 'i'}, {"interface", required_argument, 0, 'I'}, {"ttl", required_argument, 0, 'T'}, MP_LONGOPTS_WC, MP_LONGOPTS_END }; if (argc < 2) { print_help(); exit(STATE_OK); } /* Set default */ setWarn(&rta_thresholds, "~:90", NOEXT); setWarn(&lost_thresholds, "80", NOEXT); setCrit(&rta_thresholds, "~:100", NOEXT); setCrit(&lost_thresholds, "90", NOEXT); while (1) { c = mp_getopt(&argc, &argv, MP_OPTSTR_DEFAULT"H:46p:qi:I:T:w:c:", longopts, &option); if (c == -1 || c == EOF) break; getopt_46(c, &ipv); switch (c) { /* Hostname opt */ case 'H': getopt_host(optarg, &hostname); break; /* Packets opt */ case 'p': if (!is_integer(optarg)) usage("Illegal packets value '%s'.", optarg); packets = (int)strtol(optarg, NULL, 10); break; /* Quick opt */ case 'q': quick = 1; break; /* Interface opt */ case 'I': interface = optarg; break; /* Interval opt */ case 'i': { double val; val = strtod(optarg, NULL); if (val <= 0) usage("Illegal interval value '%s'.", optarg); interval.tv_sec = (int)val; interval.tv_nsec = ((int)(val*1000000000))%1000000000; } break; /* TTL opt */ case 'T': if (!is_integer(optarg)) usage("Illegal ttl value '%s'.", optarg); ttl = (int)strtol(optarg, NULL, 10); if (ttl < 1 || ttl > 255) usage("Illegal ttl value '%s'.", optarg); break; /* Warn/Crit opt */ case 'w': case 'c': { char *rta, *pl; pl = optarg; rta = strsep(&pl, ","); if (rta == NULL || pl == NULL) { usage("Waring/Critical threshold is <rta>,<pl>%%."); } if (c == 'w') { if (setWarn(&rta_thresholds, rta, NOEXT) == ERROR) usage("Illegal -w tra threshold '%s'.", rta); if (setWarn(&lost_thresholds, pl, NOEXT) == ERROR) usage("Illegal -w pl threshold '%s'.", pl); } else { if (setCrit(&rta_thresholds, rta, NOEXT) == ERROR) usage("Illegal -c tra threshold '%s'.", rta); if (setCrit(&lost_thresholds, pl, NOEXT) == ERROR) usage("Illegal -c pl threshold '%s'.", pl); } } break; } } /* Check requirements */ if (!hostname) usage("Hostname is mandatory."); return(OK); }