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