Correct F1-U TEID variable names, simplify code
In e1_send_bearer_updates(), we send the DL (DU) TEID and address to the CU-UP. Therefore, correct the variable names to reflect that the F1-U information pertains to the DU. Also, move the tunnel info update function f1u_dl_gtp_update() to a more prominent place, and take the pointer to the struct containing the "interesting" information.
This commit is contained in:
@@ -169,10 +169,10 @@ typedef struct pdu_session_param_s {
|
|||||||
* @brief F1-U tunnel configuration
|
* @brief F1-U tunnel configuration
|
||||||
*/
|
*/
|
||||||
typedef struct f1u_tunnel_s {
|
typedef struct f1u_tunnel_s {
|
||||||
/* Downlink F1-U Tunnel Endpoint Identifier (CU-UP/DU) */
|
/* F1-U Tunnel Endpoint Identifier (on DU side) */
|
||||||
uint32_t cuup_teid_f1u;
|
uint32_t teid;
|
||||||
/* DL F1-U Transport Layer */
|
/* Downlink F1-U Transport Layer (on DU side) */
|
||||||
transport_layer_addr_t cuup_addr_f1u;
|
transport_layer_addr_t addr;
|
||||||
} f1u_tunnel_t;
|
} f1u_tunnel_t;
|
||||||
|
|
||||||
typedef struct drb_s {
|
typedef struct drb_s {
|
||||||
@@ -203,8 +203,8 @@ typedef struct drb_s {
|
|||||||
int cipheringDisabled;
|
int cipheringDisabled;
|
||||||
} ext1;
|
} ext1;
|
||||||
} pdcp_config;
|
} pdcp_config;
|
||||||
// F1-U
|
// F1-U Downlink Tunnel Config (on DU side)
|
||||||
f1u_tunnel_t f1u_tunnel_config;
|
f1u_tunnel_t du_tunnel_config;
|
||||||
} drb_t;
|
} drb_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|||||||
@@ -828,8 +828,8 @@ static void cuup_notify_reestablishment(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue_p)
|
|||||||
drb_e1->id = drb_id;
|
drb_e1->id = drb_id;
|
||||||
drb_e1->numDlUpParam = 1;
|
drb_e1->numDlUpParam = 1;
|
||||||
drb_t *drbs = &ue_p->established_drbs[drb_id];
|
drb_t *drbs = &ue_p->established_drbs[drb_id];
|
||||||
memcpy(&drb_e1->DlUpParamList[0].tlAddress, &drbs->f1u_tunnel_config.cuup_addr_f1u.buffer, sizeof(uint8_t) * 4);
|
memcpy(&drb_e1->DlUpParamList[0].tlAddress, &drbs->du_tunnel_config.addr.buffer, sizeof(uint8_t) * 4);
|
||||||
drb_e1->DlUpParamList[0].teId = drbs->f1u_tunnel_config.cuup_teid_f1u;
|
drb_e1->DlUpParamList[0].teId = drbs->du_tunnel_config.teid;
|
||||||
/* PDCP configuration */
|
/* PDCP configuration */
|
||||||
bearer_context_pdcp_config_t *pdcp_config = &drb_e1->pdcp_config;
|
bearer_context_pdcp_config_t *pdcp_config = &drb_e1->pdcp_config;
|
||||||
drb_t *rrc_drb = get_drb(ue_p, drb_id);
|
drb_t *rrc_drb = get_drb(ue_p, drb_id);
|
||||||
@@ -1868,15 +1868,15 @@ static void fill_e1_bearer_modif(DRB_nGRAN_to_setup_t *drb_e1, const f1ap_drb_to
|
|||||||
/**
|
/**
|
||||||
* @brief Store F1-U DL TL and TEID in RRC
|
* @brief Store F1-U DL TL and TEID in RRC
|
||||||
*/
|
*/
|
||||||
static void f1u_gtp_update(f1u_tunnel_t *f1u, const f1ap_drb_to_be_setup_t *drb_f1)
|
static void f1u_dl_gtp_update(f1u_tunnel_t *f1u, const f1ap_up_tnl_t *p)
|
||||||
{
|
{
|
||||||
f1u->cuup_teid_f1u = drb_f1->up_dl_tnl[0].teid;
|
f1u->teid = p->teid;
|
||||||
memcpy(&f1u->cuup_addr_f1u.buffer, &drb_f1->up_dl_tnl[0].tl_address, sizeof(uint8_t) * 4);
|
memcpy(&f1u->addr.buffer, &p->tl_address, sizeof(uint8_t) * 4);
|
||||||
f1u->cuup_addr_f1u.length = sizeof(in_addr_t);
|
f1u->addr.length = sizeof(in_addr_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* \brief use list of DRBs and send the corresponding bearer update message via
|
/* \brief use list of DRBs and send the corresponding bearer update message via
|
||||||
* E1 to the CU of this UE */
|
* E1 to the CU of this UE. Also updates TEID info internally */
|
||||||
static void e1_send_bearer_updates(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, int n, f1ap_drb_to_be_setup_t *drbs)
|
static void e1_send_bearer_updates(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, int n, f1ap_drb_to_be_setup_t *drbs)
|
||||||
{
|
{
|
||||||
// we assume the same UE ID in CU-UP and CU-CP
|
// we assume the same UE ID in CU-UP and CU-CP
|
||||||
@@ -1896,7 +1896,7 @@ static void e1_send_bearer_updates(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE, int n, f
|
|||||||
DevAssert(pdu_e1 != NULL);
|
DevAssert(pdu_e1 != NULL);
|
||||||
pdu_e1->sessionId = pdu_ue->param.pdusession_id;
|
pdu_e1->sessionId = pdu_ue->param.pdusession_id;
|
||||||
DRB_nGRAN_to_setup_t *drb_e1 = &pdu_e1->DRBnGRanModList[pdu_e1->numDRB2Modify];
|
DRB_nGRAN_to_setup_t *drb_e1 = &pdu_e1->DRBnGRanModList[pdu_e1->numDRB2Modify];
|
||||||
f1u_gtp_update(&UE->established_drbs[drb_f1->drb_id].f1u_tunnel_config, drb_f1);
|
f1u_dl_gtp_update(&UE->established_drbs[drb_f1->drb_id].du_tunnel_config, &drb_f1->up_dl_tnl[0]);
|
||||||
/* Fill E1 bearer context modification */
|
/* Fill E1 bearer context modification */
|
||||||
fill_e1_bearer_modif(drb_e1, drb_f1);
|
fill_e1_bearer_modif(drb_e1, drb_f1);
|
||||||
pdu_e1->numDRB2Modify += 1;
|
pdu_e1->numDRB2Modify += 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user