Requirements

Step-by-Step

The architecture of this project must be as modularized as possible. Gathering metrics from several data sources, both on an active or passive perspective regarding the estimation of network performance procedures, yanp-it should be made iteratively throughout the time always showing a short-term MVP from iteration to iteration.

Step 1: Implementing client-side IPerf-like basic procedures

With the help of the official IPerf development library (the libiperf library), first a basic-demo of a simple IPerf client should be mounted in the scope of this C++ project. Within a proper active-perspective package, this work should be apart the main executable of this project. Trying to substitute the role of an official IPerf client, this first implementation should be able to conduct both UDP and TCP traffic and gather results from a time range experiment.

Untitled

To do this libiperf has a set of functions properly designed to perform such a task:

Initialization / termination:
   struct iperf_test *iperf_new_test();
   int iperf_defaults(struct iperf_test *t);
   void iperf_free_test(struct iperf_test *t);
Setting test parameters:
   void iperf_set_test_role( struct iperf_test *pt, char role );
   void iperf_set_test_bind_address( struct iperf_test *t, char *bind_address );
   void iperf_set_test_server_hostname( struct iperf_test *t, char *server_host );
   void iperf_set_test_server_port( struct iperf_test *t, int server_port );
   void iperf_set_test_duration( struct iperf_test *t, int duration );
   void iperf_set_test_blksize( struct iperf_test *t, int blksize );
   void iperf_set_test_num_streams( struct iperf_test *t, int num_streams );
   void iperf_set_test_json_output( struct iperf_test *t, int json_output );
   int iperf_has_zerocopy( void );
   void iperf_set_test_zerocopy( struct iperf_test* t, int zerocopy );
   void iperf_set_test_tos( struct iperf_test* t, int tos );
Authentication functions:
   void iperf_set_test_client_username(struct iperf_test *ipt, char *client_username)
   void iperf_set_test_client_password(struct iperf_test *ipt, char *client_password)
   void iperf_set_test_client_rsa_pubkey(struct iperf_test *ipt, char *client_rsa_pubkey_base64)
Running a test:
   int iperf_run_client(struct iperf_test *);
   int iperf_run_server(struct iperf_test *);
   void iperf_reset_test(struct iperf_test *);
Output:
   FILE *iperf_get_test_outfile(struct iperf_test *);
   char* iperf_get_test_json_output_string(struct iperf_test *);
Error reporting:
   void iperf_err(struct iperf_test *t, const char *format, ...);
   char *iperf_strerror(int);
   extern int i_errno;

Confronting the contents of ifperf_conf.h there is more to it than the methods described above.

Unit tests must also be done to verify that this task is complete, and more are to be prepared for future tasks.

Combinations between UDP/TCP and uni/bidirectional must be considered, as well as the capability of placing reversed connections.

Step 2: Implementing server-side IPerf-like basic procedures

Not so far from the task before, now it is the time to implement the server side of an IPerf connection. In a first moment, a test with an implementation of a simple server version of the latter work should be tested out in a connection with an IPerf client.

Untitled