aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/rest_octets.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-04-18 14:49:05 +0200
committerHarald Welte <laforge@gnumonks.org>2010-04-18 21:25:56 +0200
commitda0586a83810f43b061f7b12ad079b264bc03781 (patch)
tree6a0cf72fb2b8031949fdb61c34265ce58d767fdf /openbsc/src/rest_octets.c
parent2c57232489d8551a54741b883bcc39b527602b1b (diff)
GPRS: Add Support for the GPRS Cell Option Extension Info IE
Extension Information is part of the GPRS Cell Options IE, as specified in Chapter 12.24 of TS 04.60. It is needed for indicating EDGE capabilities of the BTS to the MS. This simply adds the code to encode this IE as part of SI13, but does not actually use the code yet.
Diffstat (limited to 'openbsc/src/rest_octets.c')
-rw-r--r--openbsc/src/rest_octets.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/openbsc/src/rest_octets.c b/openbsc/src/rest_octets.c
index df27cf21e..0aac8d51f 100644
--- a/openbsc/src/rest_octets.c
+++ b/openbsc/src/rest_octets.c
@@ -319,8 +319,31 @@ static int append_gprs_cell_opt(struct bitvec *bv,
/* hard-code no PAN_{DEC,INC,MAX} */
bitvec_set_bit(bv, 0);
- /* no extension information (EDGE) */
- bitvec_set_bit(bv, 0);
+ if (!gco->ext_info_present) {
+ /* no extension information */
+ bitvec_set_bit(bv, 0);
+ } else {
+ /* extension information */
+ bitvec_set_bit(bv, 1);
+ if (!gco->ext_info.egprs_supported) {
+ /* 6bit length of extension */
+ bitvec_set_uint(bv, 1 + 3, 6);
+ /* EGPRS supported in the cell */
+ bitvec_set_bit(bv, 0);
+ } else {
+ /* 6bit length of extension */
+ bitvec_set_uint(bv, 1 + 5 + 3, 6);
+ /* EGPRS supported in the cell */
+ bitvec_set_bit(bv, 1);
+ /* 1bit EGPRS PACKET CHANNEL REQUEST */
+ bitvec_set_bit(bv, gco->ext_info.use_egprs_p_ch_req);
+ /* 4bit BEP PERIOD */
+ bitvec_set_uint(bv, gco->ext_info.bep_period, 4);
+ }
+ bitvec_set_bit(bv, gco->ext_info.pfc_supported);
+ bitvec_set_bit(bv, gco->ext_info.dtm_supported);
+ bitvec_set_bit(bv, gco->ext_info.bss_paging_coordination);
+ }
return 0;
}