Dynamic PDCH: rsl_ipacc_pdch_activate() operates on a timeslot

... not on the lchan.
This commit is contained in:
Harald Welte 2010-12-23 12:59:52 +01:00
parent d4e6872d6c
commit 53cd7ac44c
2 changed files with 14 additions and 10 deletions

View File

@ -62,7 +62,7 @@ int rsl_ipacc_crcx(struct gsm_lchan *lchan);
int rsl_ipacc_mdcx(struct gsm_lchan *lchan, u_int32_t ip,
u_int16_t port, u_int8_t rtp_payload2);
int rsl_ipacc_mdcx_to_rtpsock(struct gsm_lchan *lchan);
int rsl_ipacc_pdch_activate(struct gsm_lchan *lchan, int act);
int rsl_ipacc_pdch_activate(struct gsm_bts_trx_ts *ts, int act);
int abis_rsl_rcvmsg(struct msgb *msg);

View File

@ -130,9 +130,8 @@ struct gsm_lchan *lchan_lookup(struct gsm_bts_trx *trx, u_int8_t chan_nr)
}
/* See Table 10.5.25 of GSM04.08 */
u_int8_t lchan2chan_nr(const struct gsm_lchan *lchan)
static u_int8_t ts2chan_nr(const struct gsm_bts_trx_ts *ts, uint8_t lchan_nr)
{
struct gsm_bts_trx_ts *ts = lchan->ts;
u_int8_t cbits, chan_nr;
switch (ts->pchan) {
@ -143,15 +142,15 @@ u_int8_t lchan2chan_nr(const struct gsm_lchan *lchan)
break;
case GSM_PCHAN_TCH_H:
cbits = 0x02;
cbits += lchan->nr;
cbits += lchan_nr;
break;
case GSM_PCHAN_CCCH_SDCCH4:
cbits = 0x04;
cbits += lchan->nr;
cbits += lchan_nr;
break;
case GSM_PCHAN_SDCCH8_SACCH8C:
cbits = 0x08;
cbits += lchan->nr;
cbits += lchan_nr;
break;
default:
case GSM_PCHAN_CCCH:
@ -164,6 +163,11 @@ u_int8_t lchan2chan_nr(const struct gsm_lchan *lchan)
return chan_nr;
}
u_int8_t lchan2chan_nr(const struct gsm_lchan *lchan)
{
return ts2chan_nr(lchan->ts, lchan->nr);
}
/* As per TS 03.03 Section 2.2, the IMSI has 'not more than 15 digits' */
u_int64_t str_to_imsi(const char *imsi_str)
{
@ -1671,7 +1675,7 @@ int rsl_ipacc_mdcx_to_rtpsock(struct gsm_lchan *lchan)
return rc;
}
int rsl_ipacc_pdch_activate(struct gsm_lchan *lchan, int act)
int rsl_ipacc_pdch_activate(struct gsm_bts_trx_ts *ts, int act)
{
struct msgb *msg = rsl_msgb_alloc();
struct abis_rsl_dchan_hdr *dh;
@ -1685,12 +1689,12 @@ int rsl_ipacc_pdch_activate(struct gsm_lchan *lchan, int act)
dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh));
init_dchan_hdr(dh, msg_type);
dh->c.msg_discr = ABIS_RSL_MDISC_DED_CHAN;
dh->chan_nr = lchan2chan_nr(lchan);
dh->chan_nr = ts2chan_nr(ts, 0);
DEBUGP(DRSL, "%s IPAC_PDCH_%sACT\n", gsm_lchan_name(lchan),
DEBUGP(DRSL, "%s IPAC_PDCH_%sACT\n", gsm_ts_name(ts),
act ? "" : "DE");
msg->trx = lchan->ts->trx;
msg->trx = ts->trx;
return abis_rsl_sendmsg(msg);
}