aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/src/hicn/transport/core/memif_connector.cc
diff options
context:
space:
mode:
authorMauro Sardara <msardara@cisco.com>2019-03-07 18:34:52 +0100
committerMauro Sardara <msardara@cisco.com>2019-03-08 09:33:21 +0000
commit6922da2298b07d797029da4d40368adf12546639 (patch)
tree12e9c21553c84d4740fe0bb1d5c88c263e50d714 /libtransport/src/hicn/transport/core/memif_connector.cc
parentb980b4384d610e64e4c8bdd749a6e8fb0ebd5117 (diff)
[HICN-85] Added state to connectors.
Change-Id: I26d1b37fec4a2482b97a80fa5648f243745908f7 Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'libtransport/src/hicn/transport/core/memif_connector.cc')
-rw-r--r--libtransport/src/hicn/transport/core/memif_connector.cc36
1 files changed, 15 insertions, 21 deletions
diff --git a/libtransport/src/hicn/transport/core/memif_connector.cc b/libtransport/src/hicn/transport/core/memif_connector.cc
index 863e1aa20..f9695800b 100644
--- a/libtransport/src/hicn/transport/core/memif_connector.cc
+++ b/libtransport/src/hicn/transport/core/memif_connector.cc
@@ -61,15 +61,15 @@ MemifConnector::MemifConnector(PacketReceivedCallback &&receive_callback,
memif_worker_(nullptr),
timer_set_(false),
send_timer_(std::make_unique<utils::FdDeadlineTimer>(event_reactor_)),
+ disconnect_timer_(
+ std::make_unique<utils::FdDeadlineTimer>(event_reactor_)),
io_service_(io_service),
packet_counter_(0),
memif_connection_(std::make_unique<memif_connection_t>()),
tx_buf_counter_(0),
- is_connecting_(true),
is_reconnection_(false),
data_available_(false),
enable_burst_(false),
- closed_(false),
app_name_(app_name),
socket_filename_("") {
std::call_once(MemifConnector::flag_, &MemifConnector::init, this);
@@ -89,6 +89,7 @@ void MemifConnector::init() {
void MemifConnector::connect(uint32_t memif_id, long memif_mode) {
TRANSPORT_LOGI("Creating memif");
+ state_ = ConnectorState::CONNECTING;
memif_id_ = memif_id;
socket_filename_ = "/run/vpp/memif.sock";
@@ -97,7 +98,7 @@ void MemifConnector::connect(uint32_t memif_id, long memif_mode) {
work_ = std::make_unique<asio::io_service::work>(io_service_);
- while (is_connecting_) {
+ while (state_ != ConnectorState::CONNECTED) {
MemifConnector::main_event_reactor_.runOneEvent();
}
@@ -140,7 +141,7 @@ int MemifConnector::createMemif(uint32_t index, uint8_t mode, char *s) {
args.mode = memif_interface_mode_t::MEMIF_INTERFACE_MODE_IP;
args.socket_filename = (uint8_t *)socket_filename_.c_str();
- TRANSPORT_LOGI("Socket filename: %s", args.socket_filename);
+ TRANSPORT_LOGD("Socket filename: %s", args.socket_filename);
args.interface_id = index;
/* last argument for memif_create (void * private_ctx) is used by user
@@ -297,7 +298,7 @@ int MemifConnector::txBurst(uint16_t qid) {
void MemifConnector::sendCallback(const std::error_code &ec) {
timer_set_ = false;
- if (TRANSPORT_EXPECT_TRUE(!ec && !is_connecting_)) {
+ if (TRANSPORT_EXPECT_TRUE(!ec && state_ == ConnectorState::CONNECTED)) {
doSend();
}
}
@@ -315,8 +316,8 @@ void MemifConnector::processInputBuffer() {
int MemifConnector::onConnect(memif_conn_handle_t conn, void *private_ctx) {
TRANSPORT_LOGI("memif connected!\n");
MemifConnector *connector = (MemifConnector *)private_ctx;
+ connector->state_ = ConnectorState::CONNECTED;
memif_refill_queue(conn, 0, -1, 0);
- connector->is_connecting_ = false;
return 0;
}
@@ -326,7 +327,7 @@ int MemifConnector::onConnect(memif_conn_handle_t conn, void *private_ctx) {
int MemifConnector::onDisconnect(memif_conn_handle_t conn, void *private_ctx) {
TRANSPORT_LOGI("memif disconnected!");
MemifConnector *connector = (MemifConnector *)private_ctx;
- // TRANSPORT_LOGI ("Packet received: %u", connector->packet_counter_);
+ connector->state_ = ConnectorState::CLOSED;
TRANSPORT_LOGI("Packet to process: %u",
connector->memif_connection_->tx_buf_num);
return 0;
@@ -390,10 +391,6 @@ int MemifConnector::onInterrupt(memif_conn_handle_t conn, void *private_ctx,
TRANSPORT_LOGD("freed %d buffers. %u/%u alloc/free buffers", rx, rx,
MAX_MEMIF_BUFS - rx);
-
- // if (connector->enable_burst_) {
- // connector->doSend();
- // }
} while (ret_val == MEMIF_ERR_NOBUF);
connector->io_service_.post(
@@ -415,15 +412,17 @@ error:
}
void MemifConnector::close() {
- if (!closed_) {
- closed_ = true;
- event_reactor_.stop();
- work_.reset();
+ if (state_ != ConnectorState::CLOSED) {
+ disconnect_timer_->expiresFromNow(std::chrono::microseconds(50));
+ disconnect_timer_->asyncWait([this](const std::error_code &ec) {
+ deleteMemif();
+ event_reactor_.stop();
+ work_.reset();
+ });
if (memif_worker_ && memif_worker_->joinable()) {
memif_worker_->join();
TRANSPORT_LOGD("Memif worker joined");
- deleteMemif();
} else {
TRANSPORT_LOGD("Memif worker not joined");
}
@@ -496,11 +495,6 @@ int MemifConnector::doSend() {
return 0;
}
-void MemifConnector::state() {
- TRANSPORT_LOGD("Event reactor map: %zu", event_reactor_.mapSize());
- TRANSPORT_LOGD("Output buffer %zu", output_buffer_.size());
-}
-
void MemifConnector::send(const uint8_t *packet, std::size_t len,
const PacketSentCallback &packet_sent) {}