summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/src
diff options
context:
space:
mode:
authorAndreas.Eversberg <jolly@eversberg.eu>2010-09-15 14:21:06 +0000
committerAndreas.Eversberg <jolly@eversberg.eu>2010-09-15 14:21:06 +0000
commitdece8977f438983f681feeeeb8a6f736859be98e (patch)
tree5b3869d4854198d07b3d7195b7e88580a370bb93 /src/host/layer23/src
parentd33ffcc3f14f175843ad72066c0a3c83db1717ac (diff)
[layer23] Fixed A5/1 support coding
Dieter pointed out that A5/1 is indicated as supported, if the A5/1 bit in the classmark IE is 0.
Diffstat (limited to 'src/host/layer23/src')
-rw-r--r--src/host/layer23/src/mobile/gsm48_mm.c2
-rw-r--r--src/host/layer23/src/mobile/gsm48_rr.c24
2 files changed, 14 insertions, 12 deletions
diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c
index 10767d58..dfc41d45 100644
--- a/src/host/layer23/src/mobile/gsm48_mm.c
+++ b/src/host/layer23/src/mobile/gsm48_mm.c
@@ -297,7 +297,7 @@ int gsm48_encode_classmark1(struct gsm48_classmark1 *cm, uint8_t rev_lev,
memset(cm, 0, sizeof(*cm));
cm->rev_lev = rev_lev;
cm->es_ind = es_ind;
- cm->a5_1 = a5_1;
+ cm->a5_1 = !a5_1;
cm->pwr_lev = pwr_lev;
return 0;
diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c
index 125465f3..3d0245bc 100644
--- a/src/host/layer23/src/mobile/gsm48_rr.c
+++ b/src/host/layer23/src/mobile/gsm48_rr.c
@@ -848,12 +848,12 @@ static int gsm48_rr_rx_cip_mode_cmd(struct osmocom_ms *ms, struct msgb *msg)
/* cipher mode response */
cr = cm->cr;
- if (sc)
- LOGP(DRR, LOGL_INFO, "CIPHERING MODE COMMAND (sc=%u, cr=%u)",
+ if (!sc)
+ LOGP(DRR, LOGL_INFO, "CIPHERING MODE COMMAND (sc=%u, cr=%u)\n",
sc, cr);
else
LOGP(DRR, LOGL_INFO, "CIPHERING MODE COMMAND (sc=%u, "
- "algo=A5/%d cr=%u)", sc, alg_id + 1, cr);
+ "algo=A5/%d cr=%u)\n", sc, alg_id + 1, cr);
/* 3.4.7.2 */
if (rr->cipher_on && sc) {
@@ -863,15 +863,17 @@ static int gsm48_rr_rx_cip_mode_cmd(struct osmocom_ms *ms, struct msgb *msg)
}
/* check if we actually support this cipher */
- if ((alg_id == GSM_CIPHER_A5_1 && !sup->a5_1)
- || (alg_id == GSM_CIPHER_A5_2 && !sup->a5_2)
- || (alg_id == GSM_CIPHER_A5_3 && !sup->a5_3)
- || (alg_id == GSM_CIPHER_A5_4 && !sup->a5_4)
- || (alg_id == GSM_CIPHER_A5_5 && !sup->a5_5)
- || (alg_id == GSM_CIPHER_A5_6 && !sup->a5_6)
- || (alg_id == GSM_CIPHER_A5_7 && !sup->a5_7))
+ if (sc && ((alg_id == GSM_CIPHER_A5_1 && !sup->a5_1)
+ || (alg_id == GSM_CIPHER_A5_2 && !sup->a5_2)
+ || (alg_id == GSM_CIPHER_A5_3 && !sup->a5_3)
+ || (alg_id == GSM_CIPHER_A5_4 && !sup->a5_4)
+ || (alg_id == GSM_CIPHER_A5_5 && !sup->a5_5)
+ || (alg_id == GSM_CIPHER_A5_6 && !sup->a5_6)
+ || (alg_id == GSM_CIPHER_A5_7 && !sup->a5_7))) {
+ LOGP(DRR, LOGL_NOTICE, "algo not supported\n");
return gsm48_rr_tx_rr_status(ms,
GSM48_RR_CAUSE_CHAN_MODE_UNACCT);
+ }
/* check if we have no key */
if (sc && subscr->key_seq == 7) {
@@ -1018,7 +1020,7 @@ int gsm48_rr_enc_cm2(struct osmocom_ms *ms, struct gsm48_classmark2 *cm)
cm->pwr_lev = sup->pwr_lev_1800;
else
cm->pwr_lev = sup->pwr_lev_900;
- cm->a5_1 = sup->a5_1;
+ cm->a5_1 = !sup->a5_1;
cm->es_ind = sup->es_ind;
cm->rev_lev = sup->rev_lev;
cm->fc = (sup->r_gsm || sup->e_gsm);