From e2d5c2c21d231166d0b98d3dc9cf8877a5aa79cc Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Sun, 26 Jul 2020 04:49:00 +0700 Subject: [PATCH] srsue/extnas: implement forwarding of paging messages --- srsue/hdr/stack/upper/rrctl.h | 14 ++++++++++++++ srsue/src/stack/upper/nas_ext.cc | 8 +++++++- srsue/src/stack/upper/rrctl.cc | 15 +++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/srsue/hdr/stack/upper/rrctl.h b/srsue/hdr/stack/upper/rrctl.h index 7fe343c9a..f97d742e6 100644 --- a/srsue/hdr/stack/upper/rrctl.h +++ b/srsue/hdr/stack/upper/rrctl.h @@ -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 diff --git a/srsue/src/stack/upper/nas_ext.cc b/srsue/src/stack/upper/nas_ext.cc index ea804e7ec..d53e649a7 100644 --- a/srsue/src/stack/upper/nas_ext.cc +++ b/srsue/src/stack/upper/nas_ext.cc @@ -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; } diff --git a/srsue/src/stack/upper/rrctl.cc b/srsue/src/stack/upper/rrctl.cc index 1fb7847da..ece15bdf2 100644 --- a/srsue/src/stack/upper/rrctl.cc +++ b/srsue/src/stack/upper/rrctl.cc @@ -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 += ""; } @@ -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