aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2016-11-17 20:54:04 +0100
committerHarald Welte <laforge@gnumonks.org>2016-11-17 20:54:04 +0100
commit1992b439e7f5ddec504e385111100690573c0da8 (patch)
treeeb3c48a0565988dfbb54dc924446e7cd5f303c0d
parentbdb22ef7c0ab3f83c2dd3b406c6e4edd66bd1dda (diff)
RBS2000 RSL: Support for sending RSL PAGING CMD for GPRS
-rw-r--r--openbsc/include/openbsc/abis_rsl.h3
-rw-r--r--openbsc/src/libbsc/abis_rsl.c7
-rw-r--r--openbsc/src/libbsc/bsc_api.c2
3 files changed, 9 insertions, 3 deletions
diff --git a/openbsc/include/openbsc/abis_rsl.h b/openbsc/include/openbsc/abis_rsl.h
index 758c5557a..692b464e0 100644
--- a/openbsc/include/openbsc/abis_rsl.h
+++ b/openbsc/include/openbsc/abis_rsl.h
@@ -22,6 +22,7 @@
#ifndef _RSL_H
#define _RSL_H
+#include <stdbool.h>
#include <osmocom/gsm/protocol/gsm_08_58.h>
#include <osmocom/gsm/gsm_utils.h>
@@ -49,7 +50,7 @@ int rsl_chan_activate_lchan(struct gsm_lchan *lchan, uint8_t act_type,
int rsl_chan_mode_modify_req(struct gsm_lchan *ts);
int rsl_encryption_cmd(struct msgb *msg);
int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group, uint8_t len,
- uint8_t *ms_ident, uint8_t chan_needed);
+ uint8_t *ms_ident, uint8_t chan_needed, bool is_gprs);
int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val);
int rsl_data_request(struct msgb *msg, uint8_t link_id);
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index a7372a114..13d3d46fb 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -995,7 +995,7 @@ static int rsl_rx_rf_chan_rel_ack(struct gsm_lchan *lchan)
}
int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group, uint8_t len,
- uint8_t *ms_ident, uint8_t chan_needed)
+ uint8_t *ms_ident, uint8_t chan_needed, bool is_gprs)
{
struct abis_rsl_dchan_hdr *dh;
struct msgb *msg = rsl_msgb_alloc();
@@ -1008,6 +1008,11 @@ int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group, uint8_t len,
msgb_tlv_put(msg, RSL_IE_MS_IDENTITY, len-2, ms_ident+2);
msgb_tv_put(msg, RSL_IE_CHAN_NEEDED, chan_needed);
+ /* Ericsson wants to have this IE in case a paging message
+ * relates to packet paging */
+ if (bts->type == GSM_BTS_TYPE_RBS2000 && is_gprs)
+ msgb_tv_put(msg, RSL_IE_ERIC_PACKET_PAG_IND, 0);
+
msg->dst = bts->c0->rsl_link;
return abis_rsl_sendmsg(msg);
diff --git a/openbsc/src/libbsc/bsc_api.c b/openbsc/src/libbsc/bsc_api.c
index 207e12ad5..3736c2fc3 100644
--- a/openbsc/src/libbsc/bsc_api.c
+++ b/openbsc/src/libbsc/bsc_api.c
@@ -418,7 +418,7 @@ error:
int gsm0808_page(struct gsm_bts *bts, unsigned int page_group, unsigned int mi_len,
uint8_t *mi, int chan_type)
{
- return rsl_paging_cmd(bts, page_group, mi_len, mi, chan_type);
+ return rsl_paging_cmd(bts, page_group, mi_len, mi, chan_type, false);
}
static void handle_ass_compl(struct gsm_subscriber_connection *conn,