Change in osmo-bsc[master]: Handover Request: also parse Chosen Algorithm IE, pass to lchan activ...

2019-04-11 Thread Neels Hofmeyr
Neels Hofmeyr has submitted this change and it was merged. ( 
https://gerrit.osmocom.org/13583 )

Change subject: Handover Request: also parse Chosen Algorithm IE, pass to lchan 
activation
..

Handover Request: also parse Chosen Algorithm IE, pass to lchan activation

During inter-BSC-incoming, the MSC sends the chosen encryption algorithm in the
Handover Request message. Actually parse this Chosen Encryption Algorithm IE.

Place the chosen algorithm and the CK into lchan_activate_info->encr so that
the new lchan will use the same ciphering on this new BSS as it did on the old
BSS.

Change-Id: I5b269f50bd2092516bfdf87746196983d3ac49d1
---
M include/osmocom/bsc/gsm_data.h
M src/osmo-bsc/handover_fsm.c
2 files changed, 33 insertions(+), 0 deletions(-)

Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved



diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index ba28a6b..131a53e 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -179,6 +179,10 @@
struct gsm0808_speech_codec_list scl;
struct gsm0808_encrypt_info ei;
struct gsm_classmark classmark;
+   /* chosen_encr_alg reflects the encoded value as in 
RSL_ENC_ALG_A5(a5_numer):
+* chosen_encr_alg == 1 means A5/0 i.e. no encryption, chosen_encr_alg 
== 4 means A5/3.
+* chosen_encr_alg == 0 means no such IE was present. */
+   uint8_t chosen_encr_alg;
struct gsm0808_cell_id cell_id_serving;
char cell_id_serving_name[64];
struct gsm0808_cell_id cell_id_target;
diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c
index 9c86b70..421c32e 100644
--- a/src/osmo-bsc/handover_fsm.c
+++ b/src/osmo-bsc/handover_fsm.c
@@ -432,6 +432,17 @@
   "Missing mandatory IE: 3GPP mandates either Classmark 
Information 1 or 2"
   " in BSSMAP Handover Request, but neither are present. 
Will continue without.\n");

+   if ((e = TLVP_GET(tp, GSM0808_IE_CHOSEN_ENCR_ALG))) {
+   req->chosen_encr_alg = e->val[0];
+   if (req->chosen_encr_alg < 1 || req->chosen_encr_alg > 8)
+   LOG_HO(conn, LOGL_ERROR, "Chosen Encryption Algorithm 
(Serving) is invalid: %u\n",
+  req->chosen_encr_alg);
+   }
+
+   LOG_HO(conn, LOGL_DEBUG, "Handover Request encryption info: 
chosen=A5/%u key=%s\n",
+  (req->chosen_encr_alg ? : 1) - 1, req->ei.key_len?
+  osmo_hexdump_nospc(req->ei.key, req->ei.key_len) : "none");
+
if (TLVP_PRESENT(tp, GSM0808_IE_AOIP_TRASP_ADDR)) {
int rc;
unsigned int u;
@@ -611,6 +622,24 @@
.msc_assigned_cic = req->msc_assigned_cic,
};

+   if (req->chosen_encr_alg) {
+   info.encr.alg_id = req->chosen_encr_alg;
+   if (info.encr.alg_id > 1 && !req->ei.key_len) {
+   ho_fail(HO_RESULT_ERROR, "Chosen Encryption Algorithm 
(Serving) reflects A5/%u"
+   " but there is no key (Encryption 
Information)", info.encr.alg_id - 1);
+   return;
+   }
+   }
+
+   if (req->ei.key_len) {
+   if (req->ei.key_len > sizeof(info.encr.key)) {
+   ho_fail(HO_RESULT_ERROR, "Encryption Information IE key 
length is too large: %u\n",
+   req->ei.key_len);
+   }
+   memcpy(info.encr.key, req->ei.key, req->ei.key_len);
+   info.encr.key_len = req->ei.key_len;
+   }
+
lchan_activate(ho->new_lchan, &info);
 }


--
To view, visit https://gerrit.osmocom.org/13583
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I5b269f50bd2092516bfdf87746196983d3ac49d1
Gerrit-Change-Number: 13583
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr 
Gerrit-Reviewer: Harald Welte 
Gerrit-Reviewer: Jenkins Builder (102)
Gerrit-Reviewer: Neels Hofmeyr 


Change in osmo-bsc[master]: Handover Request: also parse Chosen Algorithm IE, pass to lchan activ...

2019-04-10 Thread Harald Welte
Harald Welte has posted comments on this change. ( 
https://gerrit.osmocom.org/13583 )

Change subject: Handover Request: also parse Chosen Algorithm IE, pass to lchan 
activation
..


Patch Set 1: Code-Review+2


--
To view, visit https://gerrit.osmocom.org/13583
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I5b269f50bd2092516bfdf87746196983d3ac49d1
Gerrit-Change-Number: 13583
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr 
Gerrit-Reviewer: Harald Welte 
Gerrit-Reviewer: Jenkins Builder (102)
Gerrit-Comment-Date: Thu, 11 Apr 2019 06:16:51 +
Gerrit-HasComments: No
Gerrit-HasLabels: Yes


Change in osmo-bsc[master]: Handover Request: also parse Chosen Algorithm IE, pass to lchan activ...

2019-04-10 Thread Neels Hofmeyr
Neels Hofmeyr has uploaded this change for review. ( 
https://gerrit.osmocom.org/13583


Change subject: Handover Request: also parse Chosen Algorithm IE, pass to lchan 
activation
..

Handover Request: also parse Chosen Algorithm IE, pass to lchan activation

During inter-BSC-incoming, the MSC sends the chosen encryption algorithm in the
Handover Request message. Actually parse this Chosen Encryption Algorithm IE.

Place the chosen algorithm and the CK into lchan_activate_info->encr so that
the new lchan will use the same ciphering on this new BSS as it did on the old
BSS.

Change-Id: I5b269f50bd2092516bfdf87746196983d3ac49d1
---
M include/osmocom/bsc/gsm_data.h
M src/osmo-bsc/handover_fsm.c
2 files changed, 33 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/83/13583/1

diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index ba28a6b..131a53e 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -179,6 +179,10 @@
struct gsm0808_speech_codec_list scl;
struct gsm0808_encrypt_info ei;
struct gsm_classmark classmark;
+   /* chosen_encr_alg reflects the encoded value as in 
RSL_ENC_ALG_A5(a5_numer):
+* chosen_encr_alg == 1 means A5/0 i.e. no encryption, chosen_encr_alg 
== 4 means A5/3.
+* chosen_encr_alg == 0 means no such IE was present. */
+   uint8_t chosen_encr_alg;
struct gsm0808_cell_id cell_id_serving;
char cell_id_serving_name[64];
struct gsm0808_cell_id cell_id_target;
diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c
index 9c86b70..421c32e 100644
--- a/src/osmo-bsc/handover_fsm.c
+++ b/src/osmo-bsc/handover_fsm.c
@@ -432,6 +432,17 @@
   "Missing mandatory IE: 3GPP mandates either Classmark 
Information 1 or 2"
   " in BSSMAP Handover Request, but neither are present. 
Will continue without.\n");

+   if ((e = TLVP_GET(tp, GSM0808_IE_CHOSEN_ENCR_ALG))) {
+   req->chosen_encr_alg = e->val[0];
+   if (req->chosen_encr_alg < 1 || req->chosen_encr_alg > 8)
+   LOG_HO(conn, LOGL_ERROR, "Chosen Encryption Algorithm 
(Serving) is invalid: %u\n",
+  req->chosen_encr_alg);
+   }
+
+   LOG_HO(conn, LOGL_DEBUG, "Handover Request encryption info: 
chosen=A5/%u key=%s\n",
+  (req->chosen_encr_alg ? : 1) - 1, req->ei.key_len?
+  osmo_hexdump_nospc(req->ei.key, req->ei.key_len) : "none");
+
if (TLVP_PRESENT(tp, GSM0808_IE_AOIP_TRASP_ADDR)) {
int rc;
unsigned int u;
@@ -611,6 +622,24 @@
.msc_assigned_cic = req->msc_assigned_cic,
};

+   if (req->chosen_encr_alg) {
+   info.encr.alg_id = req->chosen_encr_alg;
+   if (info.encr.alg_id > 1 && !req->ei.key_len) {
+   ho_fail(HO_RESULT_ERROR, "Chosen Encryption Algorithm 
(Serving) reflects A5/%u"
+   " but there is no key (Encryption 
Information)", info.encr.alg_id - 1);
+   return;
+   }
+   }
+
+   if (req->ei.key_len) {
+   if (req->ei.key_len > sizeof(info.encr.key)) {
+   ho_fail(HO_RESULT_ERROR, "Encryption Information IE key 
length is too large: %u\n",
+   req->ei.key_len);
+   }
+   memcpy(info.encr.key, req->ei.key, req->ei.key_len);
+   info.encr.key_len = req->ei.key_len;
+   }
+
lchan_activate(ho->new_lchan, &info);
 }


--
To view, visit https://gerrit.osmocom.org/13583
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5b269f50bd2092516bfdf87746196983d3ac49d1
Gerrit-Change-Number: 13583
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr