summaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorDieter Spaar <spaar@mirider.augusta.de>2010-12-12 12:45:08 +0100
committerHarald Welte <laforge@gnumonks.org>2010-12-12 15:46:00 +0100
commitd2b13fceed7c14ff68ecce35ce5e5a4381b05924 (patch)
tree37403cae53fb7b8685397b152e0c05049fdc99f4 /openbsc
parent654f043ef7b71b47d0a3b8655ff82c1be275ebe8 (diff)
Add mandatory routeing area IE to SUSPEND-NACK
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/src/gprs/gprs_bssgp.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/openbsc/src/gprs/gprs_bssgp.c b/openbsc/src/gprs/gprs_bssgp.c
index 051ec92f..e94f3580 100644
--- a/openbsc/src/gprs/gprs_bssgp.c
+++ b/openbsc/src/gprs/gprs_bssgp.c
@@ -156,12 +156,14 @@ int bssgp_tx_suspend_ack(uint16_t nsei, uint32_t tlli,
/* 10.3.8 SUSPEND-NACK PDU */
int bssgp_tx_suspend_nack(uint16_t nsei, uint32_t tlli,
+ const struct gprs_ra_id *ra_id,
uint8_t *cause)
{
struct msgb *msg = bssgp_msgb_alloc();
struct bssgp_normal_hdr *bgph =
(struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));
uint32_t _tlli;
+ uint8_t ra[6];
msgb_nsei(msg) = nsei;
msgb_bvci(msg) = 0; /* Signalling */
@@ -169,6 +171,8 @@ int bssgp_tx_suspend_nack(uint16_t nsei, uint32_t tlli,
_tlli = htonl(tlli);
msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
+ gsm48_construct_ra(ra, ra_id);
+ msgb_tvlv_put(msg, BSSGP_IE_ROUTEING_AREA, 6, ra);
if (cause)
msgb_tvlv_put(msg, BSSGP_IE_CAUSE, 1, cause);
@@ -383,7 +387,7 @@ static int bssgp_rx_suspend(struct msgb *msg, struct tlv_parsed *tp,
/* Inform GMM about the SUSPEND request */
rc = gprs_gmm_rx_suspend(&raid, tlli);
if (rc < 0)
- return bssgp_tx_suspend_nack(msgb_nsei(msg), tlli, NULL);
+ return bssgp_tx_suspend_nack(msgb_nsei(msg), tlli, &raid, NULL);
bssgp_tx_suspend_ack(msgb_nsei(msg), tlli, &raid, 0);