The ENABLE network advice service is designed to make it easy for applications to become "network-aware" by providing the application with enough network information to allow it to make the right decisions on how to use the network.
The API has two main parts: a information gathering API that is used to collect network data from a monitoring service such as JAMM, and a higher level API to make decisions based on that information.
Below are the pseudo-code prototypes for the API. This API has not yet been implemented, so please send any comments/suggestions to firstname.lastname@example.org.
Information Collection API:result = EnableGetNetworkInfo(source_host, dest_host, &net;_path_data);This routine query's the monitoring system for all available network data between a pair of hosts. This data is returned in a data structure (net_data), which includes information such as bandwidth, latency, loss, number of hops, maximum MTU, QoS support, etc.)result = EnableGetAverageNetworkInfo(source_host, dest_host, int duration, &net;_path_data);Advice API:This routine is similar to EnableGetNetworkInfo(), but it return average results for the past N minutes, instead of the current results.result = EnableGetMulticastInfo(source_host, dest_host, &mcast_data);This routine querys the monitoring system for all available multicast data between a pair of hosts. In particular, if multicast supported from host A to host B.err = EnableGetNetPrediction(source_host, dest_host, time,duration,&net_data);This routine is similar to EnableGetNetworkInfo, except that is it for some time in the future. This can be used with the Network Weather Service to estimate what the network conditions will be in the future. This information could then be used to determine if a QoS reservation is necessary.size = EnableGetOptimalTCPBufferSize(net_path_data);TCP Options API:This routine takes the data from EnableGetNetworkInfo() and uses it to compute the optimal TCP buffer size.prot = EnableGetProtocol(net_path_data);This routine takes the data from EnableGetNetworkInfo() and uses it to compute the best protocol (i.e.: TCP,UDP,other) to use.nstreams = EnableGetNumStreams(net_path_data);This routine takes the data from EnableGetNetworkInfo() and uses it to compute the optimal number of parallel TCP streams to try to use.
Enable also includes a simple API for using experimental TCP options, for example:result = EnableSetIntialTCPWindowsSize(socket, value);This routine would allow the application to set the initial TCP window size, assuming the OS had a way to do this.
result = EnableSetTCPWindowRecoverRate(socket, value);This routine would allow the application to set the rate TCP window size would try to recover after a lost packet, assuming the OS had a way to do this.