[Client] Change -F option's behaviour
In flood mode, the delay is now counted from the beginning of the transmission of a request, instead of after the end of the transmission. The old behaviour is still supported by adding a '+' before the delay duration on the command line.
This commit is contained in:
parent
9ca63f0858
commit
e58d158286
8
TODO.t2t
8
TODO.t2t
|
@ -139,14 +139,6 @@ Work to do in OwlPS
|
||||||
|
|
||||||
= Client =
|
= Client =
|
||||||
|
|
||||||
- "Metronome" option to send a request precisely every X milliseconds.
|
|
||||||
|
|
||||||
Get the current time right before and right after transmitting a
|
|
||||||
request, and sleep for (X - elapsed(before, after)).
|
|
||||||
|
|
||||||
Should we replace the default behaviour? Or -F 1000 would be the new
|
|
||||||
behaviour, whereas -F +1000 would be the old behaviour?
|
|
||||||
|
|
||||||
- Log sent requests?
|
- Log sent requests?
|
||||||
|
|
||||||
- Qt version of the client
|
- Qt version of the client
|
||||||
|
|
|
@ -23,7 +23,7 @@ June 2013
|
||||||
|
|
||||||
**owlps-client** [ **-v** | **-q** ] **-i** //dest_ip// [ **-p** //dest_port// ] [ **-I** //iface// ]
|
**owlps-client** [ **-v** | **-q** ] **-i** //dest_ip// [ **-p** //dest_port// ] [ **-I** //iface// ]
|
||||||
[ **-t** //delay// ] [ **-n** //nb_packets// ] [ **-s** //packet_size// ]
|
[ **-t** //delay// ] [ **-n** //nb_packets// ] [ **-s** //packet_size// ]
|
||||||
[ **-F** [ //delay// ] [ **-N** //nb_requests// ] [ **-D** ] ] [ **-l** [ //port// ] ]
|
[ **-F** [ //[+]delay// ] [ **-N** //nb_requests// ] [ **-D** ] ] [ **-l** [ //port// ] ]
|
||||||
|
|
||||||
**owlps-client** [ **-v** | **-q** ] **-i** dest_ip [ **-p** //dest_port// ] [ **-I** //iface// ]
|
**owlps-client** [ **-v** | **-q** ] **-i** dest_ip [ **-p** //dest_port// ] [ **-I** //iface// ]
|
||||||
[ **-t** //delay// ] [ **-n** //nb_packets// ] [ **-s** //packet_size// ]
|
[ **-t** //delay// ] [ **-n** //nb_packets// ] [ **-s** //packet_size// ]
|
||||||
|
@ -75,9 +75,16 @@ owlps-aggregatord.t2t) to create a manual calibration database.
|
||||||
Name of the network interface used to transmit the request (e.g.
|
Name of the network interface used to transmit the request (e.g.
|
||||||
“eth2”). If this option is absent, the interface is selected
|
“eth2”). If this option is absent, the interface is selected
|
||||||
automatically. You must be root to use this option.
|
automatically. You must be root to use this option.
|
||||||
: **-F** [ //delay// ]
|
: **-F** [ //[+]delay// ]
|
||||||
“Flood mode”: loop indefinitely, sending a new request every //delay//
|
“Flood mode”: loop indefinitely, sending a new request every //delay//
|
||||||
milliseconds (default: 1000 ms).
|
milliseconds (default: 1000 ms). If //delay// is smaller than the
|
||||||
|
transmission time of a request (cf. **-n** and **-t** options), it is
|
||||||
|
ignored and the next request is transmitted right away. If //delay//
|
||||||
|
is prefixed with a //+// sign, it is cumulative to the transmission
|
||||||
|
time, i.e. it is the delay between the end of a request's transmission
|
||||||
|
and the start of the next request's transmission; by default,
|
||||||
|
//delay// is the time between the start of the transmissions of both
|
||||||
|
requests.
|
||||||
: **-N** //nb_requests//
|
: **-N** //nb_requests//
|
||||||
With -F, stop after //nb_requests// requests transmitted instead of
|
With -F, stop after //nb_requests// requests transmitted instead of
|
||||||
looping indefinitely.
|
looping indefinitely.
|
||||||
|
|
|
@ -84,6 +84,7 @@ struct {
|
||||||
uint_fast16_t nb_pkt ; // Number of packets to send
|
uint_fast16_t nb_pkt ; // Number of packets to send
|
||||||
uint_fast16_t pkt_size ; // Size of the packet to send
|
uint_fast16_t pkt_size ; // Size of the packet to send
|
||||||
int_fast32_t flood_delay ; // Time between two request transmissions
|
int_fast32_t flood_delay ; // Time between two request transmissions
|
||||||
|
bool add_flood_delay ; // Add the delay to the transmission time?
|
||||||
uint_fast16_t nb_requests ; // Number of requests to send
|
uint_fast16_t nb_requests ; // Number of requests to send
|
||||||
uint_fast16_t listening_port ;
|
uint_fast16_t listening_port ;
|
||||||
// Calibration data:
|
// Calibration data:
|
||||||
|
@ -101,6 +102,7 @@ struct {
|
||||||
0, // nb_pkt
|
0, // nb_pkt
|
||||||
0, // pkt_size
|
0, // pkt_size
|
||||||
-1, // flood_delay
|
-1, // flood_delay
|
||||||
|
false, // add_flood_delay
|
||||||
0, // nb_requests
|
0, // nb_requests
|
||||||
0, // listening_port
|
0, // listening_port
|
||||||
0, 0, 0, 0 // Calibration data
|
0, 0, 0, 0 // Calibration data
|
||||||
|
@ -125,6 +127,7 @@ int main(int argc, char *argv[])
|
||||||
int ret = 0 ;
|
int ret = 0 ;
|
||||||
// Number of requests we still have to transmit:
|
// Number of requests we still have to transmit:
|
||||||
uint_fast16_t nb_requests_left = 1 ;
|
uint_fast16_t nb_requests_left = 1 ;
|
||||||
|
owl_timestamp start_time ; // Time of the transmission's start
|
||||||
|
|
||||||
owl_run = true ;
|
owl_run = true ;
|
||||||
|
|
||||||
|
@ -149,12 +152,42 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
create_socket() ;
|
create_socket() ;
|
||||||
|
|
||||||
|
/* Transmit the first request */
|
||||||
|
if (! options.add_flood_delay)
|
||||||
|
owl_timestamp_now(&start_time) ;
|
||||||
send_request() ;
|
send_request() ;
|
||||||
if (options.nb_requests)
|
if (options.nb_requests)
|
||||||
nb_requests_left = options.nb_requests - 1 ;
|
nb_requests_left = options.nb_requests - 1 ;
|
||||||
|
|
||||||
|
/* Transmit the next requests, if any */
|
||||||
while (owl_run && options.flood_delay >= 0 && nb_requests_left > 0)
|
while (owl_run && options.flood_delay >= 0 && nb_requests_left > 0)
|
||||||
{
|
{
|
||||||
owl_msleep(options.flood_delay) ;
|
uint_fast32_t trx_time, sleep_time ;
|
||||||
|
owl_timestamp now ;
|
||||||
|
|
||||||
|
if (options.add_flood_delay)
|
||||||
|
owl_msleep(options.flood_delay) ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
owl_timestamp_now(&now) ;
|
||||||
|
trx_time = owl_time_elapsed_ms(&start_time, &now) ;
|
||||||
|
printf("Transmission time was %"PRIuFAST32" ms", trx_time) ;
|
||||||
|
|
||||||
|
// Sleep only if the sleep delay is greater than the
|
||||||
|
// transmission time
|
||||||
|
if (trx_time < (uint_fast32_t) options.flood_delay)
|
||||||
|
{
|
||||||
|
sleep_time = options.flood_delay - trx_time ;
|
||||||
|
printf(", sleeping for %"PRIuFAST32" ms...\n", sleep_time) ;
|
||||||
|
owl_msleep(sleep_time) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf(" > %"PRIdFAST32" ms, no sleeping required.\n",
|
||||||
|
options.flood_delay) ;
|
||||||
|
|
||||||
|
owl_timestamp_now(&start_time) ;
|
||||||
|
}
|
||||||
|
|
||||||
if (owl_run) // owl_run can have been set to false during the sleep
|
if (owl_run) // owl_run can have been set to false during the sleep
|
||||||
{
|
{
|
||||||
send_request() ;
|
send_request() ;
|
||||||
|
@ -204,8 +237,12 @@ void parse_main_options(int argc, char **argv)
|
||||||
* (like -F <delay>), so we have to test separately.
|
* (like -F <delay>), so we have to test separately.
|
||||||
*/
|
*/
|
||||||
if (optarg) // We got an option like -F<delay>, it's OK
|
if (optarg) // We got an option like -F<delay>, it's OK
|
||||||
options.flood_delay = strtoul(optarg, NULL, 0) ;
|
{
|
||||||
else // We got -F alone or -F <port>
|
options.flood_delay = strtoul(optarg, NULL, 0) ;
|
||||||
|
if (optarg[0] == '+')
|
||||||
|
options.add_flood_delay = true ;
|
||||||
|
}
|
||||||
|
else // We got -F alone or -F <delay>
|
||||||
{
|
{
|
||||||
/* If we are at the end of the string, or the next optind
|
/* If we are at the end of the string, or the next optind
|
||||||
* is an option, we have the option without argument */
|
* is an option, we have the option without argument */
|
||||||
|
@ -215,8 +252,9 @@ void parse_main_options(int argc, char **argv)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Take the optind value:
|
// Take the optind value:
|
||||||
options.flood_delay =
|
options.flood_delay = strtoul(argv[optind], NULL, 0) ;
|
||||||
strtoul(argv[optind], NULL, 0) ;
|
if (argv[optind][0] == '+')
|
||||||
|
options.add_flood_delay = true ;
|
||||||
++optind ;
|
++optind ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -438,6 +476,7 @@ void print_configuration()
|
||||||
"\tNumber of packets: %"PRIuFAST16"\n"
|
"\tNumber of packets: %"PRIuFAST16"\n"
|
||||||
"\tPacket size: %"PRIuFAST16"\n"
|
"\tPacket size: %"PRIuFAST16"\n"
|
||||||
"\tFlood delay (ms): %"PRIdFAST32"\n"
|
"\tFlood delay (ms): %"PRIdFAST32"\n"
|
||||||
|
"\tCumulative flood delay: %s\n"
|
||||||
"\tNumber of requests: %"PRIuFAST16"\n"
|
"\tNumber of requests: %"PRIuFAST16"\n"
|
||||||
"\tListening port: %"PRIuFAST16"\n"
|
"\tListening port: %"PRIuFAST16"\n"
|
||||||
"\tDirection: %"PRIu8"\n"
|
"\tDirection: %"PRIu8"\n"
|
||||||
|
@ -454,6 +493,7 @@ void print_configuration()
|
||||||
options.nb_pkt,
|
options.nb_pkt,
|
||||||
options.pkt_size,
|
options.pkt_size,
|
||||||
options.flood_delay,
|
options.flood_delay,
|
||||||
|
OWL_BOOL_TO_STRING(options.add_flood_delay),
|
||||||
options.nb_requests,
|
options.nb_requests,
|
||||||
options.listening_port,
|
options.listening_port,
|
||||||
options.direction,
|
options.direction,
|
||||||
|
@ -497,7 +537,7 @@ void make_packet()
|
||||||
if (is_calibration_request) // Calibration packet
|
if (is_calibration_request) // Calibration packet
|
||||||
{
|
{
|
||||||
if (options.verbose)
|
if (options.verbose)
|
||||||
printf("Preparing calibration request packet...\n") ;
|
printf("\nPreparing calibration request packet...\n") ;
|
||||||
|
|
||||||
packet_size =
|
packet_size =
|
||||||
sizeof(uint8_t) * 2 + sizeof(owl_timestamp) + sizeof(float) * 3 +
|
sizeof(uint8_t) * 2 + sizeof(owl_timestamp) + sizeof(float) * 3 +
|
||||||
|
@ -517,7 +557,7 @@ void make_packet()
|
||||||
else // Standard packet
|
else // Standard packet
|
||||||
{
|
{
|
||||||
if (options.verbose)
|
if (options.verbose)
|
||||||
printf("Preparing request packet...\n") ;
|
printf("\nPreparing request packet...\n") ;
|
||||||
|
|
||||||
packet_size =
|
packet_size =
|
||||||
sizeof(uint8_t) + sizeof(owl_timestamp) + sizeof(uint16_t) * 2 ;
|
sizeof(uint8_t) + sizeof(owl_timestamp) + sizeof(uint16_t) * 2 ;
|
||||||
|
@ -676,7 +716,7 @@ void print_usage()
|
||||||
"\n\t"
|
"\n\t"
|
||||||
" [-n nb_packets]"
|
" [-n nb_packets]"
|
||||||
" [-s packet_size]"
|
" [-s packet_size]"
|
||||||
" [-F [delay] [-N nb_requests] [-D]]"
|
" [-F [[+]delay] [-N nb_requests] [-D]]"
|
||||||
"\n\t"
|
"\n\t"
|
||||||
" [-l [port]]\n"
|
" [-l [port]]\n"
|
||||||
"Calibration request:\n"
|
"Calibration request:\n"
|
||||||
|
@ -689,7 +729,7 @@ void print_usage()
|
||||||
"\n\t"
|
"\n\t"
|
||||||
" [-n nb_packets]"
|
" [-n nb_packets]"
|
||||||
" [-s packet_size]"
|
" [-s packet_size]"
|
||||||
" [-F [delay] [-N nb_requests] [-D]]"
|
" [-F [[+]delay] [-N nb_requests] [-D]]"
|
||||||
"\n\t"
|
"\n\t"
|
||||||
" direction x y z\n"
|
" direction x y z\n"
|
||||||
|
|
||||||
|
@ -721,7 +761,9 @@ void print_usage()
|
||||||
" to\n\t\t\tuse this option.\n"
|
" to\n\t\t\tuse this option.\n"
|
||||||
"\t-F [delay]\t\"Flood mode\": loop indefinitely, sending a"
|
"\t-F [delay]\t\"Flood mode\": loop indefinitely, sending a"
|
||||||
" new request\n\t\t\tevery <delay> milliseconds (default:"
|
" new request\n\t\t\tevery <delay> milliseconds (default:"
|
||||||
" %d ms).\n"
|
" %d ms). If\n\t\t\t<delay> starts with a +, it is the time"
|
||||||
|
" between two\n\t\t\trequests instead of the time between the"
|
||||||
|
" start of the\n\t\t\ttransmission of two requests.\n"
|
||||||
"\t-N nb_requests\tWith -F, stop after <nb_requests> requests"
|
"\t-N nb_requests\tWith -F, stop after <nb_requests> requests"
|
||||||
" transmitted\n\t\t\tinstead of looping indefinitely.\n"
|
" transmitted\n\t\t\tinstead of looping indefinitely.\n"
|
||||||
"\t-D\t\tDaemon mode. Useful only in flood mode.\n"
|
"\t-D\t\tDaemon mode. Useful only in flood mode.\n"
|
||||||
|
|
Loading…
Reference in New Issue