diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2009-10-31 08:05:45 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2009-11-20 17:35:45 +0100 |
commit | ea72b62cac3942f164f1a7d329b7c44435030168 (patch) | |
tree | d5cba4d0a3e93cff2d88702aadde78bb9b00f1ca /openbsc/src | |
parent | 49a84ec6e9a8202d7bc0d6a9a5f22580d809710f (diff) |
[bssmap] Unconditionally include the chosen encryption in cipher mode complete
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/bsc_msc_ip.c | 2 | ||||
-rw-r--r-- | openbsc/src/bssap.c | 18 |
2 files changed, 8 insertions, 12 deletions
diff --git a/openbsc/src/bsc_msc_ip.c b/openbsc/src/bsc_msc_ip.c index c0b887e42..7e810cf66 100644 --- a/openbsc/src/bsc_msc_ip.c +++ b/openbsc/src/bsc_msc_ip.c @@ -258,7 +258,7 @@ static int handle_cipher_m_complete(struct msgb *msg) struct msgb *resp; DEBUGP(DMSC, "CIPHER MODE COMPLETE from MS, forwarding to MSC\n"); - resp = bssmap_create_cipher_complete(msg, -1); + resp = bssmap_create_cipher_complete(msg); if (!resp) { DEBUGP(DMSC, "Creating MSC response failed.\n"); return -1; diff --git a/openbsc/src/bssap.c b/openbsc/src/bssap.c index ea27c3da9..cd65a735b 100644 --- a/openbsc/src/bssap.c +++ b/openbsc/src/bssap.c @@ -504,7 +504,7 @@ struct msgb *bssmap_create_clear_complete(void) return msg; } -struct msgb *bssmap_create_cipher_complete(struct msgb *layer3, int bsc_enc_algo) +struct msgb *bssmap_create_cipher_complete(struct msgb *layer3) { struct msgb *msg = msgb_alloc_headroom(BSSMAP_MSG_SIZE, BSSMAP_MSG_HEADROOM, "cipher-complete"); @@ -514,13 +514,11 @@ struct msgb *bssmap_create_cipher_complete(struct msgb *layer3, int bsc_enc_algo /* send response with BSS override for A5/1... cheating */ msg->l3h = msgb_put(msg, 3); msg->l3h[0] = BSSAP_MSG_BSS_MANAGEMENT; - msg->l3h[1] = 1; + msg->l3h[1] = 0xff; msg->l3h[2] = BSS_MAP_MSG_CIPHER_MODE_COMPLETE; /* include layer3 in case we have at least two octets */ if (layer3 && msgb_l3len(layer3) > 2) { - msg->l3h[1] += msgb_l3len(layer3) + 2; - msg->l4h = msgb_put(msg, msgb_l3len(layer3) + 2); msg->l4h[0] = GSM0808_IE_LAYER_3_MESSAGE_CONTENTS; msg->l4h[1] = msgb_l3len(layer3); @@ -528,14 +526,12 @@ struct msgb *bssmap_create_cipher_complete(struct msgb *layer3, int bsc_enc_algo } /* and the optional BSS message */ - if (bsc_enc_algo != -1) { - msg->l3h[1] += 2; - - msg->l4h = msgb_put(msg, 2); - msg->l4h[0] = GSM0808_IE_CHOSEN_ENCR_ALG; - msg->l4h[1] = bsc_enc_algo; - } + msg->l4h = msgb_put(msg, 2); + msg->l4h[0] = GSM0808_IE_CHOSEN_ENCR_ALG; + msg->l4h[1] = layer3->lchan->encr.alg_id; + /* update the size */ + msg->l3h[1] = msgb_l3len(msg) - 2; return msg; } |