aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/paging.c3
-rw-r--r--src/common/pcu_sock.c27
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)
{