diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/paging.c | 3 | ||||
-rw-r--r-- | src/common/pcu_sock.c | 27 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/common/paging.c b/src/common/paging.c index b71b7bb7..a4514de7 100644 --- a/src/common/paging.c +++ b/src/common/paging.c @@ -41,6 +41,7 @@ #include <osmo-bts/logging.h> #include <osmo-bts/paging.h> #include <osmo-bts/signal.h> +#include <osmo-bts/pcu_if.h> #define MAX_PAGING_BLOCKS_CCCH 9 #define MAX_BS_PA_MFRMS 9 @@ -414,6 +415,8 @@ int paging_gen_msg(struct paging_state *ps, uint8_t *out_buf, struct gsm_time *g /* get message and free record */ memcpy(out_buf, pr[num_pr]->u.imm_ass.msg, GSM_MACBLOCK_LEN); + pcu_tx_pch_data_cnf(gt->fn, pr[num_pr]->u.imm_ass.msg, + GSM_MACBLOCK_LEN); talloc_free(pr[num_pr]); return GSM_MACBLOCK_LEN; } diff --git a/src/common/pcu_sock.c b/src/common/pcu_sock.c index d9ea73ee..da5a95ec 100644 --- a/src/common/pcu_sock.c +++ b/src/common/pcu_sock.c @@ -422,6 +422,33 @@ int pcu_tx_pag_req(uint8_t *identity_lv, uint8_t chan_needed) return pcu_sock_send(&bts_gsmnet, msg); } +int pcu_tx_pch_data_cnf(uint32_t fn, uint8_t *data, uint8_t len) +{ + struct gsm_network *net = &bts_gsmnet; + struct gsm_bts *bts; + struct msgb *msg; + struct gsm_pcu_if *pcu_prim; + struct gsm_pcu_if_data *data_cnf; + + /* FIXME: allow multiple BTS */ + bts = llist_entry(net->bts_list.next, struct gsm_bts, list); + + LOGP(DPCU, LOGL_INFO, "Sending PCH confirm\n"); + + msg = pcu_msgb_alloc(PCU_IF_MSG_DATA_CNF, bts->nr); + if (!msg) + return -ENOMEM; + pcu_prim = (struct gsm_pcu_if *) msg->data; + data_cnf = &pcu_prim->u.data_cnf; + + data_cnf->sapi = PCU_IF_SAPI_PCH; + data_cnf->fn = fn; + memcpy(data_cnf->data, data, len); + data_cnf->len = len; + + return pcu_sock_send(&bts_gsmnet, msg); +} + static int pcu_rx_data_req(struct gsm_bts *bts, uint8_t msg_type, struct gsm_pcu_if_data *data_req) { |