rewrite db backend
diff --git a/include/openbsc/db.h b/include/openbsc/db.h
index 9501ec8..d102dfe 100644
--- a/include/openbsc/db.h
+++ b/include/openbsc/db.h
@@ -20,27 +20,17 @@
 #ifndef _DB_H
 #define _DB_H
 
-#include <stdint.h>
+#include <sys/types.h>
 
-#define NUMBER_LENGTH 32
-
-typedef struct {
-    uint64_t imsi;
-    uint64_t tmsi;
-    char number[NUMBER_LENGTH];
-    uint16_t lac;
-} db_subscriber;
+#include <openbsc/gsm_subscriber.h>
 
 int db_init();
 int db_prepare();
 int db_fini();
 
-int db_insert_imei(uint64_t imei);
-
-int db_insert_imsi(uint64_t imsi);
-int db_imsi_set_tmsi(uint64_t imsi, uint64_t tmsi);
-int db_imsi_set_lac(uint64_t imsi, uint16_t lac);
-int db_imsi_get_subscriber(uint64_t imsi, db_subscriber* subscriber);
-int db_tmsi_get_subscriber(uint64_t tmsi, db_subscriber* subscriber);
+struct gsm_subscriber* db_create_subscriber(char imsi[GSM_IMSI_LENGTH]);
+int db_get_subscriber(enum gsm_subscriber_field field, struct gsm_subscriber* subscriber);
+int db_set_subscriber(struct gsm_subscriber* subscriber);
+int db_subscriber_alloc_tmsi(struct gsm_subscriber* subscriber);
 
 #endif /* _DB_H */
diff --git a/include/openbsc/gsm_subscriber.h b/include/openbsc/gsm_subscriber.h
index 5bdf579..d2c0d4f 100644
--- a/include/openbsc/gsm_subscriber.h
+++ b/include/openbsc/gsm_subscriber.h
@@ -4,13 +4,20 @@
 #include <sys/types.h>
 #include "gsm_data.h"
 
+#define GSM_IMSI_LENGTH 17
+#define GSM_TMSI_LENGTH 17
+#define GSM_NAME_LENGTH 128
+
 struct gsm_subscriber {
-	char *name;
-	u_int8_t tmsi[4];
+	char imsi[GSM_IMSI_LENGTH];
+	char tmsi[GSM_TMSI_LENGTH];
+	u_int16_t lac;
+	char name[GSM_NAME_LENGTH];
 };
 
-struct gsm_subscriber *subscr_get_by_tmsi(u_int8_t *tmsi);
-struct gsm_subscriber *subscr_get_by_imsi(u_int8_t *imsi);
-int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts);
+enum gsm_subscriber_field {
+	GSM_SUBSCRIBER_IMSI,
+	GSM_SUBSCRIBER_TMSI,
+};
 
 #endif /* _GSM_SUBSCR_H */