| /* |
| * m_estimator.c Parse/print estimator module options. |
| * |
| * This program is free software; you can u32istribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation; either version |
| * 2 of the License, or (at your option) any later version. |
| * |
| * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> |
| * |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| #include <syslog.h> |
| #include <fcntl.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| #include <string.h> |
| |
| #include "utils.h" |
| #include "tc_util.h" |
| |
| static void est_help(void) __attribute__((noreturn)); |
| |
| static void est_help(void) |
| { |
| fprintf(stderr, "Usage: ... estimator INTERVAL TIME-CONST\n"); |
| fprintf(stderr, " INTERVAL is interval between measurements\n"); |
| fprintf(stderr, " TIME-CONST is averaging time constant\n"); |
| fprintf(stderr, "Example: ... est 1sec 8sec\n"); |
| exit(-1); |
| } |
| |
| int parse_estimator(int *p_argc, char ***p_argv, struct tc_estimator *est) |
| { |
| int argc = *p_argc; |
| char **argv = *p_argv; |
| unsigned A, time_const; |
| |
| NEXT_ARG(); |
| if (est->ewma_log) |
| duparg("estimator", *argv); |
| if (matches(*argv, "help") == 0) |
| est_help(); |
| if (get_usecs(&A, *argv)) |
| invarg("estimator", "invalid estimator interval"); |
| NEXT_ARG(); |
| if (matches(*argv, "help") == 0) |
| est_help(); |
| if (get_usecs(&time_const, *argv)) |
| invarg("estimator", "invalid estimator time constant"); |
| if (tc_setup_estimator(A, time_const, est) < 0) { |
| fprintf(stderr, "Error: estimator parameters are out of range.\n"); |
| exit(-1); |
| } |
| if (show_raw) |
| fprintf(stderr, "[estimator i=%u e=%u]\n", est->interval, est->ewma_log); |
| *p_argc = argc; |
| *p_argv = argv; |
| return 0; |
| } |