#ifndef __GLOBAL_TRACKING_H
#define __GLOBAL_TRACKING_H

/* the global variables used to see how long it takes for a given
 * sk_buff to make it through the vmnet software. */
 
extern struct sk_buff * curr_skb;  // the current sk_buff of interest
extern struct timeval begin_time;  // time when it first entered vmnet 

typedef enum { in, out } direction;

extern direction curr_dir;

#ifdef TOTAL_BYTES_TRACE

typedef struct histogram_struct {

  int minValue, maxValue, range;
  char name[100];

  // number of buckets for the histogram
  int numBuckets;
  
  // the increment between buckets
  int bucketSize;
  
  // the storage for the data
  int arr[1000004];

} histogram;

extern histogram bytes_per_packet;
extern histogram bytes_per_message;
extern histogram data_bytes_per_message;
extern histogram data_packets_per_message;
extern histogram control_packets_per_message;
extern histogram total_packets_per_message;

extern size_t total_bytes_sent;
extern size_t control_packets_sent;
extern size_t total_packets_sent;
extern size_t total_data_bytes_sent;

void initHistogram(histogram *h, int numBuckets, int minValue, int maxValue, char *name);
void addHistogram(histogram *h, int bucketVal, int inc);
void printHistogramMergeZero(histogram *h);
void printHistogram(histogram *h);
void printHistogramWeightedPct(histogram *h, float pct);


#endif // TOTAL_BYTES_TRACE

#endif // __GLOBAL_TRACKING_H













