diff options
author | Andreas.Eversberg <jolly@eversberg.eu> | 2010-09-15 14:21:06 +0000 |
---|---|---|
committer | Andreas.Eversberg <jolly@eversberg.eu> | 2010-09-15 14:21:06 +0000 |
commit | dece8977f438983f681feeeeb8a6f736859be98e (patch) | |
tree | 5b3869d4854198d07b3d7195b7e88580a370bb93 /src/host/layer23 | |
parent | d33ffcc3f14f175843ad72066c0a3c83db1717ac (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')
-rw-r--r-- | src/host/layer23/src/mobile/gsm48_mm.c | 2 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/gsm48_rr.c | 24 |
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); |