aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/abis_rsl.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@netfilter.org>2009-10-24 10:29:22 +0200
committerHarald Welte <laforge@netfilter.org>2009-10-24 10:29:22 +0200
commit9c880c9a9bbea475f8c1af48c6a836e6ce6eb91e (patch)
treedbb68cdd8b0debe28cbb555245ccbd2442711824 /openbsc/src/abis_rsl.c
parenta1499d00a561888baa184a0113f648c3e41e01c1 (diff)
[GPRS] Add RSL function for ip.access PDCH activation
If we have a dynamic TCH/F / PDCH channel configuration, then we can either ACTIVATE CHANNEL it for a TCH/F, or we need to send this vendor-specific PDCH ACTIVATE command to use it as a PDCH. As opposed to a fixed configuration, this allows an intelligent BSC channel allocator to use otherwise idle channels as PDCH as long as no more TCH's are needed.
Diffstat (limited to 'openbsc/src/abis_rsl.c')
-rw-r--r--openbsc/src/abis_rsl.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/openbsc/src/abis_rsl.c b/openbsc/src/abis_rsl.c
index 1a42b75b0..6b328bb28 100644
--- a/openbsc/src/abis_rsl.c
+++ b/openbsc/src/abis_rsl.c
@@ -1020,6 +1020,18 @@ static int abis_rsl_rx_dchan(struct msgb *msg)
case RSL_MT_MODE_MODIFY_NACK:
DEBUGPC(DRSL, "CHANNEL MODE MODIFY NACK\n");
break;
+ case RSL_MT_IPAC_PDCH_ACT_ACK:
+ DEBUGPC(DRSL, "IPAC PDCH ACT ACK\n");
+ break;
+ case RSL_MT_IPAC_PDCH_ACT_NACK:
+ DEBUGPC(DRSL, "IPAC PDCH ACT NACK\n");
+ break;
+ case RSL_MT_IPAC_PDCH_DEACT_ACK:
+ DEBUGPC(DRSL, "IPAC PDCH DEACT ACK\n");
+ break;
+ case RSL_MT_IPAC_PDCH_DEACT_NACK:
+ DEBUGPC(DRSL, "IPAC PDCH DEACT NACK\n");
+ break;
case RSL_MT_PHY_CONTEXT_CONF:
case RSL_MT_PREPROC_MEAS_RES:
case RSL_MT_TALKER_DET:
@@ -1418,6 +1430,24 @@ int rsl_ipacc_connect(struct gsm_lchan *lchan, u_int32_t ip, u_int16_t port,
return abis_rsl_sendmsg(msg);
}
+int rsl_ipacc_pdch_activate(struct gsm_lchan *lchan)
+{
+ struct msgb *msg = rsl_msgb_alloc();
+ struct abis_rsl_dchan_hdr *dh;
+
+ dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh));
+ init_dchan_hdr(dh, RSL_MT_IPAC_PDCH_ACT);
+ dh->c.msg_discr = ABIS_RSL_MDISC_DED_CHAN;
+ dh->chan_nr = lchan2chan_nr(lchan);
+
+ DEBUGP(DRSL, "channel=%s chan_nr=0x%02x IPAC_PDCH_ACT\n",
+ gsm_ts_name(lchan->ts), dh->chan_nr);
+
+ msg->trx = lchan->ts->trx;
+
+ return abis_rsl_sendmsg(msg);
+}
+
static int abis_rsl_rx_ipacc_bindack(struct msgb *msg)
{
struct abis_rsl_dchan_hdr *dh = msgb_l2(msg);