aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/CMakeLists.txt14
-rw-r--r--apps/common-includes/hicn/apps/utils/logger.h46
-rw-r--r--apps/higet/CMakeLists.txt6
-rw-r--r--apps/higet/higet.cc37
-rw-r--r--apps/hiperf/CMakeLists.txt3
-rw-r--r--apps/hiperf/src/common.h14
-rw-r--r--apps/hiperf/src/main.cc329
-rw-r--r--apps/hiperf/src/server.cc24
-rw-r--r--apps/http-proxy/CMakeLists.txt6
-rw-r--r--apps/http-proxy/includes/hicn/http-proxy/forwarder_config.h15
-rw-r--r--apps/http-proxy/includes/hicn/http-proxy/http_proxy.h51
-rw-r--r--apps/http-proxy/main.cc58
-rw-r--r--apps/http-proxy/src/forwarder_interface.cc8
-rw-r--r--apps/http-proxy/src/http_proxy.cc48
-rw-r--r--apps/http-proxy/src/http_session.cc12
-rw-r--r--apps/http-proxy/src/icn_receiver.cc24
-rw-r--r--apps/ping/CMakeLists.txt8
-rw-r--r--apps/ping/src/ping_client.cc218
-rw-r--r--apps/ping/src/ping_server.cc136
-rw-r--r--docs/source/utils.md6
-rw-r--r--libtransport/src/auth/crypto_hash.cc17
-rw-r--r--libtransport/src/auth/signer.cc3
-rw-r--r--tests/2-nodes-hicn-light.yml2
-rw-r--r--tests/2-nodes-vpp-bridge.yml2
-rw-r--r--tests/2-nodes-vpp-memif-replication.yml2
-rw-r--r--tests/2-nodes-vpp-memif.yml2
-rwxr-xr-xtests/config.sh56
27 files changed, 555 insertions, 592 deletions
diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
index b06d7bcb4..b58e18f03 100644
--- a/apps/CMakeLists.txt
+++ b/apps/CMakeLists.txt
@@ -50,7 +50,6 @@ set(LIBHTTP_PROXY_STATIC ${LIBHTTP_PROXY}.static)
find_package(Threads REQUIRED)
find_package(Libconfig++ ${LIBCONFIG_DEFAULT_VERSION} REQUIRED)
-
##############################################################
# Check if building as subproject or as root project
##############################################################
@@ -85,6 +84,19 @@ else()
list(APPEND DEPENDENCIES
${LIBTRANSPORT_LIBRARIES}
)
+
+ # glog
+ list(APPEND THIRD_PARTY_INCLUDE_DIRS
+ ${glog_BINARY_DIR}
+ ${glog_SOURCE_DIR}/src
+ )
+ list(APPEND THIRD_PARTY_DEPENDENCIES
+ glog
+ )
+
+ set(COMMON_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/common-includes
+ )
endif()
diff --git a/apps/common-includes/hicn/apps/utils/logger.h b/apps/common-includes/hicn/apps/utils/logger.h
new file mode 100644
index 000000000..d2af988d9
--- /dev/null
+++ b/apps/common-includes/hicn/apps/utils/logger.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2022 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <glog/logging.h>
+
+#include <iostream>
+
+#define LoggerInfo() LOG(INFO)
+#define LoggerWarn() LOG(WARNING)
+#define LoggerErr() LOG(ERROR)
+#define LoggerFatal() LOG(FATAL)
+#define LoggerVerbose(level) VLOG((level))
+#define LoggerIsOn(level) VLOG_IS_ON((level))
+
+struct HicnLogger {
+ HicnLogger() {
+ // Set log level
+ const char *log_level = std::getenv("LOG_LEVEL");
+ if (log_level != nullptr) FLAGS_v = std::stol(std::string(log_level));
+
+ // Enable/disable prefix
+ const char *enable_log_prefix = std::getenv("ENABLE_LOG_PREFIX");
+ if (enable_log_prefix != nullptr &&
+ std::string(enable_log_prefix) == "OFF") {
+ FLAGS_log_prefix = false;
+ }
+
+ FLAGS_colorlogtostderr = true;
+ }
+};
+
+static HicnLogger logger; \ No newline at end of file
diff --git a/apps/higet/CMakeLists.txt b/apps/higet/CMakeLists.txt
index f4d2d4ec4..791191872 100644
--- a/apps/higet/CMakeLists.txt
+++ b/apps/higet/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2021-2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -49,7 +49,9 @@ if (NOT DISABLE_EXECUTABLES)
${CMAKE_THREAD_LIBS_INIT}
${WSOCK32_LIBRARY}
${WS2_32_LIBRARY}
- DEPENDS ${LIBTRANSPORT_LIBRARIES}
+ INCLUDE_DIRS
+ PRIVATE ${THIRD_PARTY_INCLUDE_DIRS} ${COMMON_INCLUDE_DIRS}
+ DEPENDS ${LIBTRANSPORT_LIBRARIES} ${THIRD_PARTY_DEPENDENCIES}
COMPONENT ${HICN_APPS}
DEFINITIONS ${COMPILER_DEFINITIONS}
LINK_FLAGS ${LINK_FLAGS}
diff --git a/apps/higet/higet.cc b/apps/higet/higet.cc
index d72d7d74f..c86f05f12 100644
--- a/apps/higet/higet.cc
+++ b/apps/higet/higet.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,6 +13,7 @@
* limitations under the License.
*/
+#include <hicn/apps/utils/logger.h>
#include <hicn/transport/http/client_connection.h>
#include <hicn/transport/utils/chrono_typedefs.h>
@@ -172,7 +173,7 @@ class ReadBytesCallbackImplementation
}
print_bar(100, 100, true);
- std::cout << "\nDownloaded " << bytes << " bytes" << std::endl;
+ LoggerInfo() << "\nDownloaded " << bytes << " bytes";
}
work_.reset();
});
@@ -216,8 +217,7 @@ class ReadBytesCallbackImplementation
}
}
if (last) {
- std::cout << "] " << int(progress * 100.0) << " %" << std::endl
- << std::endl;
+ std::cout << "] " << int(progress * 100.0) << " %";
} else {
std::cout << "] " << int(progress * 100.0) << " %\r";
std::cout.flush();
@@ -250,20 +250,17 @@ long checkFileStatus(std::string file_name) {
}
void usage(char *program_name) {
- std::cerr << "usage:" << std::endl;
- std::cerr << program_name << " [option]... [url]..." << std::endl;
- std::cerr << program_name << " options:" << std::endl;
- std::cerr
- << "-O <out_put_path> = write documents to <out_put_file>"
- << std::endl;
- std::cerr << "-S = print server response"
- << std::endl;
- std::cerr << "-P = first word of the ipv6 name of "
- "the response"
- << std::endl;
- std::cerr << "example:" << std::endl;
- std::cerr << "\t" << program_name << " -O - http://origin/index.html"
- << std::endl;
+ LoggerInfo() << "usage:";
+ LoggerInfo() << program_name << " [option]... [url]...";
+ LoggerInfo() << program_name << " options:";
+ LoggerInfo()
+ << "-O <out_put_path> = write documents to <out_put_file>";
+ LoggerInfo() << "-S = print server response";
+ LoggerInfo()
+ << "-P = first word of the ipv6 name of "
+ "the response";
+ LoggerInfo() << "example:";
+ LoggerInfo() << "\t" << program_name << " -O - http://origin/index.html";
exit(EXIT_FAILURE);
}
@@ -308,8 +305,8 @@ int main(int argc, char **argv) {
}
name = argv[optind];
- std::cerr << "Using name " << name << " and name first word "
- << conf.ipv6_first_word << std::endl;
+ LoggerInfo() << "Using name " << name << " and name first word "
+ << conf.ipv6_first_word;
if (conf.file_name.empty()) {
conf.file_name = name.substr(1 + name.find_last_of("/"));
diff --git a/apps/hiperf/CMakeLists.txt b/apps/hiperf/CMakeLists.txt
index 8a0c46ebc..5a0dc3c06 100644
--- a/apps/hiperf/CMakeLists.txt
+++ b/apps/hiperf/CMakeLists.txt
@@ -52,7 +52,8 @@ if (NOT DISABLE_EXECUTABLES)
INCLUDE_DIRS
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
PRIVATE ${LIBCONFIG_CPP_INCLUDE_DIRS}
- DEPENDS ${DEPENDENCIES}
+ PRIVATE ${THIRD_PARTY_INCLUDE_DIRS} ${COMMON_INCLUDE_DIRS}
+ DEPENDS ${DEPENDENCIES} ${THIRD_PARTY_DEPENDENCIES}
COMPONENT ${HICN_APPS}
LINK_FLAGS ${LINK_FLAGS}
COMPILE_OPTIONS ${COMPILER_OPTIONS}
diff --git a/apps/hiperf/src/common.h b/apps/hiperf/src/common.h
index 29cc05c71..3a17e0c40 100644
--- a/apps/hiperf/src/common.h
+++ b/apps/hiperf/src/common.h
@@ -30,6 +30,8 @@
#include <hicn/transport/utils/daemonizator.h>
#endif
+#include <hicn/apps/utils/logger.h>
+
#include <asio.hpp>
#include <cmath>
#include <fstream>
@@ -57,8 +59,6 @@ namespace hiperf {
/**
* Logger
*/
-static std::ostream &Logger() { return std::cout; }
-
template <typename D, typename ConfType, typename ParentType>
class Base : protected std::stringbuf, protected std::ostream {
protected:
@@ -103,7 +103,7 @@ class Base : protected std::stringbuf, protected std::ostream {
int sync() override {
auto string = str();
asio::post(io_service_,
- [this, string]() { Logger() << begin_ << string << end_; });
+ [this, string]() { LoggerInfo() << begin_ << string << end_; });
str("");
return 0;
@@ -140,7 +140,7 @@ static inline int ensureFlows(const Prefix &prefix, std::size_t flows) {
} else if (prefix.getAddressFamily() == AF_INET6) {
max_ip_addr_len_bits = IPV6_ADDR_LEN_BITS;
} else {
- Logger() << "Error: unknown address family." << std::endl;
+ LoggerErr() << "Error: unknown address family.";
ret = ERROR_SETUP;
goto end;
}
@@ -149,9 +149,9 @@ static inline int ensureFlows(const Prefix &prefix, std::size_t flows) {
max_n_flow = log2_n_flow < 64 ? (1 << log2_n_flow) : ~0ULL;
if (flows > max_n_flow) {
- Logger() << "Error: the provided prefix length does not allow to "
- "accomodate the provided number of flows ("
- << flows << " > " << max_n_flow << ")." << std::endl;
+ LoggerErr() << "Error: the provided prefix length does not allow to "
+ "accomodate the provided number of flows ("
+ << flows << " > " << max_n_flow << ").";
ret = ERROR_SETUP;
}
diff --git a/apps/hiperf/src/main.cc b/apps/hiperf/src/main.cc
index 74724209b..ac0f64d1d 100644
--- a/apps/hiperf/src/main.cc
+++ b/apps/hiperf/src/main.cc
@@ -14,186 +14,166 @@
*/
#include <client.h>
+#include <hicn/apps/utils/logger.h>
#include <server.h>
namespace hiperf {
void usage() {
- std::cerr << "HIPERF - Instrumentation tool for performing active network"
- "measurements with hICN"
- << std::endl;
- std::cerr << "usage: hiperf [-S|-C] [options] [prefix|name]" << std::endl;
- std::cerr << std::endl;
- std::cerr << "SERVER OR CLIENT:" << std::endl;
+ LoggerInfo() << "HIPERF - Instrumentation tool for performing active network"
+ "measurements with hICN";
+ LoggerInfo() << "usage: hiperf [-S|-C] [options] [prefix|name]";
+ LoggerInfo();
+ LoggerInfo() << "SERVER OR CLIENT:";
#ifndef _WIN32
- std::cerr << "-D\t\t\t\t\t"
- << "Run as a daemon" << std::endl;
- std::cerr << "-R\t\t\t\t\t"
- << "Run RTC protocol (client or server)" << std::endl;
- std::cerr << "-f\t<filename>\t\t\t"
- << "Log file" << std::endl;
- std::cerr << "-z\t<io_module>\t\t\t"
- << "IO module to use. Default: hicnlight_module" << std::endl;
- std::cerr << "-F\t<conf_file>\t\t\t"
- << "Path to optional configuration file for libtransport"
- << std::endl;
- std::cerr << "-a\t\t\t\t\t"
- << "Enables data packet aggregation. "
- << "Works only in RTC mode" << std::endl;
- 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
+ LoggerInfo() << "-D\t\t\t\t\t"
+ << "Run as a daemon";
+ LoggerInfo() << "-R\t\t\t\t\t"
+ << "Run RTC protocol (client or server)";
+ LoggerInfo() << "-f\t<filename>\t\t\t"
+ << "Log file";
+ LoggerInfo() << "-z\t<io_module>\t\t\t"
+ << "IO module to use. Default: hicnlight_module";
+ LoggerInfo() << "-F\t<conf_file>\t\t\t"
+ << "Path to optional configuration file for libtransport";
+ LoggerInfo() << "-a\t\t\t\t\t"
+ << "Enables data packet aggregation. "
+ << "Works only in RTC mode";
+ LoggerInfo() << "-X\t<param>\t\t\t\t"
+ << "Set FEC params. Options are Rely_K#_N# or RS_K#_N#";
+ LoggerInfo()
<< "-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;
+ "If set on the client, aggregated interests are enable automatically.";
#endif
- std::cerr << std::endl;
- std::cerr << "SERVER SPECIFIC:" << std::endl;
- std::cerr << "-A\t<content_size>\t\t\t"
- "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_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"
- << std::endl;
- std::cerr << "-K\t<keystore_path>\t\t\t"
- << "Path of p12 file containing the "
- "crypto material used for signing packets"
- << std::endl;
- std::cerr << "-k\t<passphrase>\t\t\t"
- << "String from which a 128-bit symmetric key will be "
- "derived for signing packets"
- << std::endl;
- std::cerr << "-p\t<password>\t\t\t"
- << "Password for p12 keystore" << std::endl;
- std::cerr << "-y\t<hash_algorithm>\t\t"
- << "Use the selected hash algorithm for "
- "computing manifest digests (default: SHA256)"
- << std::endl;
- std::cerr << "-x\t\t\t\t\t"
- << "Produces application data units of size <content_size> "
- << "without resetting the name suffix to 0." << std::endl;
- std::cerr << "-B\t<bitrate>\t\t\t"
- << "RTC producer data bitrate, to be used with the -R option."
- << std::endl;
+ LoggerInfo();
+ LoggerInfo() << "SERVER SPECIFIC:";
+ LoggerInfo()
+ << "-A\t<content_size>\t\t\t"
+ "Sends an application data unit in bytes that is published once "
+ "before exit";
+ LoggerInfo() << "-E\t<expiry_time>\t\t\t"
+ "Expiration time for data packets generated by the producer "
+ "socket";
+ LoggerInfo() << "-s\t<packet_size>\t\t\tData packet payload size.";
+ LoggerInfo() << "-r\t\t\t\t\t"
+ << "Produce real content of <content_size> bytes";
+ LoggerInfo()
+ << "-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.";
+ LoggerInfo() << "-l\t\t\t\t\t"
+ << "Start producing content upon the reception of the "
+ "first interest";
+ LoggerInfo() << "-K\t<keystore_path>\t\t\t"
+ << "Path of p12 file containing the "
+ "crypto material used for signing packets";
+ LoggerInfo() << "-k\t<passphrase>\t\t\t"
+ << "String from which a 128-bit symmetric key will be "
+ "derived for signing packets";
+ LoggerInfo() << "-p\t<password>\t\t\t"
+ << "Password for p12 keystore";
+ LoggerInfo() << "-y\t<hash_algorithm>\t\t"
+ << "Use the selected hash algorithm for "
+ "computing manifest digests (default: SHA256)";
+ LoggerInfo() << "-x\t\t\t\t\t"
+ << "Produces application data units of size <content_size> "
+ << "without resetting the name suffix to 0.";
+ LoggerInfo() << "-B\t<bitrate>\t\t\t"
+ << "RTC producer data bitrate, to be used with the -R option.";
#ifndef _WIN32
- std::cerr << "-I\t\t\t\t\t"
- "Interactive mode, start/stop real time content production "
- "by pressing return. To be used with the -R option"
- << std::endl;
- std::cerr
+ LoggerInfo() << "-I\t\t\t\t\t"
+ "Interactive mode, start/stop real time content production "
+ "by pressing return. To be used with the -R option";
+ LoggerInfo()
<< "-T\t<filename>\t\t\t"
"Trace based mode, hiperf takes as input a file with a trace. "
"Each line of the file indicates the timestamp and the size of "
"the packet to generate. To be used with the -R option. -B and -I "
- "will be ignored."
- << std::endl;
- std::cerr << "-G\t<port>\t\t\t\t"
- << "Input stream from localhost at the specified port" << std::endl;
+ "will be ignored.";
+ LoggerInfo() << "-G\t<port>\t\t\t\t"
+ << "Input stream from localhost at the specified port";
#endif
- std::cerr << std::endl;
- std::cerr << "CLIENT SPECIFIC:" << std::endl;
- std::cerr << "-b\t<beta_parameter>\t\t"
- << "RAAQM beta parameter" << std::endl;
- std::cerr << "-d\t<drop_factor_parameter>\t\t"
- << "RAAQM drop factor "
- "parameter"
- << std::endl;
- std::cerr << "-L\t<interest lifetime>\t\t"
- << "Set interest lifetime." << 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."
- << std::endl;
- std::cerr << "-i\t<stats_interval>\t\t"
- << "Show the statistics every <stats_interval> milliseconds."
- << std::endl;
- std::cerr << "-c\t<certificate_path>\t\t"
- << "Path of the producer certificate to be used for verifying the "
- "origin of the packets received."
- << std::endl;
- std::cerr << "-k\t<passphrase>\t\t\t"
- << "String from which is derived the symmetric key used by the "
- "producer to sign packets and by the consumer to verify them."
- << std::endl;
- std::cerr << "-t\t\t\t\t\t"
- "Test mode, check if the client is receiving the "
- "correct data. This is an RTC specific option, to be "
- "used with the -R (default: false)"
- << std::endl;
- std::cerr << "-P\t\t\t\t\t"
- << "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 "
- "used with the -R (default: false)"
- << 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"
- << 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"
- << "Print the stats report <nb_iterations> times and exit.\n"
- << "\t\t\t\t\tThis option limits the duration of the run to "
- "<nb_iterations> * <stats_interval> milliseconds."
- << std::endl;
+ LoggerInfo();
+ LoggerInfo() << "CLIENT SPECIFIC:";
+ LoggerInfo() << "-b\t<beta_parameter>\t\t"
+ << "RAAQM beta parameter";
+ LoggerInfo() << "-d\t<drop_factor_parameter>\t\t"
+ << "RAAQM drop factor "
+ "parameter";
+ LoggerInfo() << "-L\t<interest lifetime>\t\t"
+ << "Set interest lifetime.";
+ LoggerInfo() << "-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.";
+ LoggerInfo()
+ << "-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.";
+ LoggerInfo() << "-M\t<input_buffer_size>\t\t"
+ << "Size of consumer input buffer. If 0, reassembly of packets "
+ "will be disabled.";
+ LoggerInfo()
+ << "-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`.";
+ LoggerInfo() << "-W\t<window_size>\t\t\t"
+ << "Use a fixed congestion window "
+ "for retrieving the data.";
+ LoggerInfo() << "-i\t<stats_interval>\t\t"
+ << "Show the statistics every <stats_interval> milliseconds.";
+ LoggerInfo()
+ << "-c\t<certificate_path>\t\t"
+ << "Path of the producer certificate to be used for verifying the "
+ "origin of the packets received.";
+ LoggerInfo()
+ << "-k\t<passphrase>\t\t\t"
+ << "String from which is derived the symmetric key used by the "
+ "producer to sign packets and by the consumer to verify them.";
+ LoggerInfo() << "-t\t\t\t\t\t"
+ "Test mode, check if the client is receiving the "
+ "correct data. This is an RTC specific option, to be "
+ "used with the -R (default: false)";
+ LoggerInfo()
+ << "-P\t\t\t\t\t"
+ << "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.";
+ LoggerInfo() << "-j\t<relay_name>\t\t\t"
+ << "Publish received content under the name relay_name."
+ "This is an RTC specific option, to be "
+ "used with the -R (default: false)";
+ LoggerInfo() << "-g\t<port>\t\t\t\t"
+ << "Output stream to localhost at the specified port";
+ LoggerInfo()
+ << "-o\t\t\t\t\t"
+ << "Content sharing mode: if set the socket work in content sharing"
+ << "mode. It works only in RTC mode";
+ LoggerInfo() << "-e\t<strategy>\t\t\t"
+ << "Enhance the network with a reliability strategy. Options";
+ LoggerInfo() << "\t\t\t\t\t\t1: unreliable ";
+ LoggerInfo() << "\t\t\t\t\t\t2: rtx only ";
+ LoggerInfo() << "\t\t\t\t\t\t3: fec only ";
+ LoggerInfo() << "\t\t\t\t\t\t4: delay based ";
+ LoggerInfo() << "\t\t\t\t\t\t5: low rate ";
+ LoggerInfo() << "\t\t\t\t\t\t6: low rate and best path ";
+ LoggerInfo() << "\t\t\t\t\t\t7: low rate and replication";
+ LoggerInfo() << "\t\t\t\t\t\t8: low rate and best path/replication ";
+ LoggerInfo() << "\t\t\t\t\t\t9: only fec low residual losses ";
+ LoggerInfo() << "\t\t\t\t\t\t10: delay and best path ";
+ LoggerInfo() << "\t\t\t\t\t\t11: delay and replication ";
+ LoggerInfo() << "\t\t\t\t\t\t(default: 2 = rtx only) ";
+ LoggerInfo() << "-H\t\t\t\t\t"
+ << "Disable periodic print headers in stats report.";
+ LoggerInfo() << "-n\t<nb_iterations>\t\t\t"
+ << "Print the stats report <nb_iterations> times and exit.\n"
+ << "\t\t\t\t\tThis option limits the duration of the run to "
+ "<nb_iterations> * <stats_interval> milliseconds.";
}
int main(int argc, char *argv[]) {
@@ -447,7 +427,7 @@ int main(int argc, char *argv[]) {
} else if (strncasecmp(optarg, "blake2s256", 10) == 0) {
hash_algorithm = CryptoHashType::BLAKE2S256;
} else {
- std::cerr << "Unknown hash algorithm. Using SHA 256." << std::endl;
+ LoggerWarn() << "Unknown hash algorithm. Using SHA 256.";
}
server_configuration.hash_algorithm_ = hash_algorithm;
options = -1;
@@ -488,27 +468,24 @@ int main(int argc, char *argv[]) {
}
if (options > 0 && role < 0) {
- std::cerr << "Client options cannot be used when using the "
- "software in server mode"
- << std::endl;
+ LoggerErr() << "Client options cannot be used when using the "
+ "software in server mode";
usage();
return EXIT_FAILURE;
} else if (options < 0 && role > 0) {
- std::cerr << "Server options cannot be used when using the "
- "software in client mode"
- << std::endl;
+ LoggerErr() << "Server options cannot be used when using the "
+ "software in client mode";
usage();
return EXIT_FAILURE;
} else if (!role) {
- std::cerr << "Please specify if running hiperf as client "
- "or server."
- << std::endl;
+ LoggerErr() << "Please specify if running hiperf as client "
+ "or server.";
usage();
return EXIT_FAILURE;
}
if (argv[optind] == 0) {
- std::cerr << "Please specify the name/prefix to use." << std::endl;
+ LoggerErr() << "Please specify the name/prefix to use.";
usage();
return EXIT_FAILURE;
} else {
diff --git a/apps/hiperf/src/server.cc b/apps/hiperf/src/server.cc
index afaf5423b..ee236f358 100644
--- a/apps/hiperf/src/server.cc
+++ b/apps/hiperf/src/server.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -297,10 +297,10 @@ class HIperfServer::Impl {
!configuration_.multiphase_produce_, suffix);
utils::SteadyTime::TimePoint t1 = utils::SteadyTime::Clock::now();
- Logger() << "Written " << total
- << " data packets in output buffer (Segmentation time: "
- << utils::SteadyTime::getDurationUs(t0, t1).count() << " us)"
- << std::endl;
+ LoggerInfo() << "Written " << total
+ << " data packets in output buffer (Segmentation time: "
+ << utils::SteadyTime::getDurationUs(t0, t1).count() << " us)"
+ << std::endl;
}
/**
@@ -313,8 +313,8 @@ class HIperfServer::Impl {
configuration_.content_lifetime_);
produceContent(p, interest.getName(), interest.getName().getSuffix());
- Logger() << "Received interest " << interest.getName().getSuffix()
- << std::endl;
+ LoggerInfo() << "Received interest " << interest.getName().getSuffix()
+ << std::endl;
}
/**
@@ -552,11 +552,11 @@ class HIperfServer::Impl {
}
if (rtc_running_) {
- Logger() << "stop real time content production" << std::endl;
+ LoggerInfo() << "stop real time content production" << std::endl;
rtc_running_ = false;
rtc_timer_.cancel();
} else {
- Logger() << "start real time content production" << std::endl;
+ LoggerInfo() << "start real time content production" << std::endl;
rtc_running_ = true;
rtc_timer_.expires_from_now(
config_.production_rate_.getMicrosecondsForPacket(
@@ -593,13 +593,13 @@ class HIperfServer::Impl {
std::bind(&Impl::handleInput, this, std::placeholders::_1,
std::placeholders::_2));
} else if (config_.trace_based_) {
- Logger() << "trace-based mode enabled" << std::endl;
+ LoggerInfo() << "trace-based mode enabled" << std::endl;
if (config_.trace_file_ == nullptr) {
- Logger() << "cannot find the trace file" << std::endl;
+ LoggerErr() << "cannot find the trace file" << std::endl;
return ERROR_SETUP;
}
if (parseTraceFile() < 0) {
- Logger() << "cannot parse the trace file" << std::endl;
+ LoggerErr() << "cannot parse the trace file" << std::endl;
return ERROR_SETUP;
}
rtc_running_ = true;
diff --git a/apps/http-proxy/CMakeLists.txt b/apps/http-proxy/CMakeLists.txt
index 5acf09c19..80f671567 100644
--- a/apps/http-proxy/CMakeLists.txt
+++ b/apps/http-proxy/CMakeLists.txt
@@ -72,6 +72,8 @@ build_library(${LIBHTTP_PROXY}
STATIC
SOURCES ${LIB_SOURCE_FILES}
LINK_LIBRARIES ${HTTP_PROXY_LIBRARIES}
+ INCLUDE_DIRS
+ PRIVATE ${THIRD_PARTY_INCLUDE_DIRS} ${COMMON_INCLUDE_DIRS}
DEPENDS ${DEPENDENCIES}
INSTALL_HEADERS ${LIBPROXY_TO_INSTALL_HEADER_FILES}
INCLUDE_DIRS
@@ -91,7 +93,9 @@ if (NOT DISABLE_EXECUTABLES)
build_executable(${HTTP_PROXY}
SOURCES ${APP_SOURCE_FILES}
LINK_LIBRARIES ${LIBHTTP_PROXY_STATIC}
- DEPENDS ${LIBHTTP_PROXY_STATIC}
+ INCLUDE_DIRS
+ PRIVATE ${THIRD_PARTY_INCLUDE_DIRS} ${COMMON_INCLUDE_DIRS}
+ DEPENDS ${LIBHTTP_PROXY_STATIC} ${THIRD_PARTY_DEPENDENCIES}
COMPONENT ${HICN_APPS}
LINK_FLAGS ${LINK_FLAGS}
COMPILE_OPTIONS ${COMPILER_OPTIONS}
diff --git a/apps/http-proxy/includes/hicn/http-proxy/forwarder_config.h b/apps/http-proxy/includes/hicn/http-proxy/forwarder_config.h
index 935b85e78..14e0068ed 100644
--- a/apps/http-proxy/includes/hicn/http-proxy/forwarder_config.h
+++ b/apps/http-proxy/includes/hicn/http-proxy/forwarder_config.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -15,9 +15,9 @@
#pragma once
+#include <hicn/apps/utils/logger.h>
#include <hicn/transport/portability/c_portability.h>
#include <hicn/transport/utils/branch_prediction.h>
-#include <hicn/transport/utils/log.h>
#include <hicn/transport/utils/string_utils.h>
#include <asio.hpp>
@@ -67,8 +67,7 @@ class ForwarderConfig {
if (ret < 0) {
// We were not able to connect to the local forwarder. Do not give up
// and retry.
- TRANSPORT_LOG_ERROR
- << "Could not connect to local forwarder. Retrying.";
+ LoggerErr() << "Could not connect to local forwarder. Retrying.";
timer_.expires_from_now(std::chrono::milliseconds(RETRY_INTERVAL));
timer_.async_wait(std::bind(&ForwarderConfig::doTryToConnectToForwarder,
@@ -79,8 +78,7 @@ class ForwarderConfig {
doGetMainListener(std::make_error_code(std::errc(0)));
}
} else {
- TRANSPORT_LOG_ERROR
- << "Timer for re-trying forwarder connection canceled.";
+ LoggerErr() << "Timer for re-trying forwarder connection canceled.";
}
}
@@ -91,7 +89,7 @@ class ForwarderConfig {
if (ret <= 0) {
// Since without the main listener of the forwarder the proxy cannot
// work, we can stop the program here until we get the listener port.
- TRANSPORT_LOG_ERROR
+ LoggerErr()
<< "Could not retrieve main listener port from the forwarder. "
"Retrying.";
@@ -105,8 +103,7 @@ class ForwarderConfig {
listener_retrieved_callback_(std::make_error_code(std::errc(0)));
}
} else {
- TRANSPORT_LOG_ERROR
- << "Timer for retrieving main hicn listener canceled.";
+ LoggerErr() << "Timer for retrieving main hicn listener canceled.";
}
}
diff --git a/apps/http-proxy/includes/hicn/http-proxy/http_proxy.h b/apps/http-proxy/includes/hicn/http-proxy/http_proxy.h
index efb9f850e..1fa96956a 100644
--- a/apps/http-proxy/includes/hicn/http-proxy/http_proxy.h
+++ b/apps/http-proxy/includes/hicn/http-proxy/http_proxy.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -15,6 +15,7 @@
#pragma once
+#include <hicn/apps/utils/logger.h>
#include <hicn/transport/interfaces/socket_consumer.h>
#include <hicn/transport/utils/event_thread.h>
@@ -147,20 +148,17 @@ class HTTPProxy {
std::string prefix;
std::string first_ipv6_word;
- virtual void printParams() { std::cout << "Parameters: " << std::endl; };
+ virtual void printParams() { LoggerInfo() << "Parameters: "; };
};
struct ClientParams : virtual CommonParams {
short tcp_listen_port;
void printParams() override {
- std::cout << "Running HTTP/TCP -> HTTP/hICN proxy." << std::endl;
+ LoggerInfo() << "Running HTTP/TCP -> HTTP/hICN proxy.";
CommonParams::printParams();
- std::cout << "\t"
- << "HTTP listen port: " << tcp_listen_port << std::endl;
- std::cout << "\t"
- << "Consumer Prefix: " << prefix << std::endl;
- std::cout << "\t"
- << "Prefix first word: " << first_ipv6_word << std::endl;
+ LoggerInfo() << "\tHTTP listen port: " << tcp_listen_port;
+ LoggerInfo() << "\tConsumer Prefix: " << prefix;
+ LoggerInfo() << "\tPrefix first word: " << first_ipv6_word;
}
};
@@ -173,25 +171,24 @@ class HTTPProxy {
bool manifest;
void printParams() override {
- std::cout << "Running HTTP/hICN -> HTTP/TCP proxy." << std::endl;
+ LoggerInfo() << "Running HTTP/hICN -> HTTP/TCP proxy.";
CommonParams::printParams();
- std::cout << "\t"
- << "Origin address: " << origin_address << std::endl;
- std::cout << "\t"
- << "Origin port: " << origin_port << std::endl;
- std::cout << "\t"
- << "Producer cache size: " << cache_size << std::endl;
- std::cout << "\t"
- << "hICN MTU: " << mtu << std::endl;
- std::cout << "\t"
- << "Default content lifetime: " << content_lifetime
- << std::endl;
- std::cout << "\t"
- << "Producer Prefix: " << prefix << std::endl;
- std::cout << "\t"
- << "Prefix first word: " << first_ipv6_word << std::endl;
- std::cout << "\t"
- << "Use manifest: " << manifest << std::endl;
+ LoggerInfo() << "\t"
+ << "Origin address: " << origin_address;
+ LoggerInfo() << "\t"
+ << "Origin port: " << origin_port;
+ LoggerInfo() << "\t"
+ << "Producer cache size: " << cache_size;
+ LoggerInfo() << "\t"
+ << "hICN MTU: " << mtu;
+ LoggerInfo() << "\t"
+ << "Default content lifetime: " << content_lifetime;
+ LoggerInfo() << "\t"
+ << "Producer Prefix: " << prefix;
+ LoggerInfo() << "\t"
+ << "Prefix first word: " << first_ipv6_word;
+ LoggerInfo() << "\t"
+ << "Use manifest: " << manifest;
}
};
diff --git a/apps/http-proxy/main.cc b/apps/http-proxy/main.cc
index 9bd97e02e..32be35bdb 100644
--- a/apps/http-proxy/main.cc
+++ b/apps/http-proxy/main.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,32 +13,31 @@
* limitations under the License.
*/
+#include <hicn/apps/utils/logger.h>
#include <hicn/http-proxy/http_proxy.h>
using namespace transport;
int usage(char* program) {
- std::cerr << "USAGE: " << program << "[-C|-S] [options] <http_prefix>\n"
- << "Server or Client: \n"
- << " -P [FIRST_IPv6_WORD_HEX]\n"
- << " -t [number of threads]\n"
- << "Client Options: \n"
- << " -L [PROXY_LISTEN_PORT]\n"
- << "Server Options: \n"
- << " -a [ORIGIN_IP_ADDRESS]\n"
- << " -p [ORIGIN_PORT]\n"
- << " -c [CACHE_SIZE]\n"
- << " -m [MTU]"
- << " -l [DEFAULT_CONTENT_LIFETIME] (seconds)\n"
- << " -M (enable manifest)\n"
- << std::endl
- << "Example Server:\n"
- << " " << program
- << " -S -a example.com -p 80 -c 10000 -m 1300 -l 7200 -M -t 1 "
- "http://httpserver\n"
- << "Example Client:\n"
- << " " << program << " -C -L 9091 http://httpserver\n"
- << std::endl;
+ LoggerInfo() << "USAGE: " << program << "[-C|-S] [options] <http_prefix>\n"
+ << "Server or Client: \n"
+ << " -P [FIRST_IPv6_WORD_HEX]\n"
+ << " -t [number of threads]\n"
+ << "Client Options: \n"
+ << " -L [PROXY_LISTEN_PORT]\n"
+ << "Server Options: \n"
+ << " -a [ORIGIN_IP_ADDRESS]\n"
+ << " -p [ORIGIN_PORT]\n"
+ << " -c [CACHE_SIZE]\n"
+ << " -m [MTU]"
+ << " -l [DEFAULT_CONTENT_LIFETIME] (seconds)\n"
+ << " -M (enable manifest)\n";
+ LoggerInfo() << "Example Server:\n"
+ << " " << program
+ << " -S -a example.com -p 80 -c 10000 -m 1300 -l 7200 -M -t 1 "
+ "http://httpserver\n"
+ << "Example Client:\n"
+ << " " << program << " -C -L 9091 http://httpserver\n";
return -1;
}
@@ -53,8 +52,7 @@ struct Params : HTTPProxy::ClientParams, HTTPProxy::ServerParams {
"Proxy configured as client and server at the same time.");
}
- std::cout << "\t"
- << "N Threads: " << n_thread << std::endl;
+ LoggerInfo() << "\tN Threads: " << n_thread;
}
HTTPProxy* instantiateProxyAsValue() {
@@ -93,18 +91,16 @@ int main(int argc, char** argv) {
switch (opt) {
case 'C':
if (params.server) {
- std::cerr << "Cannot be both client and server (both -C anc -S "
- "options specified.)."
- << std::endl;
+ LoggerErr() << "Cannot be both client and server (both -C anc -S "
+ "options specified.).";
return usage(argv[0]);
}
params.client = true;
break;
case 'S':
if (params.client) {
- std::cerr << "Cannot be both client and server (both -C anc -S "
- "options specified.)."
- << std::endl;
+ LoggerErr() << "Cannot be both client and server (both -C anc -S "
+ "options specified.).";
return usage(argv[0]);
}
params.server = true;
@@ -143,7 +139,7 @@ int main(int argc, char** argv) {
}
if (argv[optind] == 0) {
- std::cerr << "Using default prefix " << params.prefix << std::endl;
+ LoggerInfo() << "Using default prefix " << params.prefix;
} else {
params.prefix = argv[optind];
}
diff --git a/apps/http-proxy/src/forwarder_interface.cc b/apps/http-proxy/src/forwarder_interface.cc
index 5566eb6ff..205b290d8 100644
--- a/apps/http-proxy/src/forwarder_interface.cc
+++ b/apps/http-proxy/src/forwarder_interface.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -14,8 +14,8 @@
*/
#include <arpa/inet.h>
+#include <hicn/apps/utils/logger.h>
#include <hicn/http-proxy/forwarder_interface.h>
-#include <hicn/transport/utils/log.h>
#include <chrono>
#include <iostream>
@@ -120,7 +120,7 @@ void ForwarderInterface::internalRemoveConnectedUser(uint32_t route_id) {
for (unsigned i = 0; i < routes_to_remove.size(); i++) {
connids_to_remove.insert(routes_to_remove[i]->face_id);
if (hc_route_delete(sock_, routes_to_remove[i]) < 0) {
- TRANSPORT_LOG_ERROR << "Error removing route from forwarder.";
+ LoggerErr() << "Error removing route from forwarder.";
}
}
@@ -147,7 +147,7 @@ void ForwarderInterface::internalRemoveConnectedUser(uint32_t route_id) {
for (unsigned i = 0; i < conns_to_remove.size(); i++) {
if (hc_connection_delete(sock_, conns_to_remove[i]) < 0) {
- TRANSPORT_LOG_ERROR << "Error removing connection from forwarder.";
+ LoggerErr() << "Error removing connection from forwarder.";
}
}
diff --git a/apps/http-proxy/src/http_proxy.cc b/apps/http-proxy/src/http_proxy.cc
index 5abe8780f..b517ae30f 100644
--- a/apps/http-proxy/src/http_proxy.cc
+++ b/apps/http-proxy/src/http_proxy.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,11 +13,11 @@
* limitations under the License.
*/
+#include <hicn/apps/utils/logger.h>
#include <hicn/http-proxy/http_proxy.h>
#include <hicn/http-proxy/http_session.h>
#include <hicn/http-proxy/utils.h>
#include <hicn/transport/core/interest.h>
-#include <hicn/transport/utils/log.h>
#include <hicn/transport/utils/string_utils.h>
namespace transport {
@@ -67,10 +67,10 @@ class HTTPClientConnectionCallback : interface::ConsumerSocket::ReadCallback {
std::string remote_address =
socket.remote_endpoint().address().to_string();
std::uint16_t remote_port = socket.remote_endpoint().port();
- TRANSPORT_LOG_INFO << "Client " << remote_address << ":"
- << remote_port << "disconnected.";
+ LoggerInfo() << "Client " << remote_address << ":" << remote_port
+ << "disconnected.";
} catch (asio::system_error& e) {
- TRANSPORT_LOG_INFO << "Client disconnected.";
+ LoggerInfo() << "Client disconnected.";
}
consumer_.stop();
@@ -143,17 +143,16 @@ class HTTPClientConnectionCallback : interface::ConsumerSocket::ReadCallback {
if (current_size_ < 1400) {
request_buffer_queue_.emplace_back(std::move(tmp_buffer_));
} else {
- TRANSPORT_LOG_ERROR << "Ignoring client request due to size ("
- << current_size_ << ") > 1400.";
+ LoggerErr() << "Ignoring client request due to size (" << current_size_
+ << ") > 1400.";
session_->close();
current_size_ = 0;
return;
}
if (!consumer_.isRunning()) {
- TRANSPORT_LOG_INFO
- << "Consumer stopped, triggering consume from TCP session "
- "handler..";
+ LoggerInfo() << "Consumer stopped, triggering consume from TCP session "
+ "handler..";
consumeNextRequest();
}
@@ -192,8 +191,7 @@ class HTTPClientConnectionCallback : interface::ConsumerSocket::ReadCallback {
}
void readError(const std::error_code& ec) noexcept {
- TRANSPORT_LOG_ERROR
- << "Error reading from hicn consumer socket. Closing session.";
+ LoggerErr() << "Error reading from hicn consumer socket. Closing session.";
session_->close();
}
@@ -213,10 +211,9 @@ class HTTPClientConnectionCallback : interface::ConsumerSocket::ReadCallback {
session_->send((const uint8_t*)HTTPMessageFastParser::http_cors,
std::strlen(HTTPMessageFastParser::http_cors), [this]() {
auto& socket = session_->socket_;
- TRANSPORT_LOG_INFO
- << "Sent OPTIONS to client "
- << socket.remote_endpoint().address() << ":"
- << socket.remote_endpoint().port();
+ LoggerInfo() << "Sent OPTIONS to client "
+ << socket.remote_endpoint().address()
+ << ":" << socket.remote_endpoint().port();
});
}
} else {
@@ -230,14 +227,13 @@ class HTTPClientConnectionCallback : interface::ConsumerSocket::ReadCallback {
}
/* Route created. Send back a 200 OK to client */
- session_->send((const uint8_t*)reply, std::strlen(reply),
- [this, result]() {
- auto& socket = session_->socket_;
- TRANSPORT_LOG_INFO
- << "Sent " << result << " response to client "
- << socket.remote_endpoint().address() << ":"
- << socket.remote_endpoint().port();
- });
+ session_->send(
+ (const uint8_t*)reply, std::strlen(reply), [this, result]() {
+ auto& socket = session_->socket_;
+ LoggerInfo() << "Sent " << result << " response to client "
+ << socket.remote_endpoint().address() << ":"
+ << socket.remote_endpoint().port();
+ });
});
}
}
@@ -331,8 +327,8 @@ void TcpReceiver::onNewConnection(asio::ip::tcp::socket&& socket) {
void HTTPProxy::setupSignalHandler() {
signals_.async_wait([this](const std::error_code& ec, int signal_number) {
if (!ec) {
- TRANSPORT_LOG_INFO << "Received signal " << signal_number
- << ". Stopping gracefully.";
+ LoggerInfo() << "Received signal " << signal_number
+ << ". Stopping gracefully.";
stop();
}
});
diff --git a/apps/http-proxy/src/http_session.cc b/apps/http-proxy/src/http_session.cc
index 870f188cd..def4c61cf 100644
--- a/apps/http-proxy/src/http_session.cc
+++ b/apps/http-proxy/src/http_session.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,9 +13,9 @@
* limitations under the License.
*/
+#include <hicn/apps/utils/logger.h>
#include <hicn/http-proxy/http_proxy.h>
#include <hicn/transport/utils/branch_prediction.h>
-#include <hicn/transport/utils/log.h>
#include <iostream>
@@ -269,7 +269,7 @@ void HTTPSession::doReadHeader() {
void HTTPSession::tryReconnection() {
if (on_connection_closed_callback_(socket_)) {
if (state_ == ConnectorState::CONNECTED) {
- TRANSPORT_LOG_ERROR << "Connection lost. Trying to reconnect...";
+ LoggerErr() << "Connection lost. Trying to reconnect...";
state_ = ConnectorState::CONNECTING;
is_reconnection_ = true;
io_service_.post([this]() {
@@ -306,11 +306,11 @@ void HTTPSession::doConnect() {
if (is_reconnection_) {
is_reconnection_ = false;
- TRANSPORT_LOG_INFO << "Connection recovered!";
+ LoggerInfo() << "Connection recovered!";
}
} else {
- TRANSPORT_LOG_ERROR << "Impossible to reconnect: " << ec.message();
+ LoggerErr() << "Impossible to reconnect: " << ec.message();
close();
}
});
@@ -330,7 +330,7 @@ void HTTPSession::handleDeadline(const std::error_code &ec) {
if (!ec) {
io_service_.post([this]() {
socket_.close();
- TRANSPORT_LOG_ERROR << "Error connecting. Is the server running?";
+ LoggerErr() << "Error connecting. Is the server running?";
io_service_.stop();
});
}
diff --git a/apps/http-proxy/src/icn_receiver.cc b/apps/http-proxy/src/icn_receiver.cc
index f15851915..c97524906 100644
--- a/apps/http-proxy/src/icn_receiver.cc
+++ b/apps/http-proxy/src/icn_receiver.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,13 +13,13 @@
* limitations under the License.
*/
+#include <hicn/apps/utils/logger.h>
#include <hicn/http-proxy/http_1x_message_fast_parser.h>
#include <hicn/http-proxy/icn_receiver.h>
#include <hicn/http-proxy/utils.h>
#include <hicn/transport/core/interest.h>
#include <hicn/transport/http/default_values.h>
#include <hicn/transport/utils/hash.h>
-#include <hicn/transport/utils/log.h>
#include <functional>
#include <memory>
@@ -55,28 +55,28 @@ AsyncConsumerProducer::AsyncConsumerProducer(
interface::GeneralTransportOptions::OUTPUT_BUFFER_SIZE, cache_size_);
if (ret != SOCKET_OPTION_SET) {
- TRANSPORT_LOG_WARNING << "Warning: output buffer size has not been set.";
+ LoggerWarn() << "Warning: output buffer size has not been set.";
}
ret = producer_socket_.setSocketOption(
interface::GeneralTransportOptions::MANIFEST_MAX_CAPACITY, manifest);
if (ret != SOCKET_OPTION_SET) {
- TRANSPORT_LOG_WARNING << "Warning: impossible to enable signatures.";
+ LoggerWarn() << "Warning: impossible to enable signatures.";
}
ret = producer_socket_.setSocketOption(
interface::GeneralTransportOptions::DATA_PACKET_SIZE, mtu_);
if (ret != SOCKET_OPTION_SET) {
- TRANSPORT_LOG_WARNING << "Warning: mtu has not been set.";
+ LoggerWarn() << "Warning: mtu has not been set.";
}
producer_socket_.registerPrefix(prefix_);
}
void AsyncConsumerProducer::start() {
- TRANSPORT_LOG_INFO << "Starting listening";
+ LoggerInfo() << "Starting listening";
doReceive();
}
@@ -90,8 +90,8 @@ void AsyncConsumerProducer::run() {
void AsyncConsumerProducer::stop() {
io_service_.post([this]() {
- TRANSPORT_LOG_INFO << "Number of requests processed by plugin: "
- << request_counter_;
+ LoggerInfo() << "Number of requests processed by plugin: "
+ << request_counter_;
producer_socket_.stop();
connector_.close();
});
@@ -158,7 +158,7 @@ void AsyncConsumerProducer::publishContent(const uint8_t* data,
uint32_t start_suffix = 0;
if (response_name_queue_.empty()) {
- std::cerr << "Aborting due tue empty request queue" << std::endl;
+ LoggerErr() << "Aborting due tue empty request queue";
abort();
}
@@ -169,16 +169,14 @@ void AsyncConsumerProducer::publishContent(const uint8_t* data,
options.getLifetime());
if (TRANSPORT_EXPECT_FALSE(ret != SOCKET_OPTION_SET)) {
- TRANSPORT_LOG_WARNING
- << "Warning: content object lifetime has not been set.";
+ LoggerWarn() << "Warning: content object lifetime has not been set.";
}
const interface::Name& name = options.getName();
auto it = chunk_number_map_.find(name);
if (it == chunk_number_map_.end()) {
- std::cerr << "Aborting due to response not found in ResposeInfo map."
- << std::endl;
+ LoggerErr() << "Aborting due to response not found in ResposeInfo map.";
abort();
}
diff --git a/apps/ping/CMakeLists.txt b/apps/ping/CMakeLists.txt
index a094cebe3..ab3fdf56d 100644
--- a/apps/ping/CMakeLists.txt
+++ b/apps/ping/CMakeLists.txt
@@ -36,7 +36,9 @@ set(COMPILER_OPTIONS
build_executable(hicn-ping-server
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/ping_server.cc
LINK_LIBRARIES ${PING_LIBRARIES}
- DEPENDS ${DEPENDENCIES}
+ INCLUDE_DIRS
+ PRIVATE ${THIRD_PARTY_INCLUDE_DIRS} ${COMMON_INCLUDE_DIRS}
+ DEPENDS ${DEPENDENCIES} ${THIRD_PARTY_DEPENDENCIES}
COMPONENT ${HICN_APPS}
LINK_FLAGS ${LINK_FLAGS}
COMPILE_OPTIONS ${COMPILER_OPTIONS}
@@ -48,7 +50,9 @@ set(COMPILER_OPTIONS
build_executable(hicn-ping-client
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/ping_client.cc
LINK_LIBRARIES ${PING_LIBRARIES}
- DEPENDS ${DEPENDENCIES}
+ INCLUDE_DIRS
+ PRIVATE ${THIRD_PARTY_INCLUDE_DIRS} ${COMMON_INCLUDE_DIRS}
+ DEPENDS ${DEPENDENCIES} ${THIRD_PARTY_DEPENDENCIES}
COMPONENT ${HICN_APPS}
LINK_FLAGS ${LINK_FLAGS}
COMPILE_OPTIONS ${COMPILER_OPTIONS}
diff --git a/apps/ping/src/ping_client.cc b/apps/ping/src/ping_client.cc
index 6599b74cb..539e84ada 100644
--- a/apps/ping/src/ping_client.cc
+++ b/apps/ping/src/ping_client.cc
@@ -13,6 +13,7 @@
* limitations under the License.
*/
+#include <hicn/apps/utils/logger.h>
#include <hicn/transport/auth/signer.h>
#include <hicn/transport/auth/verifier.h>
#include <hicn/transport/core/global_object_pool.h>
@@ -56,10 +57,7 @@ class Configuration {
std::string traffic_generator_type_;
uint16_t srcPort_ = 9695;
uint16_t dstPort_ = 8080;
- bool verbose_ = false;
- bool dump_ = false;
bool jump_ = false;
- bool quiet_ = false;
uint32_t jump_freq_ = 0;
uint32_t jump_size_ = 0;
uint8_t ttl_ = 64;
@@ -101,7 +99,7 @@ class Client : private interface::Portal::TransportCallback {
virtual ~Client() = default;
void ping() {
- std::cout << "start ping" << std::endl;
+ LoggerInfo() << "Starting ping...";
portal_.getThread().add([this]() {
portal_.connect();
@@ -124,10 +122,10 @@ class Client : private interface::Portal::TransportCallback {
if (verifier_.verifyPacket(&object)) {
auto t1 = utils::SteadyTime::now();
auto dt = utils::SteadyTime::getDurationUs(t0, t1);
- std::cout << "Verification time: " << dt.count() << std::endl;
- std::cout << "<<< Signature Ok." << std::endl;
+ LoggerInfo() << "Verification time: " << dt.count();
+ LoggerInfo() << "<<< Signature Ok.";
} else {
- std::cout << "<<< Signature verification failed!" << std::endl;
+ LoggerErr() << "<<< Signature verification failed!";
}
}
@@ -139,39 +137,38 @@ class Client : private interface::Portal::TransportCallback {
send_timestamps_.erase(it);
}
- if (config_->verbose_) {
- std::cout << "<<< recevied object. " << std::endl;
- std::cout << "<<< interest name: " << interest.getName().getPrefix()
- << " (n_suffixes=" << config_->num_int_manifest_suffixes_ << ")"
- << " src port: " << interest.getSrcPort()
- << " dst port: " << interest.getDstPort() << std::endl;
- std::cout << "<<< object name: " << object.getName()
- << " src port: " << object.getSrcPort()
- << " dst port: " << object.getDstPort() << " path label "
- << object.getPathLabel() << " ("
- << (object.getPathLabel() >> 24) << ")"
- << " TTL: " << (int)object.getTTL() << std::endl;
- } else if (!config_->quiet_) {
- std::cout << "<<< received object. " << std::endl;
- std::cout << "<<< round trip: " << rtt << " [us]" << std::endl;
- std::cout << "<<< interest name: " << interest.getName().getPrefix()
- << std::endl;
- std::cout << "<<< object name: " << object.getName() << std::endl;
- std::cout << "<<< content object size: "
- << object.payloadSize() + object.headerSize() << " [bytes]"
- << std::endl;
+ if (LoggerIsOn(2)) {
+ LoggerInfo() << "<<< recevied object. ";
+ LoggerInfo() << "<<< interest name: " << interest.getName().getPrefix()
+ << " (n_suffixes=" << config_->num_int_manifest_suffixes_
+ << ")"
+ << " src port: " << interest.getSrcPort()
+ << " dst port: " << interest.getDstPort();
+ LoggerInfo() << "<<< object name: " << object.getName()
+ << " src port: " << object.getSrcPort()
+ << " dst port: " << object.getDstPort() << " path label "
+ << object.getPathLabel() << " ("
+ << (object.getPathLabel() >> 24) << ")"
+ << " TTL: " << (int)object.getTTL();
+ } else if (LoggerIsOn(1)) {
+ LoggerInfo() << "<<< received object. ";
+ LoggerInfo() << "<<< round trip: " << rtt << " [us]";
+ LoggerInfo() << "<<< interest name: " << interest.getName().getPrefix();
+
+ LoggerInfo() << "<<< object name: " << object.getName();
+ LoggerInfo() << "<<< content object size: "
+ << object.payloadSize() + object.headerSize() << " [bytes]";
}
- if (config_->dump_) {
- std::cout << "----- interest dump -----" << std::endl;
+ if (LoggerIsOn(3)) {
+ LoggerInfo() << "----- interest dump -----";
interest.dump();
- std::cout << "-------------------------" << std::endl;
- std::cout << "----- object dump -------" << std::endl;
+ LoggerInfo() << "-------------------------";
+ LoggerInfo() << "----- object dump -------";
object.dump();
- std::cout << "-------------------------" << std::endl;
+ LoggerInfo() << "-------------------------";
}
-
- if (!config_->quiet_) std::cout << std::endl;
+ LoggerVerbose(1) << "\n";
received_++;
processed_++;
@@ -181,32 +178,28 @@ class Client : private interface::Portal::TransportCallback {
}
void onTimeout(Interest::Ptr &interest, const Name &name) override {
- if (config_->verbose_) {
- std::cout << "### timeout for " << name
- << " src port: " << interest->getSrcPort()
- << " dst port: " << interest->getDstPort() << std::endl;
- } else if (!config_->quiet_) {
- std::cout << "### timeout for " << name << std::endl;
+ if (LoggerIsOn(2)) {
+ LoggerInfo() << "### timeout for " << name
+ << " src port: " << interest->getSrcPort()
+ << " dst port: " << interest->getDstPort();
+ } else if (LoggerIsOn(1)) {
+ LoggerInfo() << "### timeout for " << name;
}
- if (config_->dump_) {
- std::cout << "----- interest dump -----" << std::endl;
+ if (LoggerIsOn(3)) {
+ LoggerInfo() << "----- interest dump -----";
interest->dump();
- std::cout << "-------------------------" << std::endl;
+ LoggerInfo() << "-------------------------";
}
-
- if (!config_->quiet_) std::cout << std::endl;
+ LoggerVerbose(1) << "\n";
timedout_++;
processed_++;
- if (processed_ >= config_->maxPing_) {
- afterSignal();
- }
+ if (processed_ >= config_->maxPing_) afterSignal();
}
void onError(const std::error_code &ec) override {
- std::cout << "Aborting ping due to internal error: " << ec.message()
- << std::endl;
+ LoggerErr() << "Aborting ping due to internal error: " << ec.message();
afterSignal();
}
@@ -235,18 +228,17 @@ class Client : private interface::Portal::TransportCallback {
interest->setDstPort(config_->dstPort_);
interest->setTTL(config_->ttl_);
- if (config_->verbose_) {
- std::cout << ">>> send interest " << interest->getName()
- << " src port: " << interest->getSrcPort()
- << " dst port: " << interest->getDstPort()
- << " TTL: " << (int)interest->getTTL()
- << " suffixes in manifest: "
- << config_->num_int_manifest_suffixes_ << std::endl;
- } else if (!config_->quiet_) {
- std::cout << ">>> send interest " << interest->getName() << std::endl;
+ if (LoggerIsOn(2)) {
+ LoggerInfo() << ">>> send interest " << interest->getName()
+ << " src port: " << interest->getSrcPort()
+ << " dst port: " << interest->getDstPort()
+ << " TTL: " << (int)interest->getTTL()
+ << " suffixes in manifest: "
+ << config_->num_int_manifest_suffixes_;
+ } else if (LoggerIsOn(1)) {
+ LoggerInfo() << ">>> send interest " << interest->getName();
}
-
- if (!config_->quiet_) std::cout << std::endl;
+ LoggerVerbose(1) << "\n";
send_timestamps_[sequence_number] = utils::SteadyTime::now();
for (uint32_t i = 0; i < config_->num_int_manifest_suffixes_ &&
@@ -258,10 +250,10 @@ class Client : private interface::Portal::TransportCallback {
send_timestamps_[sequence_number] = utils::SteadyTime::now();
}
- if (config_->dump_) {
- std::cout << "----- interest dump -----" << std::endl;
+ if (LoggerIsOn(3)) {
+ LoggerInfo() << "----- interest dump -----";
interest->dump();
- std::cout << "-------------------------" << std::endl;
+ LoggerInfo() << "-------------------------";
}
interest->encodeSuffixes();
@@ -280,10 +272,9 @@ class Client : private interface::Portal::TransportCallback {
}
void afterSignal() {
- std::cout << "Stop ping" << std::endl;
- std::cout << "Sent: " << traffic_generator_->getSentCount()
- << " Received: " << received_ << " Timeouts: " << timedout_
- << std::endl;
+ LoggerInfo() << "Stopping ping...";
+ LoggerInfo() << "Sent: " << traffic_generator_->getSentCount()
+ << " Received: " << received_ << " Timeouts: " << timedout_;
io_service_.stop();
}
@@ -315,45 +306,38 @@ class Client : private interface::Portal::TransportCallback {
};
void help() {
- std::cout << "usage: hicn-consumer-ping [options]" << std::endl;
- std::cout << "PING options" << std::endl;
- std::cout
- << "-i <val> ping interval in microseconds (default 1000000ms)"
- << std::endl;
- std::cout << "-m <val> maximum number of pings to send (default 10)"
- << std::endl;
- std::cout << "-s <val> sorce port (default 9695)" << std::endl;
- std::cout << "-d <val> destination port (default 8080)" << std::endl;
- std::cout << "-t <val> set packet ttl (default 64)" << std::endl;
- std::cout << "-a <val> <pass> set the passphrase and the number of "
- "suffixes in interest manifest (default 0);"
- << std::endl;
- std::cout << " e.g. '-m 6 -a -2' sends two interest (0 and "
- "3) with 2 suffixes each (1,2 and 4,5 respectively)"
- << std::endl;
- std::cout << "HICN options" << std::endl;
- std::cout << "-n <val> hicn name (default b001::1)" << std::endl;
- std::cout
- << "-l <val> interest lifetime in milliseconds (default 500ms)"
- << std::endl;
- std::cout << "OUTPUT options" << std::endl;
- std::cout << "-V verbose, prints statistics about the "
- "messagges sent and received (default false)"
- << std::endl;
- std::cout << "-D dump, dumps sent and received packets "
- "(default false)"
- << std::endl;
- std::cout << "-q quiet, not prints (default false)"
- << std::endl;
- std::cerr << "-z <io_module> IO module to use. Default: hicnlight_module"
- << std::endl;
- std::cerr << "-F <conf_file> Path to optional configuration file for "
- "libtransport"
- << std::endl;
- std::cout << "-b <type> Traffic generator type. Use 'RANDOM' for "
- "random prefixes and suffixes. Default: sequential suffixes."
- << std::endl;
- std::cout << "-H prints this message" << std::endl;
+ LoggerInfo() << "usage: hicn-consumer-ping [options]";
+ LoggerInfo() << "PING options";
+ LoggerInfo() << "-i <val> ping interval in microseconds (default "
+ "1000000ms)";
+ LoggerInfo()
+ << "-m <val> maximum number of pings to send (default 10)";
+ LoggerInfo() << "-s <val> sorce port (default 9695)";
+ LoggerInfo() << "-d <val> destination port (default 8080)";
+ LoggerInfo() << "-t <val> set packet ttl (default 64)";
+ LoggerInfo() << "-a <val> <pass> set the passphrase and the number of "
+ "suffixes in interest manifest (default 0);";
+ LoggerInfo()
+ << " e.g. '-m 6 -a -2' sends two interest (0 and "
+ "3) with 2 suffixes each (1,2 and 4,5 respectively)";
+ LoggerInfo() << "HICN options";
+ LoggerInfo() << "-n <val> hicn name (default b001::1)";
+ LoggerInfo()
+ << "-l <val> interest lifetime in milliseconds (default "
+ "500ms)";
+ LoggerInfo() << "OUTPUT options";
+ LoggerInfo() << "-V verbose, prints statistics about the "
+ "messagges sent and received (default false)";
+ LoggerInfo() << "-D dump, dumps sent and received packets "
+ "(default false)";
+ LoggerInfo() << "-q quiet, not prints (default false)";
+ LoggerInfo()
+ << "-z <io_module> IO module to use. Default: hicnlight_module";
+ LoggerInfo() << "-F <conf_file> Path to optional configuration file for "
+ "libtransport";
+ LoggerInfo() << "-b <type> Traffic generator type. Use 'RANDOM' for "
+ "random prefixes and suffixes. Default: sequential suffixes.";
+ LoggerInfo() << "-H prints this message";
}
int start(int argc, char *argv[]) {
@@ -372,7 +356,7 @@ int start(int argc, char *argv[]) {
transport::interface::global_config::IoModuleConfiguration io_config;
io_config.name = "hicnlight_module";
- while ((opt = getopt(argc, argv, "a:b:j::t:i:m:s:d:n:l:f:c:SAOqVDHz:F:")) !=
+ while ((opt = getopt(argc, argv, "a:b:j::t:i:m:s:d:n:l:f:c:SAOHz:F:")) !=
-1) {
switch (opt) {
case 'a':
@@ -406,17 +390,6 @@ int start(int argc, char *argv[]) {
case 'l':
c->interestLifetime_ = std::stoi(optarg);
break;
- case 'V':
- c->verbose_ = true;
- break;
- case 'D':
- c->dump_ = true;
- break;
- case 'q':
- c->quiet_ = true;
- c->verbose_ = false;
- c->dump_ = false;
- break;
case 'c':
c->certificate_ = std::string(optarg);
break;
@@ -449,9 +422,8 @@ int start(int argc, char *argv[]) {
ping->ping();
auto t1 = std::chrono::steady_clock::now();
- std::cout << "Elapsed time: "
- << utils::SteadyTime::getDurationMs(t0, t1).count() << "ms"
- << std::endl;
+ LoggerInfo() << "Elapsed time: "
+ << utils::SteadyTime::getDurationMs(t0, t1).count() << "ms";
#ifdef _WIN32
WSACleanup();
diff --git a/apps/ping/src/ping_server.cc b/apps/ping/src/ping_server.cc
index 325ef675c..b2806ba64 100644
--- a/apps/ping/src/ping_server.cc
+++ b/apps/ping/src/ping_server.cc
@@ -21,6 +21,7 @@
#include <openssl/applink.c>
#endif
+#include <hicn/apps/utils/logger.h>
#include <hicn/transport/auth/signer.h>
#include <hicn/transport/auth/verifier.h>
#include <hicn/transport/core/content_object.h>
@@ -53,19 +54,19 @@ class CallbackContainer {
content_object->setDstPort(interest.getSrcPort());
content_object->setTTL(ttl_);
- if (verbose_) {
- std::cout << ">>> send object " << content_object->getName()
- << " src port: " << content_object->getSrcPort()
- << " dst port: " << content_object->getDstPort()
- << " TTL: " << (int)content_object->getTTL() << std::endl;
- } else if (!quiet_) {
- std::cout << ">>> send object " << content_object->getName() << std::endl;
+ if (LoggerIsOn(2)) {
+ LoggerInfo() << ">>> send object " << content_object->getName()
+ << " src port: " << content_object->getSrcPort()
+ << " dst port: " << content_object->getDstPort()
+ << " TTL: " << (int)content_object->getTTL();
+ } else if (LoggerIsOn(1)) {
+ LoggerInfo() << ">>> send object " << content_object->getName();
}
- if (dump_) {
- std::cout << "----- object dump -----" << std::endl;
+ if (LoggerIsOn(3)) {
+ LoggerInfo() << "----- object dump -----";
content_object->dump();
- std::cout << "-----------------------" << std::endl;
+ LoggerInfo() << "-----------------------";
}
if (sign_ && signer_) signer_->signPacket(content_object.get());
@@ -73,16 +74,13 @@ class CallbackContainer {
}
public:
- CallbackContainer(const Name &prefix, uint32_t object_size, bool verbose,
- bool dump, bool quiet, uint8_t ttl, auth::Signer *signer,
- bool sign, std::string passphrase, uint32_t lifetime)
+ CallbackContainer(const Name &prefix, uint32_t object_size, uint8_t ttl,
+ auth::Signer *signer, bool sign, std::string passphrase,
+ uint32_t lifetime)
: buffer_(object_size, 'X'),
content_objects_((std::uint32_t)(1 << log2_content_object_buffer_size)),
mask_((std::uint16_t)(1 << log2_content_object_buffer_size) - 1),
content_objects_index_(0),
- verbose_(verbose),
- dump_(dump),
- quiet_(quiet),
ttl_(ttl),
signer_(signer),
sign_(sign) {
@@ -117,28 +115,27 @@ class CallbackContainer {
if (verifier_->verifyPacket(&interest)) {
auto t1 = utils::SteadyTime::now();
auto dt = utils::SteadyTime::getDurationUs(t0, t1);
- std::cout << "Verification time: " << dt.count() << std::endl;
- std::cout << "<<< Signature Ok." << std::endl;
+ LoggerInfo() << "Verification time: " << dt.count();
+ LoggerInfo() << "<<< Signature Ok.";
} else {
- std::cout << "<<< Signature verification failed!" << std::endl;
+ LoggerErr() << "<<< Signature verification failed!";
}
}
- if (verbose_) {
- std::cout << "<<< received interest " << interest.getName()
- << " src port: " << interest.getSrcPort()
- << " dst port: " << interest.getDstPort()
- << "TTL: " << (int)interest.getTTL()
- << " suffixes in manifest: " << interest.numberOfSuffixes()
- << std::endl;
- } else if (!quiet_) {
- std::cout << "<<< received interest " << interest.getName() << std::endl;
+ if (LoggerIsOn(2)) {
+ LoggerInfo() << "<<< received interest " << interest.getName()
+ << " src port: " << interest.getSrcPort()
+ << " dst port: " << interest.getDstPort()
+ << "TTL: " << (int)interest.getTTL()
+ << " suffixes in manifest: " << interest.numberOfSuffixes();
+ } else if (LoggerIsOn(1)) {
+ LoggerInfo() << "<<< received interest " << interest.getName();
}
- if (dump_) {
- std::cout << "----- interest dump -----" << std::endl;
+ if (LoggerIsOn(3)) {
+ LoggerInfo() << "----- interest dump -----";
interest.dump();
- std::cout << "-------------------------" << std::endl;
+ LoggerInfo() << "-------------------------";
}
if (!interest.isValid()) throw std::runtime_error("Bad interest format");
@@ -160,7 +157,7 @@ class CallbackContainer {
}
}
- if (!quiet_) std::cout << std::endl;
+ LoggerVerbose(1) << "\n";
}
private:
@@ -168,9 +165,6 @@ class CallbackContainer {
std::vector<std::shared_ptr<ContentObject>> content_objects_;
std::uint16_t mask_;
std::uint16_t content_objects_index_;
- bool verbose_;
- bool dump_;
- bool quiet_;
uint8_t ttl_;
auth::Signer *signer_;
bool sign_;
@@ -178,32 +172,27 @@ class CallbackContainer {
};
void help() {
- std::cout << "usage: hicn-preoducer-ping [options]" << std::endl;
- std::cout << "PING options" << std::endl;
- std::cout << "-s <val> object content size (default 1350B)"
- << std::endl;
- std::cout << "-n <val> hicn name (default b001::/64)" << std::endl;
- std::cout << "-l data lifetime" << std::endl;
- std::cout << "-t set ttl (default 64)" << std::endl;
- std::cout << "OUTPUT options" << std::endl;
- std::cout << "-V verbose, prints statistics about the "
- "messagges sent "
- " and received (default false)"
- << std::endl;
- std::cout << "-D dump, dumps sent and received packets "
- "(default false)"
- << std::endl;
- std::cout << "-q quiet, not prints (default false)"
- << std::endl;
- std::cerr << "-z <io_module> IO module to use. Default: hicnlight_module"
- << std::endl;
- std::cerr << "-F <conf_file> Path to optional configuration file for "
- "libtransport"
- << std::endl;
+ LoggerInfo() << "usage: hicn-preoducer-ping [options]";
+ LoggerInfo() << "PING options";
+ LoggerInfo() << "-s <val> object content size (default 1350B)";
+ LoggerInfo() << "-n <val> hicn name (default b001::/64)";
+ LoggerInfo() << "-l data lifetime";
+ LoggerInfo() << "-t set ttl (default 64)";
+ LoggerInfo() << "OUTPUT options";
+ LoggerInfo() << "-V verbose, prints statistics about the "
+ "messagges sent "
+ " and received (default false)";
+ LoggerInfo() << "-D dump, dumps sent and received packets "
+ "(default false)";
+ LoggerInfo() << "-q quiet, not prints (default false)";
+ LoggerInfo()
+ << "-z <io_module> IO module to use. Default: hicnlight_module";
+ LoggerInfo() << "-F <conf_file> Path to optional configuration file for "
+ "libtransport";
#ifndef _WIN32
- std::cout << "-d daemon mode" << std::endl;
+ LoggerInfo() << "-d daemon mode";
#endif
- std::cout << "-H prints this message" << std::endl;
+ LoggerInfo() << "-H prints this message";
}
int main(int argc, char **argv) {
@@ -216,9 +205,6 @@ int main(int argc, char **argv) {
#endif
std::string name_prefix = "b001::0/64";
std::string delimiter = "/";
- bool verbose = false;
- bool dump = false;
- bool quiet = false;
uint32_t object_size = 1250;
uint8_t ttl = 64;
std::string keystore_path = "./rsa_crypto_material.p12";
@@ -233,9 +219,9 @@ int main(int argc, char **argv) {
int opt;
#ifndef _WIN32
- while ((opt = getopt(argc, argv, "a:s:n:t:l:qfrVDdHk:p:z:F:")) != -1) {
+ while ((opt = getopt(argc, argv, "a:s:n:t:l:frdHk:p:z:F:")) != -1) {
#else
- while ((opt = getopt(argc, argv, "s:n:t:l:qfrVDHk:p:z:F:")) != -1) {
+ while ((opt = getopt(argc, argv, "s:n:t:l:frHk:p:z:F:")) != -1) {
#endif
switch (opt) {
case 'a':
@@ -253,17 +239,6 @@ int main(int argc, char **argv) {
case 'l':
data_lifetime = std::stoi(optarg);
break;
- case 'V':
- verbose = true;
- break;
- case 'D':
- dump = true;
- break;
- case 'q':
- verbose = false;
- dump = false;
- quiet = true;
- break;
#ifndef _WIN32
case 'd':
daemon = true;
@@ -319,13 +294,12 @@ int main(int argc, char **argv) {
if (sign) {
signer = std::make_unique<auth::AsymmetricSigner>(keystore_path,
keystore_password);
- stubs =
- new CallbackContainer(n, object_size, verbose, dump, quiet, ttl,
- signer.get(), sign, passphrase, data_lifetime);
+ stubs = new CallbackContainer(n, object_size, ttl, signer.get(), sign,
+ passphrase, data_lifetime);
} else {
auth::Signer *signer = nullptr;
- stubs = new CallbackContainer(n, object_size, verbose, dump, quiet, ttl,
- signer, sign, passphrase, data_lifetime);
+ stubs = new CallbackContainer(n, object_size, ttl, signer, sign, passphrase,
+ data_lifetime);
}
ProducerSocket p;
@@ -346,7 +320,7 @@ int main(int argc, char **argv) {
asio::signal_set signal_set(io_service, SIGINT);
signal_set.async_wait(
[&p, &io_service](const std::error_code &, const int &) {
- std::cout << "STOPPING!!" << std::endl;
+ LoggerInfo() << "STOPPING!!";
p.stop();
io_service.stop();
});
diff --git a/docs/source/utils.md b/docs/source/utils.md
index d6044821a..42e407ff0 100644
--- a/docs/source/utils.md
+++ b/docs/source/utils.md
@@ -42,9 +42,6 @@ Options:
-l <lifetime> = data lifetime
-r = always reply with a reset flag (default false)
-t <ttl> = set ttl (default 64)
--V = verbose, prints statistics about the messagges sent and received (default false)
--D = dump, dumps sent and received packets (default false)
--q = quiet, no printing (default false)
-d = daemon mode
-H = help
```
@@ -74,9 +71,6 @@ Options:
-A = send always ack messages (default false)
-n <hicn_name> = hicn name (default b001::1)
-l <lifetime> = interest lifetime in milliseconds (default 500ms)
--V = verbose, prints statistics about the messagges sent and received (default false)
--D = dump, dumps sent and received packets (default false)
--q = quiet, no printing (default false)
-H = help
```
diff --git a/libtransport/src/auth/crypto_hash.cc b/libtransport/src/auth/crypto_hash.cc
index 08be47aff..bc2d5248e 100644
--- a/libtransport/src/auth/crypto_hash.cc
+++ b/libtransport/src/auth/crypto_hash.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,11 +13,10 @@
* limitations under the License.
*/
+#include <glog/logging.h>
#include <hicn/transport/auth/crypto_hash.h>
#include <hicn/transport/core/global_object_pool.h>
-#include "glog/logging.h"
-
namespace transport {
namespace auth {
@@ -137,23 +136,21 @@ void CryptoHash::setType(CryptoHashType hash_type) {
void CryptoHash::display() {
switch (digest_type_) {
case CryptoHashType::SHA256:
- std::cout << "SHA256";
+ LOG(INFO) << "SHA256: " << getStringDigest();
break;
case CryptoHashType::SHA512:
- std::cout << "SHA512";
+ LOG(INFO) << "SHA512: " << getStringDigest();
break;
case CryptoHashType::BLAKE2S256:
- std::cout << "BLAKE2s256";
+ LOG(INFO) << "BLAKE2s256: " << getStringDigest();
break;
case CryptoHashType::BLAKE2B512:
- std::cout << "BLAKE2b512";
+ LOG(INFO) << "BLAKE2b512: " << getStringDigest();
break;
default:
- std::cout << "UNKNOWN";
+ LOG(INFO) << "UNKNOWN: " << getStringDigest();
break;
}
-
- std::cout << ": " << getStringDigest() << std::endl;
}
void CryptoHash::reset() {
diff --git a/libtransport/src/auth/signer.cc b/libtransport/src/auth/signer.cc
index 500732ba1..484180108 100644
--- a/libtransport/src/auth/signer.cc
+++ b/libtransport/src/auth/signer.cc
@@ -200,8 +200,7 @@ CryptoHashType Signer::getHashType() const {
}
void Signer::display() {
- std::cout << getStringSuite(suite_) << ": " << getStringSignature()
- << std::endl;
+ LOG(INFO) << getStringSuite(suite_) << ": " << getStringSignature();
}
// ---------------------------------------------------------
diff --git a/tests/2-nodes-hicn-light.yml b/tests/2-nodes-hicn-light.yml
index c0e22f9b7..be715e333 100644
--- a/tests/2-nodes-hicn-light.yml
+++ b/tests/2-nodes-hicn-light.yml
@@ -60,6 +60,6 @@ services:
hiperf -q -z hicnlight_module -S -R -B 4000kbps ${RTC_PRODUCER} -P 2 &
hiperf -q -z hicnlight_module -S ${RAAQM_PRODUCER}/128 &
- hicn-ping-server -q -z hicnlight_module -s 0 -n ${PING_PRODUCER}/128 &
+ hicn-ping-server -z hicnlight_module -s 0 -n ${PING_PRODUCER}/128 &
tail -f /dev/null
diff --git a/tests/2-nodes-vpp-bridge.yml b/tests/2-nodes-vpp-bridge.yml
index f162c7b46..55349f798 100644
--- a/tests/2-nodes-vpp-bridge.yml
+++ b/tests/2-nodes-vpp-bridge.yml
@@ -98,6 +98,6 @@ services:
sleep 1
sudo hiperf -q -S -z memif_module ${RAAQM_PRODUCER}/128 &
sleep 1
- sudo hicn-ping-server -q -s 0 -n ${PING_PRODUCER}/128 -z memif_module &
+ sudo hicn-ping-server -s 0 -n ${PING_PRODUCER}/128 -z memif_module &
tail -f /dev/null
diff --git a/tests/2-nodes-vpp-memif-replication.yml b/tests/2-nodes-vpp-memif-replication.yml
index 54b9840ad..3e22ca99e 100644
--- a/tests/2-nodes-vpp-memif-replication.yml
+++ b/tests/2-nodes-vpp-memif-replication.yml
@@ -120,6 +120,6 @@ services:
sleep 5
sudo hiperf -q -S -z memif_module ${RAAQM_PRODUCER}/128 &
sleep 5
- sudo hicn-ping-server -q -s 0 -n ${PING_PRODUCER}/128 -z memif_module &
+ sudo hicn-ping-server -s 0 -n ${PING_PRODUCER}/128 -z memif_module &
tail -f /dev/null
diff --git a/tests/2-nodes-vpp-memif.yml b/tests/2-nodes-vpp-memif.yml
index ace522dc6..e78552113 100644
--- a/tests/2-nodes-vpp-memif.yml
+++ b/tests/2-nodes-vpp-memif.yml
@@ -111,6 +111,6 @@ services:
sleep 5
sudo hiperf -q -S -z memif_module ${RAAQM_PRODUCER}/128 &
sleep 5
- sudo hicn-ping-server -q -s 0 -n ${PING_PRODUCER}/128 -z memif_module &
+ sudo hicn-ping-server -s 0 -n ${PING_PRODUCER}/128 -z memif_module &
tail -f /dev/null
diff --git a/tests/config.sh b/tests/config.sh
index 16000bff6..1420ef49e 100755
--- a/tests/config.sh
+++ b/tests/config.sh
@@ -15,7 +15,7 @@ DOCKERFILE=${DOCKERFILE:-Dockerfile.dev}
BUILD_SOFTWARE=${BUILD_SOFTWARE:-1}
set +a
-HIPERF_CMD_RTC="/usr/bin/hiperf -q -n 50 -C -H -R ${RTC_PRODUCER} -P 2"
+HIPERF_CMD_RTC="ENABLE_LOG_PREFIX=OFF /usr/bin/hiperf -q -n 50 -C -H -R ${RTC_PRODUCER} -P 2"
HIPERF_CMD_MEMIF_RTC="${HIPERF_CMD_RTC} -z memif_module"
POSTPROCESS_COMMAND_RAAQM_RTC='tail -n +3 | \
tr -s " " | \
@@ -33,12 +33,12 @@ POSTPROCESS_COMMAND_RAAQM_RTC='tail -n +3 | \
print int(a[0]), int(a[n-1]), int(s/n) \
}"'
-HIPERF_CMD_RAAQM="/usr/bin/hiperf -q -n 50 -i 200 -C -H ${RAAQM_PRODUCER}"
+HIPERF_CMD_RAAQM="ENABLE_LOG_PREFIX=OFF /usr/bin/hiperf -q -n 50 -i 200 -C -H ${RAAQM_PRODUCER}"
HIPERF_CMD_CBR="${HIPERF_CMD_RAAQM} -W 350 -M 0"
HIPERF_CMD_MEMIF_RAAQM="${HIPERF_CMD_RAAQM} -z memif_module"
HIPERF_CMD_MEMIF_CBR="${HIPERF_CMD_CBR} -z memif_module"
-PING_CMD="hicn-ping-client -m 50 -i 200000 -n ${PING_PRODUCER}"
+PING_CMD="ENABLE_LOG_PREFIX=OFF LOG_LEVEL=1 hicn-ping-client -m 50 -i 200000 -n ${PING_PRODUCER}"
PING_CMD_MEMIF="${PING_CMD} -z memif_module"
POSTPROCESS_COMMAND_PING='grep trip | \
cut -f 4 -d " " | \
@@ -69,25 +69,25 @@ for test in $(compgen -A variable | grep TEST_); do
done
declare -A tests=(
- ["hicn-light-rtc"]="${HIPERF_CMD_RTC} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-bridge-rtc"]="${HIPERF_CMD_MEMIF_RTC} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-memif-rtc"]="${HIPERF_CMD_MEMIF_RTC} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-memif-replication-rtc"]="${HIPERF_CMD_MEMIF_RTC} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
-
- ["hicn-light-requin"]="${HIPERF_CMD_RAAQM} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-bridge-requin"]="${HIPERF_CMD_MEMIF_RAAQM} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-memif-requin"]="${HIPERF_CMD_MEMIF_RAAQM} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-memif-replication-requin"]="${HIPERF_CMD_MEMIF_RAAQM} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
-
- ["hicn-light-cbr"]="${HIPERF_CMD_CBR} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-bridge-cbr"]="${HIPERF_CMD_MEMIF_CBR} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-memif-cbr"]="${HIPERF_CMD_MEMIF_CBR} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
- ["vpp-memif-replication-cbr"]="${HIPERF_CMD_MEMIF_CBR} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
-
- ["hicn-light-latency"]="${PING_CMD} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
- ["vpp-bridge-latency"]="${PING_CMD_MEMIF} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
- ["vpp-memif-latency"]="${PING_CMD_MEMIF} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
- ["vpp-memif-replication-latency"]="${PING_CMD_MEMIF} | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
+ ["hicn-light-rtc"]="${HIPERF_CMD_RTC} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-bridge-rtc"]="${HIPERF_CMD_MEMIF_RTC} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-memif-rtc"]="${HIPERF_CMD_MEMIF_RTC} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-memif-replication-rtc"]="${HIPERF_CMD_MEMIF_RTC} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+
+ ["hicn-light-requin"]="${HIPERF_CMD_RAAQM} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-bridge-requin"]="${HIPERF_CMD_MEMIF_RAAQM} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-memif-requin"]="${HIPERF_CMD_MEMIF_RAAQM} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-memif-replication-requin"]="${HIPERF_CMD_MEMIF_RAAQM} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+
+ ["hicn-light-cbr"]="${HIPERF_CMD_CBR} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-bridge-cbr"]="${HIPERF_CMD_MEMIF_CBR} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-memif-cbr"]="${HIPERF_CMD_MEMIF_CBR} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+ ["vpp-memif-replication-cbr"]="${HIPERF_CMD_MEMIF_CBR} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_RAAQM_RTC}"
+
+ ["hicn-light-latency"]="${PING_CMD} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
+ ["vpp-bridge-latency"]="${PING_CMD_MEMIF} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
+ ["vpp-memif-latency"]="${PING_CMD_MEMIF} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
+ ["vpp-memif-replication-latency"]="${PING_CMD_MEMIF} 2>&1 | tee >(>&2 cat) | ${POSTPROCESS_COMMAND_PING}"
)
declare -A link_model=(
@@ -473,20 +473,20 @@ function test_ping_manifest() {
sleep 1
# 2 interests w/ 3 suffixes each (1 in header + 2 in manifest)
- docker exec forwarder bash -c 'hicn-ping-client -m 6 -a 2 intmanifest | grep "Sent" >>/tmp/ping_client.log'
+ docker exec forwarder bash -c 'hicn-ping-client -m 6 -a 2 intmanifest 2>&1 | grep "Sent" >>/tmp/ping_client.log'
sleep 1
# 2 interests w/ 3 suffixes each + 1 single interest
- docker exec forwarder bash -c 'hicn-ping-client -m 7 -a 2 intmanifest | grep "Sent" >>/tmp/ping_client.log'
+ docker exec forwarder bash -c 'hicn-ping-client -m 7 -a 2 intmanifest 2>&1 | grep "Sent" >>/tmp/ping_client.log'
sleep 1
# 2 interests w/ 3 suffixes each + 1 interest w/ 2 suffixes
- docker exec forwarder bash -c 'hicn-ping-client -m 8 -a 2 intmanifest | grep "Sent" >>/tmp/ping_client.log'
+ docker exec forwarder bash -c 'hicn-ping-client -m 8 -a 2 intmanifest 2>&1 | grep "Sent" >>/tmp/ping_client.log'
sleep 1
# 2 interests w/ 3 suffixes each + 1 single interest,
# using random prefix/suffix generation
- docker exec forwarder bash -c 'hicn-ping-client -m 7 -a 2 intmanifest -b RANDOM | grep "Sent" >>/tmp/ping_client.log'
+ docker exec forwarder bash -c 'hicn-ping-client -m 7 -a 2 intmanifest -b RANDOM 2>&1 | grep "Sent" >>/tmp/ping_client.log'
# No 'failed' expected
ping_server_logs=$(docker exec forwarder cat /tmp/ping_server.log)
@@ -510,7 +510,7 @@ function test_ping_wrong_signature() {
sleep 1
# Signature mismatch ('intmamifest' on server vs 'wrong_sign' on client)
- docker exec forwarder bash -c 'hicn-ping-client -m 6 -a 2 wrong_sig | grep "Sent" >>/tmp/ping_client.log'
+ docker exec forwarder bash -c 'hicn-ping-client -m 6 -a 2 wrong_sig'
# 'failed' expected
ping_server_logs=$(docker exec forwarder cat /tmp/ping_server.log)
@@ -523,7 +523,7 @@ function test_ping_wrong_signature() {
function test_ping_no_server() {
# Server not started to check for ping client timeout
- docker exec forwarder bash -c 'hicn-ping-client -m 6 | grep "Sent" >>/tmp/ping_client.log'
+ docker exec forwarder bash -c 'hicn-ping-client -m 6 2>&1 | grep "Sent" >/tmp/ping_client.log'
# 'Timeouts: 6' expected
ping_client_logs=$(docker exec forwarder cat /tmp/ping_client.log)