This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.
Alexander Chemeris alexander.chemeris at gmail.comI looked at the patch and it looks sane to me. On Tue, Oct 8, 2013 at 1:44 PM, Holger Hans Peter Freyther <holger at freyther.de> wrote: > From: Holger Hans Peter Freyther <holger at moiji-mobile.com> > > The database code should not know about the network. Move the > setting of the network pointer into the subscriber layer. > --- > openbsc/include/openbsc/db.h | 6 ++---- > openbsc/include/openbsc/gsm_subscriber.h | 2 ++ > openbsc/src/libmsc/db.c | 9 +++------ > openbsc/src/libmsc/gsm_04_08.c | 4 ++-- > openbsc/src/libmsc/gsm_subscriber.c | 25 +++++++++++++++++++++---- > openbsc/src/libmsc/vty_interface_layer3.c | 2 +- > openbsc/tests/db/db_test.c | 12 ++++++------ > 7 files changed, 37 insertions(+), 23 deletions(-) > > diff --git a/openbsc/include/openbsc/db.h b/openbsc/include/openbsc/db.h > index 25c2aea..a89c22d 100644 > --- a/openbsc/include/openbsc/db.h > +++ b/openbsc/include/openbsc/db.h > @@ -35,10 +35,8 @@ int db_prepare(void); > int db_fini(void); > > /* subscriber management */ > -struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, > - char *imsi); > -struct gsm_subscriber *db_get_subscriber(struct gsm_network *net, > - enum gsm_subscriber_field field, > +struct gsm_subscriber *db_create_subscriber(const char *imsi); > +struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, > const char *subscr); > int db_sync_subscriber(struct gsm_subscriber *subscriber); > int db_subscriber_expire(void *priv, void (*callback)(void *priv, long long unsigned int id)); > diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h > index 6b577b0..7aae4c3 100644 > --- a/openbsc/include/openbsc/gsm_subscriber.h > +++ b/openbsc/include/openbsc/gsm_subscriber.h > @@ -73,6 +73,8 @@ enum gsm_subscriber_update_reason { > > struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr); > struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr); > +struct gsm_subscriber *subscr_create_subscriber(struct gsm_network *net, > + const char *imsi); > struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, > uint32_t tmsi); > struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, > diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c > index 9a8cd88..d179c4e 100644 > --- a/openbsc/src/libmsc/db.c > +++ b/openbsc/src/libmsc/db.c > @@ -315,13 +315,13 @@ int db_fini(void) > return 0; > } > > -struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, char *imsi) > +struct gsm_subscriber *db_create_subscriber(const char *imsi) > { > dbi_result result; > struct gsm_subscriber *subscr; > > /* Is this subscriber known in the db? */ > - subscr = db_get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); > + subscr = db_get_subscriber(GSM_SUBSCRIBER_IMSI, imsi); > if (subscr) { > result = dbi_conn_queryf(conn, > "UPDATE Subscriber set updated = datetime('now') " > @@ -346,7 +346,6 @@ struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, char *imsi) > ); > if (!result) > LOGP(DDB, LOGL_ERROR, "Failed to create Subscriber by IMSI.\n"); > - subscr->net = net; > subscr->id = dbi_conn_sequence_last(conn, NULL); > strncpy(subscr->imsi, imsi, GSM_IMSI_LENGTH-1); > dbi_result_free(result); > @@ -645,8 +644,7 @@ static void db_set_from_query(struct gsm_subscriber *subscr, dbi_conn result) > } > > #define BASE_QUERY "SELECT * FROM Subscriber " > -struct gsm_subscriber *db_get_subscriber(struct gsm_network *net, > - enum gsm_subscriber_field field, > +struct gsm_subscriber *db_get_subscriber(enum gsm_subscriber_field field, > const char *id) > { > dbi_result result; > @@ -704,7 +702,6 @@ struct gsm_subscriber *db_get_subscriber(struct gsm_network *net, > } > > subscr = subscr_alloc(); > - subscr->net = net; > subscr->id = dbi_result_get_ulonglong(result, "id"); > > db_set_from_query(subscr, result); > diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c > index a299590..c41443e 100644 > --- a/openbsc/src/libmsc/gsm_04_08.c > +++ b/openbsc/src/libmsc/gsm_04_08.c > @@ -474,7 +474,7 @@ static int mm_rx_id_resp(struct gsm_subscriber_connection *conn, struct msgb *ms > if (!conn->subscr) { > conn->subscr = subscr_get_by_imsi(net, mi_string); > if (!conn->subscr) > - conn->subscr = db_create_subscriber(net, mi_string); > + conn->subscr = subscr_create_subscriber(net, mi_string); > } > if (conn->loc_operation) > conn->loc_operation->waiting_for_imsi = 0; > @@ -586,7 +586,7 @@ static int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb > /* look up subscriber based on IMSI, create if not found */ > subscr = subscr_get_by_imsi(bts->network, mi_string); > if (!subscr) { > - subscr = db_create_subscriber(bts->network, mi_string); > + subscr = subscr_create_subscriber(bts->network, mi_string); > } > break; > case GSM_MI_TYPE_TMSI: > diff --git a/openbsc/src/libmsc/gsm_subscriber.c b/openbsc/src/libmsc/gsm_subscriber.c > index 5ace8f6..bc6f3cf 100644 > --- a/openbsc/src/libmsc/gsm_subscriber.c > +++ b/openbsc/src/libmsc/gsm_subscriber.c > @@ -78,6 +78,15 @@ enum { > REQ_STATE_DISPATCHED, > }; > > +static struct gsm_subscriber *get_subscriber(struct gsm_network *net, > + int type, const char *ident) > +{ > + struct gsm_subscriber *subscr = db_get_subscriber(type, ident); > + if (subscr) > + subscr->net = net; > + return subscr; > +} > + > /* > * We got the channel assigned and can now hand this channel > * over to one of our callbacks. > @@ -266,6 +275,14 @@ void subscr_put_channel(struct gsm_subscriber *subscr) > subscr_send_paging_request(subscr); > } > > +struct gsm_subscriber *subscr_create_subscriber(struct gsm_network *net, > + const char *imsi) > +{ > + struct gsm_subscriber *subscr = db_create_subscriber(imsi); > + if (subscr) > + subscr->net = net; > + return subscr; > +} > > struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, > uint32_t tmsi) > @@ -280,7 +297,7 @@ struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, > } > > sprintf(tmsi_string, "%u", tmsi); > - return db_get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi_string); > + return get_subscriber(net, GSM_SUBSCRIBER_TMSI, tmsi_string); > } > > struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, > @@ -293,7 +310,7 @@ struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, > return subscr_get(subscr); > } > > - return db_get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); > + return get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); > } > > struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net, > @@ -306,7 +323,7 @@ struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net, > return subscr_get(subscr); > } > > - return db_get_subscriber(net, GSM_SUBSCRIBER_EXTENSION, ext); > + return get_subscriber(net, GSM_SUBSCRIBER_EXTENSION, ext); > } > > struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net, > @@ -321,7 +338,7 @@ struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net, > return subscr_get(subscr); > } > > - return db_get_subscriber(net, GSM_SUBSCRIBER_ID, buf); > + return get_subscriber(net, GSM_SUBSCRIBER_ID, buf); > } > > int subscr_update_expire_lu(struct gsm_subscriber *s, struct gsm_bts *bts) > diff --git a/openbsc/src/libmsc/vty_interface_layer3.c b/openbsc/src/libmsc/vty_interface_layer3.c > index acb4af7..e0324d6 100644 > --- a/openbsc/src/libmsc/vty_interface_layer3.c > +++ b/openbsc/src/libmsc/vty_interface_layer3.c > @@ -229,7 +229,7 @@ DEFUN(subscriber_create, > struct gsm_network *gsmnet = gsmnet_from_vty(vty); > struct gsm_subscriber *subscr; > > - subscr = db_create_subscriber(gsmnet, argv[0]); > + subscr = subscr_create_subscriber(gsmnet, argv[0]); > if (!subscr) { > vty_out(vty, "%% No subscriber created for IMSI %s%s", > argv[0], VTY_NEWLINE); > diff --git a/openbsc/tests/db/db_test.c b/openbsc/tests/db/db_test.c > index c3beee2..3c5de90 100644 > --- a/openbsc/tests/db/db_test.c > +++ b/openbsc/tests/db/db_test.c > @@ -78,32 +78,32 @@ int main() > struct gsm_subscriber *alice_db; > > char *alice_imsi = "3243245432345"; > - alice = db_create_subscriber(NULL, alice_imsi); > + alice = db_create_subscriber(alice_imsi); > db_sync_subscriber(alice); > - alice_db = db_get_subscriber(NULL, GSM_SUBSCRIBER_IMSI, alice->imsi); > + alice_db = db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice->imsi); > COMPARE(alice, alice_db); > SUBSCR_PUT(alice_db); > SUBSCR_PUT(alice); > > alice_imsi = "3693245423445"; > - alice = db_create_subscriber(NULL, alice_imsi); > + alice = db_create_subscriber(alice_imsi); > db_subscriber_assoc_imei(alice, "1234567890"); > db_subscriber_alloc_tmsi(alice); > alice->lac=42; > db_sync_subscriber(alice); > - alice_db = db_get_subscriber(NULL, GSM_SUBSCRIBER_IMSI, alice_imsi); > + alice_db = db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice_imsi); > COMPARE(alice, alice_db); > SUBSCR_PUT(alice); > SUBSCR_PUT(alice_db); > > alice_imsi = "9993245423445"; > - alice = db_create_subscriber(NULL, alice_imsi); > + alice = db_create_subscriber(alice_imsi); > db_subscriber_alloc_tmsi(alice); > alice->lac=42; > db_sync_subscriber(alice); > db_subscriber_assoc_imei(alice, "1234567890"); > db_subscriber_assoc_imei(alice, "6543560920"); > - alice_db = db_get_subscriber(NULL, GSM_SUBSCRIBER_IMSI, alice_imsi); > + alice_db = db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice_imsi); > COMPARE(alice, alice_db); > SUBSCR_PUT(alice); > SUBSCR_PUT(alice_db); > -- > 1.8.4.rc3 > > -- Regards, Alexander Chemeris. CEO, Fairwaves LLC / ООО УмРадио http://fairwaves.ru