diff options
Diffstat (limited to 'openbsc/src/libbsc/pcu_sock.c')
-rw-r--r-- | openbsc/src/libbsc/pcu_sock.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/openbsc/src/libbsc/pcu_sock.c b/openbsc/src/libbsc/pcu_sock.c index 98e12fad4..637e4c6a3 100644 --- a/openbsc/src/libbsc/pcu_sock.c +++ b/openbsc/src/libbsc/pcu_sock.c @@ -1,6 +1,6 @@ /* pcu_sock.c: Connect from PCU via unix domain socket */ -/* (C) 2008-2010 by Harald Welte <laforge@gnumonks.org> +/* (C) 2008-2017 by Harald Welte <laforge@gnumonks.org> * (C) 2009-2012 by Andreas Eversberg <jolly@eversberg.eu> * (C) 2012 by Holger Hans Peter Freyther * All Rights Reserved @@ -307,6 +307,24 @@ int pcu_tx_imm_ass_sent(struct gsm_bts *bts, uint32_t tlli) return pcu_sock_send(bts, msg); } +/* forward data from a RR GPRS SUSPEND REQ towards PCU */ +int pcu_tx_susp_req(struct gsm_lchan *lchan, uint32_t tlli, const uint8_t *ra_id, uint8_t cause) +{ + struct gsm_bts *bts = lchan->ts->trx->bts; + struct msgb *msg; + struct gsm_pcu_if *pcu_prim; + + msg = pcu_msgb_alloc(PCU_IF_MSG_SUSP_REQ, bts->nr); + if (!msg) + return -ENOMEM; + pcu_prim = (struct gsm_pcu_if *) msg->data; + pcu_prim->u.susp_req.tlli = tlli; + memcpy(pcu_prim->u.susp_req.ra_id, ra_id, sizeof(pcu_prim->u.susp_req.ra_id)); + pcu_prim->u.susp_req.cause = cause; + + return pcu_sock_send(bts, msg); +} + /* we need to decode the raw RR paging messsage (see PCU code * Encoding::write_paging_request) and extract the mobile identity * (P-TMSI) from it */ |