Adding mutex to protect the tft_filter map.

master
Pedro Alvarez 6 years ago committed by Andre Puschmann
parent 71212dd447
commit 6d05265d92

@ -22,15 +22,16 @@
#ifndef SRSUE_GW_H
#define SRSUE_GW_H
#include <net/if.h>
#include "gw_metrics.h"
#include "srslte/common/buffer_pool.h"
#include "srslte/common/log.h"
#include "srslte/common/common.h"
#include "srslte/common/interfaces_common.h"
#include "srslte/interfaces/ue_interfaces.h"
#include "srslte/common/log.h"
#include "srslte/common/threads.h"
#include "gw_metrics.h"
#include "srslte/interfaces/ue_interfaces.h"
#include "tft_packet_filter.h"
#include <mutex>
#include <net/if.h>
namespace srsue {
@ -106,6 +107,7 @@ private:
uint32_t mbsfn_ports[SRSLTE_N_MCH_LCIDS]; // Target ports for MBSFN data
// TFT
std::mutex tft_mutex;
typedef std::map<uint16_t, tft_packet_filter_t> tft_filter_map_t;
tft_filter_map_t tft_filter_map;

@ -223,6 +223,8 @@ int gw::apply_traffic_flow_template(const uint8_t&
const uint8_t& lcid,
const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft)
{
int err = SRSLTE_SUCCESS;
tft_mutex.lock();
switch (tft->tft_op_code) {
case LIBLTE_MME_TFT_OPERATION_CODE_CREATE_NEW_TFT:
for (int i = 0; i < tft->packet_filter_list_size; i++) {
@ -231,15 +233,17 @@ int gw::apply_traffic_flow_template(const uint8_t&
auto it = tft_filter_map.insert(std::make_pair(filter.eval_precedence, filter));
if (it.second == false) {
gw_log->error("Error inserting TFT Packet Filter\n");
return SRSLTE_ERROR_CANT_START;
err = SRSLTE_ERROR_CANT_START;
break;
}
}
break;
default:
gw_log->error("Unhandled TFT OP code\n");
return SRSLTE_ERROR_CANT_START;
err = SRSLTE_ERROR_CANT_START;
}
return SRSLTE_SUCCESS;
tft_mutex.unlock();
return err;
}
/*******************************************************************************
@ -354,7 +358,7 @@ void gw::run_thread()
uint8_t gw::check_tft_filter_match(const srslte::unique_byte_buffer_t& pdu) {
uint8_t lcid = default_lcid;
if(!tft_filter_map.empty()){
tft_mutex.lock();
for (std::pair<const uint16_t, tft_packet_filter_t>& filter_pair : tft_filter_map) {
bool match = filter_pair.second.match(pdu);
if (match) {
@ -363,7 +367,7 @@ uint8_t gw::check_tft_filter_match(const srslte::unique_byte_buffer_t& pdu) {
break;
}
}
}
tft_mutex.unlock();
return lcid;
}

Loading…
Cancel
Save