diff options
Diffstat (limited to 'apps/hiperf/src/main.cc')
-rw-r--r-- | apps/hiperf/src/main.cc | 159 |
1 files changed, 104 insertions, 55 deletions
diff --git a/apps/hiperf/src/main.cc b/apps/hiperf/src/main.cc index 9c0f0a140..85cadd677 100644 --- a/apps/hiperf/src/main.cc +++ b/apps/hiperf/src/main.cc @@ -14,7 +14,6 @@ */ #include <client.h> -#include <forwarder_interface.h> #include <server.h> namespace hiperf { @@ -44,6 +43,11 @@ void usage() { std::cerr << "-X\t<param>\t\t\t\t" << "Set FEC params. Options are Rely_K#_N# or RS_K#_N#" << std::endl; + std::cerr + << "-J\t<passphrase>\t\t\t" + << "Set the passphrase used to sign/verify aggregated interests. " + "If set on the client, aggregated interests are enable automatically." + << std::endl; #endif std::cerr << std::endl; std::cerr << "SERVER SPECIFIC:" << std::endl; @@ -51,11 +55,17 @@ void usage() { "Sends an application data unit in bytes that is published once " "before exit" << std::endl; + std::cerr << "-E\t<expiry_time>\t\t\t" + "Expiration time for data packets generated by the producer " + "socket" + << std::endl; std::cerr << "-s\t<packet_size>\t\t\tData packet payload size." << std::endl; std::cerr << "-r\t\t\t\t\t" << "Produce real content of <content_size> bytes" << std::endl; - std::cerr << "-m\t<manifest_capacity>\t\t" - << "Produce transport manifest" << std::endl; + std::cerr << "-m\t<manifest_max_capacity>\t\t" + << "The maximum number of entries a manifest can contain. Set it " + "to 0 to disable manifests. Default is 30, max is 255." + << std::endl; std::cerr << "-l\t\t\t\t\t" << "Start producing content upon the reception of the " "first interest" @@ -92,11 +102,6 @@ void usage() { "the packet to generate. To be used with the -R option. -B and -I " "will be ignored." << std::endl; - std::cerr << "-E\t\t\t\t\t" - << "Enable encrypted communication. Requires the path to a p12 " - "file containing the " - "crypto material used for the TLS handshake" - << std::endl; std::cerr << "-G\t<port>\t\t\t\t" << "Input stream from localhost at the specified port" << std::endl; #endif @@ -110,12 +115,27 @@ void usage() { << std::endl; std::cerr << "-L\t<interest lifetime>\t\t" << "Set interest lifetime." << std::endl; - std::cerr << "-u\t<delay>\t\t\t\t" - << "Set max lifetime of unverified packets." << std::endl; + std::cerr << "-U\t<factor>\t\t\t" + << "Update the relevance threshold: if an unverified packet has " + "been received before the last U * manifest_max_capacity_ " + "packets received (verified or not), it will be flushed out. " + "Should be > 1, default is 100." + << std::endl; + std::cerr << "-u\t<factor>\t\t\t" + << "Update the alert threshold: if the " + "number of unverified packet is > u * manifest_max_capacity_, " + "an alert is raised. Should be set such that U > u >= 1, " + "default is 20. If u >= U, no alert will ever be raised." + << std::endl; std::cerr << "-M\t<input_buffer_size>\t\t" << "Size of consumer input buffer. If 0, reassembly of packets " "will be disabled." << std::endl; + std::cerr << "-N\t\t\t\t\t" + << "Enable aggregated interests; the number of suffixes (including " + "the one in the header) can be set through the env variable " + "`MAX_AGGREGATED_INTERESTS`." + << std::endl; std::cerr << "-W\t<window_size>\t\t\t" << "Use a fixed congestion window " "for retrieving the data." @@ -137,7 +157,10 @@ void usage() { "used with the -R (default: false)" << std::endl; std::cerr << "-P\t\t\t\t\t" - << "Prefix of the producer where to do the handshake" << std::endl; + << "Number of parallel streams. For hiperf client, this is the " + "number of consumer to create, while for hiperf server this is " + "the number of producers to create." + << std::endl; std::cerr << "-j\t<relay_name>\t\t\t" << "Publish received content under the name relay_name." "This is an RTC specific option, to be " @@ -145,13 +168,25 @@ void usage() { << std::endl; std::cerr << "-g\t<port>\t\t\t\t" << "Output stream to localhost at the specified port" << std::endl; + std::cerr << "-o\t\t\t\t\t" + << "Content sharing mode: if set the socket work in content sharing" + << "mode. It works only in RTC mode" << std::endl; std::cerr << "-e\t<strategy>\t\t\t" - << "Enhance the network with a reliability strategy. Options 1:" - << " unreliable, 2: rtx only, 3: fec only, " - << "4: delay based, 5: low rate, 6: low rate and best path " - << "7: low rate and replication, 8: low rate and best" - << " path/replication" - << "(default: 2 = rtx only) " << std::endl; + << "Enhance the network with a reliability strategy. Options" + << std::endl; + std::cerr << "\t\t\t\t\t\t1: unreliable " << std::endl; + std::cerr << "\t\t\t\t\t\t2: rtx only " << std::endl; + std::cerr << "\t\t\t\t\t\t3: fec only " << std::endl; + std::cerr << "\t\t\t\t\t\t4: delay based " << std::endl; + std::cerr << "\t\t\t\t\t\t5: low rate " << std::endl; + std::cerr << "\t\t\t\t\t\t6: low rate and best path " << std::endl; + std::cerr << "\t\t\t\t\t\t7: low rate and replication" << std::endl; + std::cerr << "\t\t\t\t\t\t8: low rate and best path/replication " + << std::endl; + std::cerr << "\t\t\t\t\t\t9: only fec low residual losses " << std::endl; + std::cerr << "\t\t\t\t\t\t10: delay and best path " << std::endl; + std::cerr << "\t\t\t\t\t\t11: delay and replication " << std::endl; + std::cerr << "\t\t\t\t\t\t(default: 2 = rtx only) " << std::endl; std::cerr << "-H\t\t\t\t\t" << "Disable periodic print headers in stats report." << std::endl; std::cerr << "-n\t<nb_iterations>\t\t\t" @@ -170,6 +205,8 @@ int main(int argc, char *argv[]) { WSAStartup(MAKEWORD(2, 2), &wsaData); #endif + transport::interface::global_config::GlobalConfigInterface global_conf; + // -1 server, 0 undefined, 1 client int role = 0; int options = 0; @@ -188,9 +225,10 @@ int main(int argc, char *argv[]) { int opt; #ifndef _WIN32 // Please keep in alphabetical order. - while ((opt = getopt(argc, argv, - "A:B:CDE:F:G:HIK:L:M:P:RST:U:W:X:ab:c:d:e:f:g:hi:j:k:lm:" - "n:p:rs:tu:vwxy:z:")) != -1) { + while ( + (opt = getopt(argc, argv, + "A:B:CDE:F:G:HIJ:K:L:M:NP:RST:U:W:X:ab:c:d:e:f:g:hi:j:k:lm:" + "n:op:qrs:tu:vwxy:z:")) != -1) { switch (opt) { // Common case 'D': { @@ -225,10 +263,14 @@ int main(int argc, char *argv[]) { #else // Please keep in alphabetical order. while ((opt = getopt(argc, argv, - "A:B:CE:F:HK:L:M:P:RSU:W:X:ab:c:d:e:f:hi:j:k:lm:n:p:rs:" + "A:B:CE:F:HK:L:M:P:RSU:W:X:ab:c:d:e:f:hi:j:k:lm:n:op:rs:" "tu:vwxy:z:")) != -1) { switch (opt) { #endif + case 'E': { + server_configuration.content_lifetime_ = std::stoul(optarg); + break; + } case 'f': { log_file = optarg; break; @@ -243,14 +285,18 @@ int main(int argc, char *argv[]) { server_configuration.aggregated_data_ = true; break; } + case 'o': { + client_configuration.content_sharing_mode_ = true; + break; + } case 'w': { client_configuration.packet_format_ = Packet::Format::HF_INET6_UDP; server_configuration.packet_format_ = Packet::Format::HF_INET6_UDP; break; } case 'k': { - server_configuration.passphrase = std::string(optarg); - client_configuration.passphrase = std::string(optarg); + server_configuration.passphrase_ = std::string(optarg); + client_configuration.passphrase_ = std::string(optarg); break; } case 'z': { @@ -271,20 +317,31 @@ int main(int argc, char *argv[]) { role += 1; break; } - + case 'q': { + client_configuration.colored_ = server_configuration.colored_ = false; + break; + } + case 'J': { + client_configuration.aggr_interest_passphrase_ = optarg; + server_configuration.aggr_interest_passphrase_ = optarg; + // Consumer signature is only used with aggregated interests, + // hence enabling it also forces usage of aggregated interests + client_configuration.aggregated_interests_ = true; + break; + } // Client specifc case 'b': { - client_configuration.beta = std::stod(optarg); + client_configuration.beta_ = std::stod(optarg); options = 1; break; } case 'd': { - client_configuration.drop_factor = std::stod(optarg); + client_configuration.drop_factor_ = std::stod(optarg); options = 1; break; } case 'W': { - client_configuration.window = std::stod(optarg); + client_configuration.window_ = std::stod(optarg); options = 1; break; } @@ -293,13 +350,17 @@ int main(int argc, char *argv[]) { options = 1; break; } + case 'N': { + client_configuration.aggregated_interests_ = true; + break; + } case 'P': { - client_configuration.producer_prefix_ = Prefix(optarg); - client_configuration.secure_ = true; + client_configuration.parallel_flows_ = + server_configuration.parallel_flows_ = std::stoull(optarg); break; } case 'c': { - client_configuration.producer_certificate = std::string(optarg); + client_configuration.producer_certificate_ = std::string(optarg); options = 1; break; } @@ -318,13 +379,13 @@ int main(int argc, char *argv[]) { options = 1; break; } - case 'u': { - client_configuration.unverified_interval_ = std::stoul(optarg); + case 'U': { + client_configuration.manifest_factor_relevant_ = std::stoul(optarg); options = 1; break; } - case 'U': { - client_configuration.unverified_ratio_ = std::stod(optarg); + case 'u': { + client_configuration.manifest_factor_alert_ = std::stoul(optarg); options = 1; break; } @@ -346,7 +407,7 @@ int main(int argc, char *argv[]) { } // Server specific case 'A': { - server_configuration.download_size = std::stoul(optarg); + server_configuration.download_size_ = std::stoul(optarg); options = -1; break; } @@ -356,22 +417,22 @@ int main(int argc, char *argv[]) { break; } case 'r': { - server_configuration.virtual_producer = false; + server_configuration.virtual_producer_ = false; options = -1; break; } case 'm': { - server_configuration.manifest = std::stoul(optarg); + server_configuration.manifest_max_capacity_ = std::stoul(optarg); options = -1; break; } case 'l': { - server_configuration.live_production = true; + server_configuration.live_production_ = true; options = -1; break; } case 'K': { - server_configuration.keystore_name = std::string(optarg); + server_configuration.keystore_name_ = std::string(optarg); options = -1; break; } @@ -393,7 +454,7 @@ int main(int argc, char *argv[]) { break; } case 'p': { - server_configuration.keystore_password = std::string(optarg); + server_configuration.keystore_password_ = std::string(optarg); options = -1; break; } @@ -409,11 +470,6 @@ int main(int argc, char *argv[]) { options = -1; break; } - case 'E': { - server_configuration.keystore_name = std::string(optarg); - server_configuration.secure_ = true; - break; - } case 'e': { client_configuration.recovery_strategy_ = std::stoul(optarg); options = 1; @@ -457,9 +513,9 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } else { if (role > 0) { - client_configuration.name = Name(argv[optind]); + client_configuration.name_ = Prefix(argv[optind]); } else { - server_configuration.name = Prefix(argv[optind]); + server_configuration.name_ = Prefix(argv[optind]); } } @@ -490,16 +546,9 @@ int main(int argc, char *argv[]) { config.set(); // Parse config file - transport::interface::global_config::parseConfigurationFile(conf_file); + global_conf.parseConfigurationFile(conf_file); if (role > 0) { - // set forwarder type - client_configuration.forwarder_type_ = UNDEFINED; - if (config.name.compare("hicnlightng_module") == 0) - client_configuration.forwarder_type_ = HICNLIGHT; - else if (config.name.compare("hicnlightng_module") == 0) - client_configuration.forwarder_type_ = HICNLIGHT_NG; - HIperfClient c(client_configuration); if (c.setup() != ERROR_SETUP) { c.run(); |