diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2012-12-26 18:55:54 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2012-12-26 18:55:54 +0100 |
commit | 19cf0e81b336ead3c0a55d1c9d6722f986510bc0 (patch) | |
tree | f78ac1ca37b836aa3b7ff1dbfc6b861ac44ab5b4 /src/common/bts.c | |
parent | 5f408f934ca868ff209049bd92f3b0896a0eccac (diff) |
ciphering: Handle ciphering support for A5/3 correctly
This was found and debugged by Sylvain. The BTS will always support
A5/0 so we do not keep track of that, the first bit of the flags is
used for A5/1, second for A5/2... but for RSL there is an offset to
go from RSL to A5(x). Add a testcase and change the code.
Diffstat (limited to 'src/common/bts.c')
-rw-r--r-- | src/common/bts.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/common/bts.c b/src/common/bts.c index 1375f4a5..8f6dc694 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -213,3 +213,18 @@ struct msgb *bts_agch_dequeue(struct gsm_bts *bts) return msgb_dequeue(&btsb->agch_queue); } + +int bts_supports_cipher(struct gsm_bts_role_bts *bts, int rsl_cipher) +{ + int sup; + + if (rsl_cipher < 1 || rsl_cipher > 8) + return -ENOTSUP; + + /* No encryption is always supported */ + if (rsl_cipher == 1) + return 1; + + sup = (1 << (rsl_cipher - 2)) & bts->support.ciphers; + return sup > 0; +} |