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);
}
Example #2
0
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);
}