diff options
author | Alexander Couzens <lynxis@fe80.eu> | 2016-12-02 17:33:01 +0100 |
---|---|---|
committer | Philipp Maier <pmaier@sysmocom.de> | 2017-02-24 15:18:21 +0100 |
commit | 3fbc9f11a1dcea76b889830b865cb237c308e798 (patch) | |
tree | a0995fda9b17cc72bda19ac49d89aed4d06224f8 | |
parent | f478d7fb15de2d76775f5612c66a70e190972fd9 (diff) |
libbsc: add rsl_ericsson_imm_assign_cmd() which reply with a confirmation message
ericsson can handle a reference at the end of the message which is used in
the confirm message. The confirm message is only sent if the trailer is present.
Change-Id: I88560291b5a3a3d7a0bac4d3c089b45f1f6b297f
-rw-r--r-- | openbsc/include/openbsc/abis_rsl.h | 3 | ||||
-rw-r--r-- | openbsc/src/libbsc/abis_rsl.c | 23 |
2 files changed, 24 insertions, 2 deletions
diff --git a/openbsc/include/openbsc/abis_rsl.h b/openbsc/include/openbsc/abis_rsl.h index 692b464e0..e61d4eafd 100644 --- a/openbsc/include/openbsc/abis_rsl.h +++ b/openbsc/include/openbsc/abis_rsl.h @@ -57,6 +57,9 @@ int rsl_data_request(struct msgb *msg, uint8_t link_id); int rsl_establish_request(struct gsm_lchan *lchan, uint8_t link_id); int rsl_relase_request(struct gsm_lchan *lchan, uint8_t link_id); +/* Ericcson vendor specific RSL extensions */ +int rsl_ericsson_imm_assign_cmd(struct gsm_bts *bts, uint32_t tlli, uint8_t len, uint8_t *val); + /* Siemens vendor-specific RSL extensions */ int rsl_siemens_mrpci(struct gsm_lchan *lchan, struct rsl_mrpci *mrpci); diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c index 783fa16b1..5cce0585a 100644 --- a/openbsc/src/libbsc/abis_rsl.c +++ b/openbsc/src/libbsc/abis_rsl.c @@ -1049,7 +1049,7 @@ int imsi_str2bcd(uint8_t *bcd_out, const char *str_in) } /* Chapter 8.5.6 */ -int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val) +struct msgb *rsl_imm_assign_cmd_common(struct gsm_bts *bts, uint8_t len, uint8_t *val) { struct msgb *msg = rsl_msgb_alloc(); struct abis_rsl_dchan_hdr *dh; @@ -1072,8 +1072,27 @@ int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val) } msg->dst = bts->c0->rsl_link; + return msg; +} + +/* Chapter 8.5.6 */ +int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val) +{ + struct msgb *msg = rsl_imm_assign_cmd_common(bts, len, val); + if (!msg) + return 1; + return abis_rsl_sendmsg(msg); +} + +/* Chapter 8.5.6 */ +int rsl_ericsson_imm_assign_cmd(struct gsm_bts *bts, uint32_t tlli, uint8_t len, uint8_t *val) +{ + struct msgb *msg = rsl_imm_assign_cmd_common(bts, len, val); + + /* ericsson can handle a reference at the end of the message which is used in + * the confirm message. The confirm message is only sent if the trailer is present */ msgb_put_u8(msg, 0xf1); - msgb_put_u32(msg, random()); + msgb_put_u32(msg, tlli); return abis_rsl_sendmsg(msg); } |