Changeset dbd745c


Ignore:
Timestamp:
11/16/18 15:42:56 (2 years ago)
Author:
Jacob Van Walraven <jcv9@…>
Branches:
develop
Children:
d9a4dc2
Parents:
36fb135
Message:

Convert command arguments to use getargs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/tutorial/ipdist-parallel.c

    r36fb135 rdbd745c  
    88#include <time.h>
    99#include <math.h>
     10#include <getopt.h>
    1011
    1112/* Structure to hold the counters each thread has its own one of these */
     
    6970};
    7071
    71 /* interval between outputs in seconds */
    7272uint64_t tickrate;
    73 
    74 char *stats_outputdir = "/home/jcv9/output-spectre/";
    75 /* Calculate and plot the percentage change from the previous plot */
    76 int stats_percentage_change = 0;
     73char *stats_outputdir = "";
    7774
    7875/*************************************************************************
     
    121118static void compute_stats(struct addr_local *tally) {
    122119        int i, j, k;
    123 
    124         /* Calculates the percentage change from the last output. NEED TO MAKE THIS WEIGHTED */
    125         if(stats_percentage_change) {
    126                 for(i=0;i<256;i++) {
    127                         for(j=0;j<4;j++) {
    128                                 tally->stats->src[j][i] = 0;
    129                                 tally->stats->dst[j][i] = 0;
    130                                 if(tally->src[j][i] != 0) {
    131                                         tally->stats->src[j][i] = (((float)tally->src[j][i] - (float)tally->src_lastoutput[j][i]) / (float)tally->src[j][i]) * 100;
    132                                 }
    133                                 if(tally->dst[j][i] != 0) {
    134                                         tally->stats->dst[j][i] = (((float)tally->dst[j][i] - (float)tally->dst_lastoutput[j][i]) / (float)tally->dst[j][i]) * 100;
    135                                 }
    136                         }
    137                 }
    138         }
    139120
    140121        /* To get ranking we push everything into the priority queue at pop things off 1 by one which returns them in high to lowest priority */
     
    538519                }
    539520        }
    540 
    541 
    542         /* Get the version of gnuplot */
    543         //char delim[] = " ";
    544         //char gnuplot_result[256];
    545         //double gnuplot_version = 0;
    546         //FILE *gnuplot = popen("gnuplot --version", "r");
    547         //fgets(gnuplot_result, sizeof(gnuplot_result)-1, gnuplot);
    548         //strtok(gnuplot_result, delim);
    549         //gnuplot_version = atof(strtok(NULL, delim));
    550         //pclose(gnuplot);
    551521
    552522        /* Plot the results */
     
    795765}
    796766
     767static void usage(char *argv0) {
     768        fprintf(stderr, "Usage:\n"
     769        "%s inputURI output-interval\n"
     770        "-i [inputURI] --set-uri [inputURI]\n"
     771        "-o [output-interval] --output-interval [output-interval]\n"
     772        "       Output statistical information every x seconds\n"
     773        "-t [threads] --threads [threads]\n"
     774        "-e [excluded-network] --exclude-network [excluded-network]\n"
     775        "       Network to exclude from results\n"
     776        "       e.g. -e 192.168.0.0/16 -e 10.0.0.0/8\n"
     777        "-d [output-directory] --output-dir [output-directory]\n"
     778        , argv0);
     779        exit(1);
     780}
     781
    797782int main(int argc, char *argv[]) {
     783
     784        char *inputURI = NULL;
     785        int threads = 4;
     786        tickrate = 300;
     787        struct exclude_networks *exclude = malloc(sizeof(struct exclude_networks));
     788        exclude->count = 0;
     789
     790        while(1) {
     791                int option_index;
     792                struct option long_options[] = {
     793                        { "set-uri",            1, 0, 'i' },
     794                        { "output-interval",    1, 0, 'o' },
     795                        { "threads",            1, 0, 't' },
     796                        { "exclude-network",    1, 0, 'e' },
     797                        { "output-dir",         1, 0, 'd' },
     798                        { NULL,                 0, 0,  0  }
     799                };
     800
     801                int c = getopt_long(argc, argv, "i:o:t:e:d:", long_options, &option_index);
     802
     803                if(c==-1) {
     804                        break;
     805                }
     806
     807                switch(c) {
     808                        case 'i':
     809                                inputURI = optarg;
     810                                break;
     811                        case 'o':
     812                                tickrate = atoi(optarg);
     813                                break;
     814                        case 't':
     815                                threads = atoi(optarg);
     816                                break;
     817                        case 'e':
     818                                exclude->count += 1;
     819                                if(exclude->count > 1) {
     820                                        exclude->networks = realloc(exclude->networks, sizeof(struct network)*exclude->count);
     821                                } else {
     822                                        exclude->networks = malloc(sizeof(struct network));
     823                                }
     824                                if(get_network(optarg, &exclude->networks[exclude->count-1])) {
     825                                        fprintf(stderr, "Error excluding network %s\n", optarg);
     826                                        return 1;
     827                                }
     828                                break;
     829                        case 'd':
     830                                stats_outputdir = optarg;
     831                                strcat(stats_outputdir, "/");
     832                        case '?':
     833                                break;
     834                        default:
     835                                fprintf(stderr, "Unknown option: %c\n", c);
     836                                usage(argv[0]);
     837                }
     838        }
    798839
    799840        libtrace_t *trace;
     
    801842        libtrace_callback_set_t *processing, *reporter;
    802843
    803 
    804844        /* Ensure the input URI was supplied */
    805         if(argc < 3) {
    806                 fprintf(stderr, "Usage: %s inputURI [outputInterval (Seconds)] [excluded networks]\n", argv[0]);
    807                 fprintf(stderr, "       eg. ./ipdist input.erf 60 210.10.3.0/24 70.5.0.0/16\n");
    808                 return 1;
    809         }
    810         /* Convert tick into an int */
    811         tickrate = atoi(argv[2]);
    812 
     845        if(inputURI == NULL) {
     846                usage(argv[0]);
     847        }
    813848
    814849        /* Create the trace */
    815         trace = trace_create(argv[1]);
     850        trace = trace_create(inputURI);
    816851        /* Ensure no error has occured creating the trace */
    817852        if(trace_is_err(trace)) {
     
    833868
    834869        /* Parallel specific configuration MUST BE PERFORMED AFTER TRACE IS CREATED */
    835         trace_set_perpkt_threads(trace, 4);
     870        trace_set_perpkt_threads(trace, threads);
    836871        /* Order the results by timestamp */
    837872        trace_set_combiner(trace, &combiner_ordered, (libtrace_generic_t){0});
     
    846881        /* Do not buffer the reports */
    847882        trace_set_reporter_thold(trace, 1);
    848 
    849 
    850         /* Setup excluded networks if any were supplied */
    851         struct exclude_networks *exclude = malloc(sizeof(struct exclude_networks));
    852         exclude->networks = malloc(sizeof(struct network)*(argc-3));
    853         if(exclude == NULL || exclude->networks == NULL) {
    854                 fprintf(stderr, "Unable to allocate memory");
    855                 libtrace_cleanup(trace, processing, reporter);
    856                 return 1;
    857         }
    858         exclude->count = 0;
    859         int i;
    860         for(i=0;i<argc-3;i++) {
    861                 /* convert the network string into a network structure */
    862                 if(get_network(argv[i+3], &exclude->networks[i]) != 0) {
    863                         fprintf(stderr, "Error creating excluded network");
    864                         return 1;
    865                 }
    866                 /* increment the count of excluded networks */
    867                 exclude->count += 1;
    868         }
    869 
    870883
    871884        /* Start the trace, if it errors return */
Note: See TracChangeset for help on using the changeset viewer.