From 2223025e218263af6e1157ef1eeca1686cefe4b9 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 19 Aug 2009 12:53:57 +0200 Subject: [tmsi] Make the tmsi a 4 octet number MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tmsi is four octets long, there is no need to make it a string and then jump through hoops to convert it to a number. Keep the database using it as a string to benefit from the NULL handling of the db. Introduce the reserved tmsi which has all bits set to 1 according to GSM 03.03 ยง2.4 and start checking for it and make sure the db code will never allocate such a tmsi. --- openbsc/src/gsm_subscriber.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'openbsc/src/gsm_subscriber.c') diff --git a/openbsc/src/gsm_subscriber.c b/openbsc/src/gsm_subscriber.c index 84e14a0ea..a4e35c7b1 100644 --- a/openbsc/src/gsm_subscriber.c +++ b/openbsc/src/gsm_subscriber.c @@ -35,17 +35,19 @@ extern struct llist_head *subscr_bsc_active_subscriber(void); struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, - const char *tmsi) + u_int32_t tmsi) { + char tmsi_string[14]; struct gsm_subscriber *subscr; /* we might have a record in memory already */ llist_for_each_entry(subscr, subscr_bsc_active_subscriber(), entry) { - if (strcmp(subscr->tmsi, tmsi) == 0) + if (tmsi == subscr->tmsi) return subscr_get(subscr); } - return db_get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi); + sprintf(tmsi_string, "%u", tmsi); + return db_get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi_string); } struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, -- cgit v1.2.3