aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-04-02 23:10:28 +0200
committerNeels Hofmeyr <neels@hofmeyr.de>2018-04-05 01:10:32 +0200
commit93c7463fcea24517ef367101609f34264570f1d0 (patch)
tree822cf5bd33e3c5cfced7ccde8d3680d822bfd51d /src
parent16c42b5fbacb93867f41f529893b6af8a1a54c5b (diff)
unify allocation of gsm_subscriber_connection
The current msc_subscr_con_allocate() was in fact only used by msc_vlr_tests, while both a_iface_bssap.c and iucs.c did their own duplicate code of allocating the gsm_subscriber_connection struct. Unify. Drop the old msc_subscr_con_allocate(), instead add msc_subscr_conn_alloc(). The new function also takes via_ran and lac arguments directly. The conn allocation will soon be closely tied to the subscr_conn_fsm instance allocation, so place the new function definition alongside the other subscr_conn_fsm API, and match its naming ("conn"). Related: OS#3122 Change-Id: Ia57b42a149a43f9c370b1310e2e1f512183993ea
Diffstat (limited to 'src')
-rw-r--r--src/libmsc/a_iface_bssap.c7
-rw-r--r--src/libmsc/iucs.c7
-rw-r--r--src/libmsc/subscr_conn.c20
3 files changed, 22 insertions, 12 deletions
diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c
index 743814cd3..1665e2307 100644
--- a/src/libmsc/a_iface_bssap.c
+++ b/src/libmsc/a_iface_bssap.c
@@ -54,14 +54,10 @@ static struct gsm_subscriber_connection *subscr_conn_allocate_a(const struct a_c
LOGP(DMSC, LOGL_DEBUG, "Allocating A-Interface subscriber conn: lac %i, conn_id %i\n", lac, conn_id);
- conn = talloc_zero(network, struct gsm_subscriber_connection);
+ conn = msc_subscr_conn_alloc(network, RAN_GERAN_A, lac);
if (!conn)
return NULL;
- conn->network = network;
- conn->via_ran = RAN_GERAN_A;
- conn->lac = lac;
-
conn->a.conn_id = conn_id;
conn->a.scu = scu;
@@ -69,7 +65,6 @@ static struct gsm_subscriber_connection *subscr_conn_allocate_a(const struct a_c
* identify later which BSC is responsible for this subscriber connection */
memcpy(&conn->a.bsc_addr, &a_conn_info->bsc->bsc_addr, sizeof(conn->a.bsc_addr));
- llist_add_tail(&conn->entry, &network->subscr_conns);
LOGPCONN(conn, LOGL_DEBUG, "A-Interface subscriber connection successfully allocated!\n");
return conn;
}
diff --git a/src/libmsc/iucs.c b/src/libmsc/iucs.c
index d6da1f795..a3092f86e 100644
--- a/src/libmsc/iucs.c
+++ b/src/libmsc/iucs.c
@@ -57,17 +57,12 @@ static struct gsm_subscriber_connection *subscr_conn_allocate_iu(struct gsm_netw
DEBUGP(DIUCS, "Allocating IuCS subscriber conn: lac %d, conn_id %" PRIx32 "\n",
lac, ue->conn_id);
- conn = talloc_zero(network, struct gsm_subscriber_connection);
+ conn = msc_subscr_conn_alloc(network, RAN_UTRAN_IU, lac);
if (!conn)
return NULL;
- conn->network = network;
- conn->via_ran = RAN_UTRAN_IU;
conn->iu.ue_ctx = ue;
conn->iu.ue_ctx->rab_assign_addr_enc = network->iu.rab_assign_addr_enc;
- conn->lac = lac;
-
- llist_add_tail(&conn->entry, &network->subscr_conns);
return conn;
}
diff --git a/src/libmsc/subscr_conn.c b/src/libmsc/subscr_conn.c
index fc89a663f..5629d26f9 100644
--- a/src/libmsc/subscr_conn.c
+++ b/src/libmsc/subscr_conn.c
@@ -369,6 +369,26 @@ void msc_subscr_conn_init(void)
osmo_fsm_register(&subscr_conn_fsm);
}
+/* Allocate a new subscriber conn. */
+struct gsm_subscriber_connection *msc_subscr_conn_alloc(struct gsm_network *network,
+ enum ran_type via_ran, uint16_t lac)
+{
+ struct gsm_subscriber_connection *conn;
+
+ conn = talloc_zero(network, struct gsm_subscriber_connection);
+ if (!conn)
+ return NULL;
+
+ *conn = (struct gsm_subscriber_connection){
+ .network = network,
+ .via_ran = via_ran,
+ .lac = lac,
+ };
+
+ llist_add_tail(&conn->entry, &network->subscr_conns);
+ return conn;
+}
+
const struct value_string complete_layer3_type_names[] = {
{ COMPLETE_LAYER3_NONE, "NONE" },
{ COMPLETE_LAYER3_LU, "LU" },