forked from acouzens/open5gs
dedicated bearer done
This commit is contained in:
parent
886ef5a747
commit
46ce8e0c93
|
@ -137,6 +137,8 @@ status_t esm_build_activate_dedicated_bearer_context(
|
|||
linked_eps_bearer_identity;
|
||||
nas_eps_quality_of_service_t *eps_qos =
|
||||
&activate_dedicated_eps_bearer_context_request->eps_qos;
|
||||
nas_traffic_flow_template_t *tft =
|
||||
&activate_dedicated_eps_bearer_context_request->tft;
|
||||
|
||||
d_assert(bearer, return CORE_ERROR, "Null param");
|
||||
mme_ue = bearer->mme_ue;
|
||||
|
@ -159,6 +161,12 @@ status_t esm_build_activate_dedicated_bearer_context(
|
|||
bearer->qos.mbr.downlink, bearer->qos.mbr.uplink,
|
||||
bearer->qos.gbr.downlink, bearer->qos.gbr.uplink);
|
||||
|
||||
tft->length = bearer->tft_len;
|
||||
d_assert(tft->length, return CORE_ERROR, "No TFT Len");
|
||||
d_assert(bearer->tft, return CORE_ERROR, "Null param");
|
||||
memcpy(tft->buffer, bearer->tft, tft->length);
|
||||
core_free(bearer->tft);
|
||||
|
||||
d_assert(nas_security_encode(pkbuf, mme_ue, &message) == CORE_OK &&
|
||||
*pkbuf,,);
|
||||
|
||||
|
|
|
@ -1600,6 +1600,9 @@ status_t mme_bearer_remove(mme_bearer_t *bearer)
|
|||
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
||||
fsm_final(&bearer->sm, &e);
|
||||
fsm_clear(&bearer->sm);
|
||||
|
||||
if (bearer->tft)
|
||||
core_free(bearer->tft);
|
||||
|
||||
list_remove(&bearer->sess->bearer_list, bearer);
|
||||
index_free(&mme_bearer_pool, bearer);
|
||||
|
|
|
@ -305,6 +305,8 @@ typedef struct _mme_bearer_t {
|
|||
c_uint32_t sgw_s1u_addr;
|
||||
|
||||
qos_t qos;
|
||||
c_uint8_t *tft;
|
||||
c_uint8_t tft_len;
|
||||
|
||||
/* Related Context */
|
||||
mme_ue_t *mme_ue;
|
||||
|
|
|
@ -247,6 +247,11 @@ void mme_s11_handle_create_bearer_request(
|
|||
d_error("No QoS");
|
||||
return;
|
||||
}
|
||||
if (req->bearer_contexts.tft.presence == 0)
|
||||
{
|
||||
d_error("No TFT");
|
||||
return;
|
||||
}
|
||||
|
||||
sess = mme_sess_find_by_ebi(mme_ue, req->linked_eps_bearer_id.u8);
|
||||
d_assert(sess, return,
|
||||
|
@ -275,6 +280,12 @@ void mme_s11_handle_create_bearer_request(
|
|||
bearer->qos.gbr.downlink = bearer_qos.dl_gbr;
|
||||
bearer->qos.gbr.uplink = bearer_qos.ul_gbr;
|
||||
|
||||
/* Bearer TFT */
|
||||
bearer->tft_len = req->bearer_contexts.tft.len;
|
||||
d_assert(bearer->tft_len, return, "No TFT Len");
|
||||
bearer->tft = core_calloc(1, bearer->tft_len);
|
||||
memcpy(bearer->tft, req->bearer_contexts.tft.data, bearer->tft_len);
|
||||
|
||||
if (FSM_CHECK(&mme_ue->sm, emm_state_attached))
|
||||
{
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
|
|
@ -79,7 +79,11 @@ status_t pgw_compile_packet_filter(pgw_rule_t *pgw_rule, c_int8_t *description)
|
|||
{
|
||||
uint32_t *a = ((ipfw_insn_u32 *)cmd)->d;
|
||||
pgw_rule->ipv4.local.addr = a[0];
|
||||
pgw_rule->ipv4.local.mask = a[1];
|
||||
if (cmd->opcode == O_IP_SRC_MASK)
|
||||
pgw_rule->ipv4.local.mask = a[1];
|
||||
else
|
||||
pgw_rule->ipv4.local.mask = 0xffffffff;
|
||||
|
||||
break;
|
||||
}
|
||||
case O_IP_DST:
|
||||
|
@ -87,7 +91,10 @@ status_t pgw_compile_packet_filter(pgw_rule_t *pgw_rule, c_int8_t *description)
|
|||
{
|
||||
uint32_t *a = ((ipfw_insn_u32 *)cmd)->d;
|
||||
pgw_rule->ipv4.remote.addr = a[0];
|
||||
pgw_rule->ipv4.remote.mask = a[1];
|
||||
if (cmd->opcode == O_IP_SRC_MASK)
|
||||
pgw_rule->ipv4.remote.mask = a[1];
|
||||
else
|
||||
pgw_rule->ipv4.remote.mask = 0xffffffff;
|
||||
break;
|
||||
}
|
||||
case O_IP_SRCPORT:
|
||||
|
|
|
@ -282,14 +282,14 @@ status_t pgw_s5c_build_create_bearer_request(
|
|||
if (pf->rule.port.remote.low == pf->rule.port.remote.high)
|
||||
{
|
||||
tft.pf[i].component[j].type =
|
||||
GTP_PACKET_FILTER_SINGLE_LOCAL_PORT_TYPE;
|
||||
GTP_PACKET_FILTER_SINGLE_REMOTE_PORT_TYPE;
|
||||
tft.pf[i].component[j].port.low = pf->rule.port.remote.low;
|
||||
j++; len += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
tft.pf[i].component[j].type =
|
||||
GTP_PACKET_FILTER_LOCAL_PORT_RANGE_TYPE;
|
||||
GTP_PACKET_FILTER_REMOTE_PORT_RANGE_TYPE;
|
||||
tft.pf[i].component[j].port.low = pf->rule.port.remote.low;
|
||||
tft.pf[i].component[j].port.high = pf->rule.port.remote.high;
|
||||
j++; len += 5;
|
||||
|
|
Loading…
Reference in New Issue