1 /* 2 * m_estimator.c Parse/print estimator module options. 3 * 4 * This program is free software; you can u32istribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 * 9 * Authors: Alexey Kuznetsov, <kuznet (at) ms2.inr.ac.ru> 10 * 11 */ 12 13 #include <stdio.h> 14 #include <stdlib.h> 15 #include <unistd.h> 16 #include <syslog.h> 17 #include <fcntl.h> 18 #include <sys/socket.h> 19 #include <netinet/in.h> 20 #include <arpa/inet.h> 21 #include <string.h> 22 23 #include "utils.h" 24 #include "tc_util.h" 25 #include "tc_common.h" 26 27 static void est_help(void); 28 29 static void est_help(void) 30 { 31 fprintf(stderr, "Usage: ... estimator INTERVAL TIME-CONST\n"); 32 fprintf(stderr, " INTERVAL is interval between measurements\n"); 33 fprintf(stderr, " TIME-CONST is averaging time constant\n"); 34 fprintf(stderr, "Example: ... est 1sec 8sec\n"); 35 } 36 37 int parse_estimator(int *p_argc, char ***p_argv, struct tc_estimator *est) 38 { 39 int argc = *p_argc; 40 char **argv = *p_argv; 41 unsigned A, time_const; 42 43 NEXT_ARG(); 44 if (est->ewma_log) 45 duparg("estimator", *argv); 46 if (matches(*argv, "help") == 0) 47 est_help(); 48 if (get_time(&A, *argv)) 49 invarg("estimator", "invalid estimator interval"); 50 NEXT_ARG(); 51 if (matches(*argv, "help") == 0) 52 est_help(); 53 if (get_time(&time_const, *argv)) 54 invarg("estimator", "invalid estimator time constant"); 55 if (tc_setup_estimator(A, time_const, est) < 0) { 56 fprintf(stderr, "Error: estimator parameters are out of range.\n"); 57 return -1; 58 } 59 if (show_raw) 60 fprintf(stderr, "[estimator i=%u e=%u]\n", est->interval, est->ewma_log); 61 *p_argc = argc; 62 *p_argv = argv; 63 return 0; 64 } 65