aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmsc/gsm_04_08.c
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-12-28 21:22:32 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2018-12-29 02:10:12 +0100
commitbc6b8fbd0839f89ce55672e19b0581dabad7853e (patch)
tree6051f32beb6299598dd1d9779556d6d8e279895b /src/libmsc/gsm_04_08.c
parente5eb6d4ffd862b14858b28cc2b705c7c64836924 (diff)
fix vlr ops.subscr_assoc re-associationneels/35c335c3
In rare cases, a conn is already associated with a subscriber. So far, we abort()ed on that. Rather log an error and keep the service running. Related: OS#3743 Change-Id: Ic0d54644bc735700220b1ef3a4384c217d57d20f
Diffstat (limited to 'src/libmsc/gsm_04_08.c')
-rw-r--r--src/libmsc/gsm_04_08.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index 7fdd3f447..2955632f5 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -1804,12 +1804,22 @@ static void update_classmark(const struct gsm_classmark *src, struct gsm_classma
}
/* VLR informs us that the subscriber has been associated with a conn */
-static void msc_vlr_subscr_assoc(void *msc_conn_ref,
+static int msc_vlr_subscr_assoc(void *msc_conn_ref,
struct vlr_subscr *vsub)
{
struct ran_conn *conn = msc_conn_ref;
OSMO_ASSERT(vsub);
- OSMO_ASSERT(!conn->vsub);
+ if (conn->vsub) {
+ if (conn->vsub == vsub)
+ LOGPCONN(conn, LOGL_NOTICE, "msc_vlr_subscr_assoc(): conn already associated with %s\n",
+ vlr_subscr_name(vsub));
+ else {
+ LOGPCONN(conn, LOGL_ERROR, "msc_vlr_subscr_assoc(): conn already associated with a subscriber,"
+ " cannot associate with %s\n", vlr_subscr_name(vsub));
+ return -EINVAL;
+ }
+ }
+ OSMO_ASSERT(!conn->vsub || conn->vsub );
conn->vsub = vlr_subscr_get(vsub);
OSMO_ASSERT(conn->vsub);
conn->vsub->cs.attached_via_ran = conn->via_ran;
@@ -1820,6 +1830,7 @@ static void msc_vlr_subscr_assoc(void *msc_conn_ref,
update_classmark(&conn->temporary_classmark, &conn->vsub->classmark);
ran_conn_update_id(conn);
+ return 0;
}
static int msc_vlr_route_gsup_msg(struct vlr_subscr *vsub,