Skip to Content.
Sympa Menu

ndt-dev - [ndt-dev] [ndt] r701 committed - Reordering.

Subject: NDT-DEV email list created

List archive

[ndt-dev] [ndt] r701 committed - Reordering.


Chronological Thread 
  • From:
  • To:
  • Subject: [ndt-dev] [ndt] r701 committed - Reordering.
  • Date: Fri, 07 Oct 2011 13:27:44 +0000

Revision: 701
Author:

Date: Fri Oct 7 06:26:39 2011
Log: Reordering.
http://code.google.com/p/ndt/source/detail?r=701

Modified:
/wiki/NDTArchitecture.wiki

=======================================
--- /wiki/NDTArchitecture.wiki Fri Oct 7 03:39:22 2011
+++ /wiki/NDTArchitecture.wiki Fri Oct 7 06:26:39 2011
@@ -24,6 +24,41 @@
Moreover, it can be also obtained by downloading the newest tar package from the download page:

{{{http://code.google.com/p/ndt/downloads}}}
+
+== Life Cycle ==
+
+The NDT client and server interaction details can be found in the [NDTProtocol#Protocol_description NDT Protocol description].
+
+=== Test session with the Java Applet-based client ===
+
+A basic NDT test session with the Java Applet-based client looks as following:
+
+http://www.soldevelo.com/images/ndt/NDT_flow_1.png
+
+ # The process starts with the user opening a browser and entering the NDT server URL:
+ * An optional step is to point to a well known server and accept a redirect message (Federated mode).
+ * Otherwise the URL points to the NDT server itself (either an apache web server or the fakewww process answer the request).
+ # The web server responds by returning the page, with an embedded java applet (class or jar file).
+ # The user must manually request a test be performed by clicking the “start” button.
+ # The applet opens a connection back to the server’s testing engine (web100srv process).
+ # A child process is created to handle the test and the parent goes back to listening for more test requests. The parent keeps a FIFO queue to process multiple requests.
+ # A control channel is created between the server and the client to control the client’s actions and synchronize the start of the various tests. The server and the client negotiate the test suite.
+ # The NDT client and the NDT server performs the negotiated test suite. The client opens new data channels back to the server for testing purposes. Allowing the client to open connections makes it easy to get past client-side firewall boxes.
+ # The server extracts the Web100 data and analyzes the connection for faults.
+ # The results are recorded in the [NDTDataFormat#web100srv.log_file servers’ log file] and the results are returned to the client for display to the user.
+
+=== Test session with the web100clt client ===
+
+A basic NDT test session with the web100clt client looks as following:
+
+http://www.soldevelo.com/images/ndt/NDT_flow_2.png
+
+ # The process starts with connecting to the server's testing engine (web100srv process) by the web100clt client.
+ # A child process is created to handle the test and the parent goes back to listening for more test requests. The parent keeps a FIFO queue to process multiple requests.
+ # A control channel is created between the server and the client to control the client’s actions and synchronize the start of the various tests. The server and the client negotiate the test suite.
+ # The NDT client and the NDT server performs the negotiated test suite. The client opens new data channels back to the server for testing purposes. Allowing the client to open connections makes it easy to get past client-side firewall boxes.
+ # The server extracts the Web100 data and analyzes the connection for faults.
+ # The results are recorded in the [NDTDataFormat#web100srv.log_file servers’ log file] and the results are returned to the client for display to the user.

== Architecture Overview ==

@@ -59,29 +94,6 @@

=== NDT subsystems ===

-The brief information about each of the NDT subsystems can be found in the following table. All source files are located in the *src* directory under the root of the checked out sources from the code repository.
-
-|| *Subsystem* || *Used by* || *Description* || *Functions* || *Sources* ||
-|| logging || web100srv<br/>web100clt || Logging subsystem that is responsible for printing informational messages on to the console. It can filter messages according to the currently set debug level. Moreover, this subsystem is also responsible for dates/timestamps handling. || {{{void }}}*log_init*{{{(char* progname, int debuglvl)}}}<br/>{{{void }}}*set_debuglvl*{{{(int debuglvl)}}}<br/>{{{void }}}*set_logfile*{{{(char* filename)}}}<br/>{{{int }}}*get_debuglvl*{{{()}}}<br/>{{{char* }}}*get_logfile*{{{()}}}<br/>{{{I2ErrHandle }}}*get_errhandle*{{{()}}}<br/>{{{void }}}*log_print*{{{(int lvl, const char* format, ...)}}}<br/>{{{void }}}*log_println*{{{(int lvl, const char* format, ...)}}}<br/>{{{void }}}*log_free*{{{(void)}}}<br/>{{{void }}}*set_timestamp*{{{()}}}<br/>{{{time_t }}}*get_timestamp*{{{()}}}<br/>{{{long int }}}*get_utimestamp*{{{()}}}<br/>{{{char* }}}*get_ISOtime*{{{(char * isoTime)}}}<br/>{{{void }}}*get_YYYY*{{{(char * year)}}}<br/>{{{void }}}*get_MM*{{{(char * month)}}}<br/>{{{void }}}*get_DD*{{{(char * day)}}} | | {{{logging.c logging.h}}} ||
-|| network || web100srv<br/>web100clt || Subsystem that is responsible for all network operations. || {{{I2Addr }}}*!CreateListenSocket*{{{(I2Addr addr, char* serv, int options, int buf_size)}}}<br/>{{{int }}}*!CreateConnectSocket*{{{(int* sockfd, I2Addr local_addr, I2Addr server_addr, int option, int buf_sizes)}}}<br/>{{{int }}}*send_msg*{{{(int ctlSocket, int type, void* msg, int len)}}}<br/>{{{int }}}*recv_msg*{{{(int ctlSocket, int* type, void* msg, int* len)}}}<br/>{{{int }}}*writen*{{{(int fd, void* buf, int amount)}}}<br/>{{{int }}}*readn*{{{(int fd, void* buf, int amount)}}} || {{{network.c network.h}}} ||
-|| protocol || web100srv<br/>web100clt || Functions to support [NDTProtocol NDT Protocol]. || {{{int }}}*check_msg_type*{{{(char* prefix, int expected, int received, char* buff, int len)}}} || {{{protocol.c protocol.h}}} ||
-|| utils || web100srv<br/>web100clt || Functions to handle numbers sanity checks and some other utility things. || {{{int }}}*check_int*{{{(char* text, int* number)}}}<br/>{{{int }}}*check_rint*{{{(char* text, int* number, int minVal, int maxVal)}}}<br/>{{{int }}}*check_long*{{{(char* text, long* number)}}}<br/>{{{double }}}*secs*{{{()}}}<br/>{{{void }}}*err_sys*{{{(char* s)}}}<br/>{{{int }}}*sndq_len*{{{(int fd)}}}<br/>{{{void }}}*mysleep*{{{(double time)}}} || utils.c utils.h ||
-|| Web100 support || web100srv || Functions needed to read the Web100 variables. || {{{void }}}*get_iflist*{{{(void)}}}<br/>{{{int }}}*web100_init*{{{(char *VarFileName)}}}<br/>{{{int }}}*web100_autotune*{{{(int sock, web100_agent* agent, web100_connection* cn)}}}<br/>{{{void }}}*web100_middlebox*{{{(int sock, web100_agent* agent, web100_connection* cn, char *results)}}}<br/>{{{int }}}*web100_setbuff*{{{(int sock, web100_agent* agent, web100_connection* cn, int autotune)}}}<br/>{{{void }}}*web100_get_data_recv*{{{(int sock, web100_agent* agent, web100_connection* cn, int count_vars)}}}<br/>{{{int }}}*web100_get_data*{{{(web100_snapshot* snap, int ctlsock, web100_agent* agent, int count_vars)}}}<br/>{{{int }}}*!CwndDecrease*{{{(web100_agent* agent, char* logname, int *dec_cnt, int *same_cnt, int *inc_cnt)}}}<br/>{{{int }}}*web100_logvars*{{{(int *Timeouts, int *SumRTT, int *CountRTT, int *PktsRetrans, int *FastRetran, int *DataPktsOut, int *AckPktsOut, int *CurrentMSS, int *DupAcksIn, int *AckPktsIn, int *MaxRwinRcvd, int *Sndbuf, int *CurrentCwnd, int *SndLimTimeRwin, int *SndLimTimeCwnd, int *SndLimTimeSender, int *DataBytesOut, int *SndLimTransRwin, int *SndLimTransCwnd, int *SndLimTransSender, int *MaxSsthresh, int *CurrentRTO, int *CurrentRwinRcvd, int *MaxCwnd, int *CongestionSignals, int *PktsOut, int *MinRTT, int count_vars, int *RcvWinScale, int *SndWinScale, int *CongAvoid, int *CongestionOverCount, int *MaxRTT, int *OtherReductions, int *CurTimeoutCount, int *AbruptTimeouts, int *SendStall, int *SlowStart, int *SubsequentTimeouts, int *ThruBytesAcked)}}} || {{{web100-util.c web100srv.h}}} ||
-|| pcap support || web100srv || Functions that use pcap library in the bottleneck detection algorithm. || {{{void }}}*init_vars*{{{(struct spdpair *cur)}}}<br/>{{{void }}}*print_bins*{{{(struct spdpair *cur, int monitor_pipe[2])}}}<br/>{{{void }}}*calculate_spd*{{{(struct spdpair *cur, struct spdpair *cur2, int port2, int port3)}}}<br/>{{{void }}}*init_pkttrace*{{{(I2Addr srcAddr, struct sockaddr *sock_addr, socklen_t saddrlen, int monitor_pipe[2], char *device, PortPair* pair, char * direction, int compress)}}}<br/>{{{int }}}*check_signal_flags*{{{()}}} || {{{web100-pcap.c web100srv.h}}} ||
-|| admin page || web100srv || Functions needed to handle the Admin page, which allows a remote user to view the usage statistics via a web page. || {{{void }}}*view_init*{{{(int refresh)}}}<br/>{{{int }}}*calculate*{{{(char now[32], int SumRTT, int CountRTT, int CongestionSignals, int PktsOut, int DupAcksIn, int AckPktsIn, int CurrentMSS, int SndLimTimeRwin, int SndLimTimeCwnd, int SndLimTimeSender, int MaxRwinRcvd, int CurrentCwnd, int Sndbuf, int DataBytesOut, int mismatch, int bad_cable, int c2sspd, int s2cspd, int c2sdata, int s2cack, int view_flag)}}}<br/>{{{void }}}*gen_html*{{{(int c2sspd, int s2cspd, int MinRTT, int PktsRetrans, int Timeouts, int Sndbuf, int MaxRwinRcvd, int CurrentCwnd, int mismatch, int bad_cable, int totalcnt, int refresh)}}} || {{{web100-admin.c web100-admin.h}}} ||
-|| mrange || web100srv || Functions to handle port number ranges. This means that the numbers generated by these methods are always between 1 and 65535 inclusive. || {{{int }}}*mrange_parse*{{{(char* text)}}}<br/>{{{char* }}}*mrange_next*{{{(char* port)}}} || {{{mrange.c mrange.h}}} ||
-|| || || || || ||
-|| SFW Test (C) || web100clt || The client part of the Simple Firewall Test || {{{int }}}*test_sfw_clt*{{{(int ctlsockfd, char tests, char* host, int conn_options)}}}<br/>{{{int }}}*results_sfw*{{{(char tests, char* host)}}} || {{{test_sfw_clt.c test_sfw.h}}} ||
-|| SFW Test (S) || web100srv || The server part of the Simple Firewall Test || {{{int }}}*test_sfw_srv*{{{(int ctlsockfd, web100_agent* agent, TestOptions* options, int conn_options)}}} || {{{test_sfw_srv.c test_sfw.h testoptions.h}}} ||
-|| MID Test (C) || web100clt || The client part of the Middlebox Test || {{{int }}}*test_mid_clt*{{{(int ctlSocket, char tests, char* host, int conn_options, int buf_size, char* tmpstr2)}}} || {{{test_mid_clt.c clt_tests.h}}} ||
-|| MID Test (S) || web100srv || The server part of the Middlebox Test || {{{int }}}*test_mid*{{{(int ctlsockfd, web100_agent* agent, TestOptions* options, int conn_options, double* s2c2spd)}}} || {{{testoptions.c testoptions.h}}} ||
-|| C2S Test (C) || web100clt || The client part of the Client-To-Server Throughput Test || {{{int }}}*test_c2s_clt*{{{(int ctlSocket, char tests, char* host, int conn_options, int buf_size)}}} || {{{test_c2s_clt.c clt_tests.h}}} ||
-|| C2S Test (S) || web100srv || The server part of the Client-To-Server Throughput Test || {{{int }}}*test_c2s*{{{(int ctlsockfd, web100_agent* agent, TestOptions* testOptions, int conn_options, double* c2sspd, int set_buff, int window, int autotune, char* device, Options* options, int record_reverse, int count_vars, char spds[4][256], int* spd_index)}}} || {{{testoptions.c testoptions.h}}} ||
-|| S2C Test (C) || web100clt || The client part of the Server-To-Client Throughput Test || {{{int }}}*test_s2c_clt*{{{(int ctlSocket, char tests, char* host, int conn_options, int buf_size, char* tmpstr)}}} || {{{test_s2c_clt.c clt_tests.h}}} ||
-|| S2C Test (S) || web100srv || The server part of the Server-To-Client Throughput Test || {{{int }}}*test_s2c*{{{(int ctlsockfd, web100_agent* agent, TestOptions* testOptions, int conn_options, double* s2cspd, int set_buff, int window, int autotune, char* device, Options* options, char spds[4][256], int* spd_index, int count_vars, CwndPeaks* peaks)}}} || {{{testoptions.c testoptions.h}}} ||
-|| META Test (C) || web100clt || The client part of the META Test || {{{int }}}*test_meta_clt*{{{(int ctlSocket, char tests, char* host, int conn_options)}}} || {{{test_meta_clt.c test_meta.h}}} ||
-|| META Test (S) || web100srv || The server part of the META Test || {{{int }}}*test_meta_srv*{{{(int ctlsockfd, web100_agent* agent, TestOptions* testOptions, int conn_options)}}} || {{{test_meta_srv.c test_meta.h testoptions.h}}} ||
-
==== NDT Server subsystems ====

All subsystems of the NDT Server (web100srv) can be seen on the following diagram:
@@ -109,40 +121,30 @@

http://www.soldevelo.com/images/ndt/NDTA1.png

-== Life Cycle ==
-
-The NDT client and server interaction details can be found in the [NDTProtocol#Protocol_description NDT Protocol description].
-
-=== Test session with the Java Applet-based client ===
-
-A basic NDT test session with the Java Applet-based client looks as following:
-
-http://www.soldevelo.com/images/ndt/NDT_flow_1.png
-
- # The process starts with the user opening a browser and entering the NDT server URL:
- * An optional step is to point to a well known server and accept a redirect message (Federated mode).
- * Otherwise the URL points to the NDT server itself (either an apache web server or the fakewww process answer the request).
- # The web server responds by returning the page, with an embedded java applet (class or jar file).
- # The user must manually request a test be performed by clicking the “start” button.
- # The applet opens a connection back to the server’s testing engine (web100srv process).
- # A child process is created to handle the test and the parent goes back to listening for more test requests. The parent keeps a FIFO queue to process multiple requests.
- # A control channel is created between the server and the client to control the client’s actions and synchronize the start of the various tests. The server and the client negotiate the test suite.
- # The NDT client and the NDT server performs the negotiated test suite. The client opens new data channels back to the server for testing purposes. Allowing the client to open connections makes it easy to get past client-side firewall boxes.
- # The server extracts the Web100 data and analyzes the connection for faults.
- # The results are recorded in the [NDTDataFormat#web100srv.log_file servers’ log file] and the results are returned to the client for display to the user.
-
-=== Test session with the web100clt client ===
-
-A basic NDT test session with the web100clt client looks as following:
-
-http://www.soldevelo.com/images/ndt/NDT_flow_2.png
-
- # The process starts with connecting to the server's testing engine (web100srv process) by the web100clt client.
- # A child process is created to handle the test and the parent goes back to listening for more test requests. The parent keeps a FIFO queue to process multiple requests.
- # A control channel is created between the server and the client to control the client’s actions and synchronize the start of the various tests. The server and the client negotiate the test suite.
- # The NDT client and the NDT server performs the negotiated test suite. The client opens new data channels back to the server for testing purposes. Allowing the client to open connections makes it easy to get past client-side firewall boxes.
- # The server extracts the Web100 data and analyzes the connection for faults.
- # The results are recorded in the [NDTDataFormat#web100srv.log_file servers’ log file] and the results are returned to the client for display to the user.
+==== Subsystems description ====
+
+The brief information about each of the NDT subsystems can be found in the following table. All source files are located in the *src* directory under the root of the checked out sources from the code repository.
+
+|| *Subsystem* || *Used by* || *Description* || *Functions* || *Sources* ||
+|| logging || web100srv<br/>web100clt || Logging subsystem that is responsible for printing informational messages on to the console. It can filter messages according to the currently set debug level. Moreover, this subsystem is also responsible for dates/timestamps handling. || {{{void }}}*log_init*{{{(char* progname, int debuglvl)}}}<br/>{{{void }}}*set_debuglvl*{{{(int debuglvl)}}}<br/>{{{void }}}*set_logfile*{{{(char* filename)}}}<br/>{{{int }}}*get_debuglvl*{{{()}}}<br/>{{{char* }}}*get_logfile*{{{()}}}<br/>{{{I2ErrHandle }}}*get_errhandle*{{{()}}}<br/>{{{void }}}*log_print*{{{(int lvl, const char* format, ...)}}}<br/>{{{void }}}*log_println*{{{(int lvl, const char* format, ...)}}}<br/>{{{void }}}*log_free*{{{(void)}}}<br/>{{{void }}}*set_timestamp*{{{()}}}<br/>{{{time_t }}}*get_timestamp*{{{()}}}<br/>{{{long int }}}*get_utimestamp*{{{()}}}<br/>{{{char* }}}*get_ISOtime*{{{(char * isoTime)}}}<br/>{{{void }}}*get_YYYY*{{{(char * year)}}}<br/>{{{void }}}*get_MM*{{{(char * month)}}}<br/>{{{void }}}*get_DD*{{{(char * day)}}} | | {{{logging.c logging.h}}} ||
+|| network || web100srv<br/>web100clt || Subsystem that is responsible for all network operations. || {{{I2Addr }}}*!CreateListenSocket*{{{(I2Addr addr, char* serv, int options, int buf_size)}}}<br/>{{{int }}}*!CreateConnectSocket*{{{(int* sockfd, I2Addr local_addr, I2Addr server_addr, int option, int buf_sizes)}}}<br/>{{{int }}}*send_msg*{{{(int ctlSocket, int type, void* msg, int len)}}}<br/>{{{int }}}*recv_msg*{{{(int ctlSocket, int* type, void* msg, int* len)}}}<br/>{{{int }}}*writen*{{{(int fd, void* buf, int amount)}}}<br/>{{{int }}}*readn*{{{(int fd, void* buf, int amount)}}} || {{{network.c network.h}}} ||
+|| protocol || web100srv<br/>web100clt || Functions to support [NDTProtocol NDT Protocol]. || {{{int }}}*check_msg_type*{{{(char* prefix, int expected, int received, char* buff, int len)}}} || {{{protocol.c protocol.h}}} ||
+|| utils || web100srv<br/>web100clt || Functions to handle numbers sanity checks and some other utility things. || {{{int }}}*check_int*{{{(char* text, int* number)}}}<br/>{{{int }}}*check_rint*{{{(char* text, int* number, int minVal, int maxVal)}}}<br/>{{{int }}}*check_long*{{{(char* text, long* number)}}}<br/>{{{double }}}*secs*{{{()}}}<br/>{{{void }}}*err_sys*{{{(char* s)}}}<br/>{{{int }}}*sndq_len*{{{(int fd)}}}<br/>{{{void }}}*mysleep*{{{(double time)}}} || utils.c utils.h ||
+|| Web100 support || web100srv || Functions needed to read the Web100 variables. || {{{void }}}*get_iflist*{{{(void)}}}<br/>{{{int }}}*web100_init*{{{(char *VarFileName)}}}<br/>{{{int }}}*web100_autotune*{{{(int sock, web100_agent* agent, web100_connection* cn)}}}<br/>{{{void }}}*web100_middlebox*{{{(int sock, web100_agent* agent, web100_connection* cn, char *results)}}}<br/>{{{int }}}*web100_setbuff*{{{(int sock, web100_agent* agent, web100_connection* cn, int autotune)}}}<br/>{{{void }}}*web100_get_data_recv*{{{(int sock, web100_agent* agent, web100_connection* cn, int count_vars)}}}<br/>{{{int }}}*web100_get_data*{{{(web100_snapshot* snap, int ctlsock, web100_agent* agent, int count_vars)}}}<br/>{{{int }}}*!CwndDecrease*{{{(web100_agent* agent, char* logname, int *dec_cnt, int *same_cnt, int *inc_cnt)}}}<br/>{{{int }}}*web100_logvars*{{{(int *Timeouts, int *SumRTT, int *CountRTT, int *PktsRetrans, int *FastRetran, int *DataPktsOut, int *AckPktsOut, int *CurrentMSS, int *DupAcksIn, int *AckPktsIn, int *MaxRwinRcvd, int *Sndbuf, int *CurrentCwnd, int *SndLimTimeRwin, int *SndLimTimeCwnd, int *SndLimTimeSender, int *DataBytesOut, int *SndLimTransRwin, int *SndLimTransCwnd, int *SndLimTransSender, int *MaxSsthresh, int *CurrentRTO, int *CurrentRwinRcvd, int *MaxCwnd, int *CongestionSignals, int *PktsOut, int *MinRTT, int count_vars, int *RcvWinScale, int *SndWinScale, int *CongAvoid, int *CongestionOverCount, int *MaxRTT, int *OtherReductions, int *CurTimeoutCount, int *AbruptTimeouts, int *SendStall, int *SlowStart, int *SubsequentTimeouts, int *ThruBytesAcked)}}} || {{{web100-util.c web100srv.h}}} ||
+|| pcap support || web100srv || Functions that use pcap library in the bottleneck detection algorithm. || {{{void }}}*init_vars*{{{(struct spdpair *cur)}}}<br/>{{{void }}}*print_bins*{{{(struct spdpair *cur, int monitor_pipe[2])}}}<br/>{{{void }}}*calculate_spd*{{{(struct spdpair *cur, struct spdpair *cur2, int port2, int port3)}}}<br/>{{{void }}}*init_pkttrace*{{{(I2Addr srcAddr, struct sockaddr *sock_addr, socklen_t saddrlen, int monitor_pipe[2], char *device, PortPair* pair, char * direction, int compress)}}}<br/>{{{int }}}*check_signal_flags*{{{()}}} || {{{web100-pcap.c web100srv.h}}} ||
+|| admin page || web100srv || Functions needed to handle the Admin page, which allows a remote user to view the usage statistics via a web page. || {{{void }}}*view_init*{{{(int refresh)}}}<br/>{{{int }}}*calculate*{{{(char now[32], int SumRTT, int CountRTT, int CongestionSignals, int PktsOut, int DupAcksIn, int AckPktsIn, int CurrentMSS, int SndLimTimeRwin, int SndLimTimeCwnd, int SndLimTimeSender, int MaxRwinRcvd, int CurrentCwnd, int Sndbuf, int DataBytesOut, int mismatch, int bad_cable, int c2sspd, int s2cspd, int c2sdata, int s2cack, int view_flag)}}}<br/>{{{void }}}*gen_html*{{{(int c2sspd, int s2cspd, int MinRTT, int PktsRetrans, int Timeouts, int Sndbuf, int MaxRwinRcvd, int CurrentCwnd, int mismatch, int bad_cable, int totalcnt, int refresh)}}} || {{{web100-admin.c web100-admin.h}}} ||
+|| mrange || web100srv || Functions to handle port number ranges. This means that the numbers generated by these methods are always between 1 and 65535 inclusive. || {{{int }}}*mrange_parse*{{{(char* text)}}}<br/>{{{char* }}}*mrange_next*{{{(char* port)}}} || {{{mrange.c mrange.h}}} ||
+|| || || || || ||
+|| SFW Test (C) || web100clt || The client part of the Simple Firewall Test || {{{int }}}*test_sfw_clt*{{{(int ctlsockfd, char tests, char* host, int conn_options)}}}<br/>{{{int }}}*results_sfw*{{{(char tests, char* host)}}} || {{{test_sfw_clt.c test_sfw.h}}} ||
+|| SFW Test (S) || web100srv || The server part of the Simple Firewall Test || {{{int }}}*test_sfw_srv*{{{(int ctlsockfd, web100_agent* agent, TestOptions* options, int conn_options)}}} || {{{test_sfw_srv.c test_sfw.h testoptions.h}}} ||
+|| MID Test (C) || web100clt || The client part of the Middlebox Test || {{{int }}}*test_mid_clt*{{{(int ctlSocket, char tests, char* host, int conn_options, int buf_size, char* tmpstr2)}}} || {{{test_mid_clt.c clt_tests.h}}} ||
+|| MID Test (S) || web100srv || The server part of the Middlebox Test || {{{int }}}*test_mid*{{{(int ctlsockfd, web100_agent* agent, TestOptions* options, int conn_options, double* s2c2spd)}}} || {{{testoptions.c testoptions.h}}} ||
+|| C2S Test (C) || web100clt || The client part of the Client-To-Server Throughput Test || {{{int }}}*test_c2s_clt*{{{(int ctlSocket, char tests, char* host, int conn_options, int buf_size)}}} || {{{test_c2s_clt.c clt_tests.h}}} ||
+|| C2S Test (S) || web100srv || The server part of the Client-To-Server Throughput Test || {{{int }}}*test_c2s*{{{(int ctlsockfd, web100_agent* agent, TestOptions* testOptions, int conn_options, double* c2sspd, int set_buff, int window, int autotune, char* device, Options* options, int record_reverse, int count_vars, char spds[4][256], int* spd_index)}}} || {{{testoptions.c testoptions.h}}} ||
+|| S2C Test (C) || web100clt || The client part of the Server-To-Client Throughput Test || {{{int }}}*test_s2c_clt*{{{(int ctlSocket, char tests, char* host, int conn_options, int buf_size, char* tmpstr)}}} || {{{test_s2c_clt.c clt_tests.h}}} ||
+|| S2C Test (S) || web100srv || The server part of the Server-To-Client Throughput Test || {{{int }}}*test_s2c*{{{(int ctlsockfd, web100_agent* agent, TestOptions* testOptions, int conn_options, double* s2cspd, int set_buff, int window, int autotune, char* device, Options* options, char spds[4][256], int* spd_index, int count_vars, CwndPeaks* peaks)}}} || {{{testoptions.c testoptions.h}}} ||
+|| META Test (C) || web100clt || The client part of the META Test || {{{int }}}*test_meta_clt*{{{(int ctlSocket, char tests, char* host, int conn_options)}}} || {{{test_meta_clt.c test_meta.h}}} ||
+|| META Test (S) || web100srv || The server part of the META Test || {{{int }}}*test_meta_srv*{{{(int ctlsockfd, web100_agent* agent, TestOptions* testOptions, int conn_options)}}} || {{{test_meta_srv.c test_meta.h testoptions.h}}} ||

== Build Instructions ==



  • [ndt-dev] [ndt] r701 committed - Reordering., ndt, 10/07/2011

Archive powered by MHonArc 2.6.16.

Top of Page