srsue/extnas: implement forwarding of paging messages

This commit is contained in:
Vadim Yanitskiy 2020-07-26 04:49:00 +07:00 committed by Vadim Yanitskiy
parent cf09156b5a
commit e2d5c2c21d
3 changed files with 36 additions and 1 deletions

View File

@ -38,6 +38,7 @@ namespace proto {
RRCTL_PLMN_SELECT,
RRCTL_CONN_ESTABLISH,
RRCTL_CONN_RELEASE,
RRCTL_PAGING,
};
enum msg_disc {
@ -84,10 +85,20 @@ namespace proto {
uint8_t pdu[0];
} __attribute__((packed));
struct __mmec_m_tmsi {
uint8_t mmec;
uint32_t m_tmsi;
} __attribute__((packed));
struct msg_paging_ind {
struct __mmec_m_tmsi ueid;
} __attribute__((packed));
struct msg {
struct msg_hdr hdr;
union {
struct msg_data data;
struct msg_paging_ind paging_ind;
struct msg_plmn_search_res plmn_search_res;
struct msg_plmn_select_req plmn_select_req;
struct msg_conn_establish_req conn_establish_req;
@ -129,6 +140,9 @@ void enc_data_ind(srslte::byte_buffer_t& buf,
const uint8_t *pdu, size_t pdu_len,
uint32_t lcid);
void enc_paging_ind(srslte::byte_buffer_t& buf,
srslte::s_tmsi_t* ue_identity);
} // namespace codec
} // namespace rrctl

View File

@ -225,8 +225,14 @@ void nas_ext::left_rrc_connected() {}
bool nas_ext::paging(srslte::s_tmsi_t* ue_identity)
{
srslte::byte_buffer_t msg;
nas_log->info("Received paging from RRC\n");
// TODO: send PAGING.ind to the external entity
rrctl::codec::enc_paging_ind(msg, ue_identity);
iface->write(msg);
// TODO: what are we supposed to return?
return false;
}

View File

@ -53,6 +53,9 @@ std::string msg_hdr_desc(proto::msg_type type, proto::msg_disc disc, uint16_t le
case RRCTL_DATA:
desc += "Data (PDU)";
break;
case RRCTL_PAGING:
desc += "Paging";
break;
default:
desc += "<UNKNOWN>";
}
@ -195,6 +198,18 @@ void enc_data_ind(srslte::byte_buffer_t& buf,
buf.append_bytes(pdu, pdu_len);
}
void enc_paging_ind(srslte::byte_buffer_t& buf,
srslte::s_tmsi_t* ue_identity)
{
struct proto::msg_paging_ind msg;
msg.ueid.m_tmsi = htonl(ue_identity->m_tmsi);
msg.ueid.mmec = ue_identity->mmec;
enc_hdr(buf, proto::RRCTL_PAGING, proto::RRCTL_IND, sizeof(msg));
buf.append_bytes((const uint8_t*) &msg, sizeof(msg));
}
} // namespace codec
} // namespace rrctl