mirror of https://github.com/PentHertz/srsLTE.git
remove hard-coded LCID for dedicated bearer in GW
This commit is contained in:
parent
7a184a8cd8
commit
2b7b4d0e7e
|
@ -98,7 +98,8 @@ class gw_interface_nas
|
|||
{
|
||||
public:
|
||||
virtual int setup_if_addr(uint32_t lcid, uint8_t pdn_type, uint32_t ip_addr, uint8_t* ipv6_if_id, char* err_str) = 0;
|
||||
virtual int apply_traffic_flow_template(uint8_t eps_bearer_id,
|
||||
virtual int apply_traffic_flow_template(const uint8_t& eps_bearer_id,
|
||||
const uint8_t& lcid,
|
||||
const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft) = 0;
|
||||
};
|
||||
|
||||
|
|
|
@ -60,7 +60,9 @@ public:
|
|||
|
||||
// NAS interface
|
||||
int setup_if_addr(uint32_t lcid, uint8_t pdn_type, uint32_t ip_addr, uint8_t* ipv6_if_addr, char* err_str);
|
||||
int apply_traffic_flow_template(uint8_t eps_bearer_id, const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft);
|
||||
int apply_traffic_flow_template(const uint8_t& eps_bearer_id,
|
||||
const uint8_t& lcid,
|
||||
const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft);
|
||||
|
||||
// RRC interface
|
||||
void add_mch_port(uint32_t lcid, uint32_t port);
|
||||
|
|
|
@ -66,10 +66,14 @@ const uint8_t TCP_PROTOCOL = 0x06;
|
|||
class tft_packet_filter_t
|
||||
{
|
||||
public:
|
||||
tft_packet_filter_t(uint8_t eps_bearer_id, const LIBLTE_MME_PACKET_FILTER_STRUCT& tft, srslte::log* log);
|
||||
tft_packet_filter_t(uint8_t eps_bearer_id_,
|
||||
uint8_t lcid_,
|
||||
const LIBLTE_MME_PACKET_FILTER_STRUCT& tft_,
|
||||
srslte::log* log_);
|
||||
bool match(const srslte::unique_byte_buffer_t& pdu);
|
||||
|
||||
uint8_t eps_bearer_id;
|
||||
uint8_t lcid;
|
||||
uint8_t id;
|
||||
uint8_t eval_precedence;
|
||||
uint16_t active_filters;
|
||||
|
|
|
@ -219,15 +219,16 @@ int gw::setup_if_addr(uint32_t lcid, uint8_t pdn_type, uint32_t ip_addr, uint8_t
|
|||
return SRSLTE_SUCCESS;
|
||||
}
|
||||
|
||||
int gw::apply_traffic_flow_template(uint8_t erab_id, const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft)
|
||||
int gw::apply_traffic_flow_template(const uint8_t& erab_id,
|
||||
const uint8_t& lcid,
|
||||
const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft)
|
||||
{
|
||||
int err;
|
||||
switch (tft->tft_op_code) {
|
||||
case LIBLTE_MME_TFT_OPERATION_CODE_CREATE_NEW_TFT:
|
||||
gw_log->console("Adding new TFT\n");
|
||||
for (int i = 0; i < tft->packet_filter_list_size; i++) {
|
||||
gw_log->console("New packet filter for TFT\n");
|
||||
tft_packet_filter_t filter(erab_id, tft->packet_filter_list[i], gw_log);
|
||||
tft_packet_filter_t filter(erab_id, lcid, tft->packet_filter_list[i], gw_log);
|
||||
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");
|
||||
|
@ -241,6 +242,7 @@ int gw::apply_traffic_flow_template(uint8_t erab_id, const LIBLTE_MME_TRAFFIC_FL
|
|||
}
|
||||
return SRSLTE_SUCCESS;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
RRC interface
|
||||
*******************************************************************************/
|
||||
|
@ -357,7 +359,7 @@ uint8_t gw::check_tft_filter_match(const srslte::unique_byte_buffer_t& pdu) {
|
|||
for (std::pair<const uint16_t, tft_packet_filter_t>& filter_pair : tft_filter_map) {
|
||||
bool match = filter_pair.second.match(pdu);
|
||||
if (match) {
|
||||
lcid = filter_pair.second.eps_bearer_id - 2;
|
||||
lcid = filter_pair.second.lcid;
|
||||
gw_log->console("Found filter match -- EPS bearer Id %d, LCID %d\n", filter_pair.second.eps_bearer_id, lcid);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1164,7 +1164,7 @@ void nas::parse_activate_dedicated_eps_bearer_context_request(uint32_t lcid, uni
|
|||
}
|
||||
|
||||
// apply packet filters to GW
|
||||
gw->apply_traffic_flow_template(request.eps_bearer_id, tft);
|
||||
gw->apply_traffic_flow_template(request.eps_bearer_id, rrc->get_lcid_for_eps_bearer(request.eps_bearer_id), tft);
|
||||
|
||||
send_activate_dedicated_eps_bearer_context_accept(request.proc_transaction_id, request.eps_bearer_id);
|
||||
}
|
||||
|
|
|
@ -26,14 +26,16 @@
|
|||
|
||||
namespace srsue {
|
||||
|
||||
tft_packet_filter_t::tft_packet_filter_t(uint8_t eps_bearer_id,
|
||||
tft_packet_filter_t::tft_packet_filter_t(uint8_t eps_bearer_id_,
|
||||
uint8_t lcid_,
|
||||
const LIBLTE_MME_PACKET_FILTER_STRUCT& tft,
|
||||
srslte::log* log) :
|
||||
eps_bearer_id(eps_bearer_id),
|
||||
srslte::log* log_) :
|
||||
eps_bearer_id(eps_bearer_id_),
|
||||
lcid(lcid_),
|
||||
id(tft.id),
|
||||
eval_precedence(tft.eval_precedence),
|
||||
active_filters(0),
|
||||
log(log)
|
||||
log(log_)
|
||||
{
|
||||
int idx = 0;
|
||||
while (idx < tft.filter_size) {
|
||||
|
|
|
@ -143,7 +143,9 @@ class gw_dummy : public gw_interface_nas, public gw_interface_pdcp
|
|||
{
|
||||
return SRSLTE_SUCCESS;
|
||||
}
|
||||
int apply_traffic_flow_template(uint8_t eps_bearer_id, const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft)
|
||||
int apply_traffic_flow_template(const uint8_t& eps_bearer_id,
|
||||
const uint8_t& lcid,
|
||||
const LIBLTE_MME_TRAFFIC_FLOW_TEMPLATE_STRUCT* tft)
|
||||
{
|
||||
return SRSLTE_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -64,6 +64,7 @@ uint8_t ip_tst_message2[] = {
|
|||
uint32_t ip_message_len2 = sizeof(ip_tst_message2);
|
||||
|
||||
#define EPS_BEARER_ID 6
|
||||
#define LCID 1
|
||||
|
||||
int tft_filter_test_single_local_port()
|
||||
{
|
||||
|
@ -103,8 +104,8 @@ int tft_filter_test_single_local_port()
|
|||
packet_filter.eval_precedence = 0;
|
||||
packet_filter.filter_size = 3;
|
||||
memcpy(packet_filter.filter, filter_message, 3);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, packet_filter, &log1);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, LCID, packet_filter, &log1);
|
||||
|
||||
// Check filter
|
||||
TESTASSERT(filter.match(ip_msg1));
|
||||
|
@ -151,8 +152,8 @@ int tft_filter_test_single_remote_port()
|
|||
packet_filter.eval_precedence = 0;
|
||||
packet_filter.filter_size = 3;
|
||||
memcpy(packet_filter.filter, filter_message, 3);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, packet_filter, &log1);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, LCID, packet_filter, &log1);
|
||||
|
||||
// Check filter
|
||||
TESTASSERT(filter.match(ip_msg1));
|
||||
|
@ -200,8 +201,8 @@ int tft_filter_test_ipv4_local_addr()
|
|||
packet_filter.eval_precedence = 0;
|
||||
packet_filter.filter_size = filter_size;
|
||||
memcpy(packet_filter.filter, filter_message, filter_size);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, packet_filter, &log1);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, LCID, packet_filter, &log1);
|
||||
|
||||
// Check filter
|
||||
TESTASSERT(filter.match(ip_msg1));
|
||||
|
@ -249,8 +250,8 @@ int tft_filter_test_ipv4_remote_addr()
|
|||
packet_filter.eval_precedence = 0;
|
||||
packet_filter.filter_size = filter_size;
|
||||
memcpy(packet_filter.filter, filter_message, filter_size);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, packet_filter, &log1);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, LCID, packet_filter, &log1);
|
||||
|
||||
// Check filter
|
||||
TESTASSERT(filter.match(ip_msg1));
|
||||
|
@ -297,8 +298,8 @@ int tft_filter_test_ipv4_tos()
|
|||
packet_filter.eval_precedence = 0;
|
||||
packet_filter.filter_size = filter_size;
|
||||
memcpy(packet_filter.filter, filter_message, filter_size);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, packet_filter, &log1);
|
||||
|
||||
srsue::tft_packet_filter_t filter(EPS_BEARER_ID, LCID, packet_filter, &log1);
|
||||
|
||||
// Check filter
|
||||
TESTASSERT(filter.match(ip_msg1));
|
||||
|
|
Loading…
Reference in New Issue