srsue/extnas: implement forwarding of paging messages
This commit is contained in:
parent
cf09156b5a
commit
e2d5c2c21d
|
@ -38,6 +38,7 @@ namespace proto {
|
||||||
RRCTL_PLMN_SELECT,
|
RRCTL_PLMN_SELECT,
|
||||||
RRCTL_CONN_ESTABLISH,
|
RRCTL_CONN_ESTABLISH,
|
||||||
RRCTL_CONN_RELEASE,
|
RRCTL_CONN_RELEASE,
|
||||||
|
RRCTL_PAGING,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum msg_disc {
|
enum msg_disc {
|
||||||
|
@ -84,10 +85,20 @@ namespace proto {
|
||||||
uint8_t pdu[0];
|
uint8_t pdu[0];
|
||||||
} __attribute__((packed));
|
} __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 {
|
||||||
struct msg_hdr hdr;
|
struct msg_hdr hdr;
|
||||||
union {
|
union {
|
||||||
struct msg_data data;
|
struct msg_data data;
|
||||||
|
struct msg_paging_ind paging_ind;
|
||||||
struct msg_plmn_search_res plmn_search_res;
|
struct msg_plmn_search_res plmn_search_res;
|
||||||
struct msg_plmn_select_req plmn_select_req;
|
struct msg_plmn_select_req plmn_select_req;
|
||||||
struct msg_conn_establish_req conn_establish_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,
|
const uint8_t *pdu, size_t pdu_len,
|
||||||
uint32_t lcid);
|
uint32_t lcid);
|
||||||
|
|
||||||
|
void enc_paging_ind(srslte::byte_buffer_t& buf,
|
||||||
|
srslte::s_tmsi_t* ue_identity);
|
||||||
|
|
||||||
} // namespace codec
|
} // namespace codec
|
||||||
|
|
||||||
} // namespace rrctl
|
} // namespace rrctl
|
||||||
|
|
|
@ -225,8 +225,14 @@ void nas_ext::left_rrc_connected() {}
|
||||||
|
|
||||||
bool nas_ext::paging(srslte::s_tmsi_t* ue_identity)
|
bool nas_ext::paging(srslte::s_tmsi_t* ue_identity)
|
||||||
{
|
{
|
||||||
|
srslte::byte_buffer_t msg;
|
||||||
|
|
||||||
nas_log->info("Received paging from RRC\n");
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,9 @@ std::string msg_hdr_desc(proto::msg_type type, proto::msg_disc disc, uint16_t le
|
||||||
case RRCTL_DATA:
|
case RRCTL_DATA:
|
||||||
desc += "Data (PDU)";
|
desc += "Data (PDU)";
|
||||||
break;
|
break;
|
||||||
|
case RRCTL_PAGING:
|
||||||
|
desc += "Paging";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
desc += "<UNKNOWN>";
|
desc += "<UNKNOWN>";
|
||||||
}
|
}
|
||||||
|
@ -195,6 +198,18 @@ void enc_data_ind(srslte::byte_buffer_t& buf,
|
||||||
buf.append_bytes(pdu, pdu_len);
|
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 codec
|
||||||
|
|
||||||
} // namespace rrctl
|
} // namespace rrctl
|
||||||
|
|
Loading…
Reference in New Issue