diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-11-29 22:37:51 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-11-30 22:45:42 +0100 |
commit | c036b79918dbeb2baefff177be51dfdd9dac1588 (patch) | |
tree | 86dbac47aa1a05ffe3f0bf5341664c92a98ba300 /src | |
parent | d03e7289156f1b54926a5a63ce97a3ef954f0c9d (diff) |
rename gsm_subscriber_connection to ran_conn
In preparation for inter-BSC and inter-MSC handover, we need to separate the
subscriber management logic from the actual RAN connections. What better time
to finally rename gsm_subscriber_connection.
* Name choice:
In 2G, this is a connection to the BSS, but even though 3GPP TS commonly talk
of "BSS-A" and "BSS-B" when explaining handover, it's not good to call it
"bss_conn": in 3G a BSS is called RNS, IIUC.
The overall term for 2G (GERAN) and 3G (UTRAN) is RAN: Radio Access Network.
* Rationale:
A subscriber in the MSC so far has only one RAN connection, but e.g. for
inter-BSC handover, a second one needs to be created to handover to. Most of
the items in the former gsm_subscriber_connection are actually related to the
RAN, with only a few MM and RTP related items. So, as a first step, just rename
it to ran_conn, to cosmetically prepare for moving the not strictly RAN related
items away later.
Also:
- Rename some functions from msc_subscr_conn_* to ran_conn_*
- Rename "Subscr_Conn" FSM instance name to "RAN_conn"
- Rename SUBSCR_CONN_* to RAN_CONN_*
Change-Id: Ic595f7a558d3553c067f77dc67543ab59659707a
Diffstat (limited to 'src')
-rw-r--r-- | src/libmsc/a_iface.c | 24 | ||||
-rw-r--r-- | src/libmsc/a_iface_bssap.c | 60 | ||||
-rw-r--r-- | src/libmsc/gsm_04_08.c | 142 | ||||
-rw-r--r-- | src/libmsc/gsm_04_08_cc.c | 16 | ||||
-rw-r--r-- | src/libmsc/gsm_04_11.c | 24 | ||||
-rw-r--r-- | src/libmsc/gsm_04_14.c | 18 | ||||
-rw-r--r-- | src/libmsc/gsm_04_80.c | 8 | ||||
-rw-r--r-- | src/libmsc/gsm_09_11.c | 14 | ||||
-rw-r--r-- | src/libmsc/gsm_subscriber.c | 8 | ||||
-rw-r--r-- | src/libmsc/iucs.c | 32 | ||||
-rw-r--r-- | src/libmsc/iucs_ranap.c | 12 | ||||
-rw-r--r-- | src/libmsc/msc_ifaces.c | 10 | ||||
-rw-r--r-- | src/libmsc/msc_mgcp.c | 24 | ||||
-rw-r--r-- | src/libmsc/msc_vty.c | 14 | ||||
-rw-r--r-- | src/libmsc/osmo_msc.c | 62 | ||||
-rw-r--r-- | src/libmsc/rrlp.c | 4 | ||||
-rw-r--r-- | src/libmsc/silent_call.c | 12 | ||||
-rw-r--r-- | src/libmsc/smpp_openbsc.c | 10 | ||||
-rw-r--r-- | src/libmsc/smpp_smsc.h | 6 | ||||
-rw-r--r-- | src/libmsc/subscr_conn.c | 384 | ||||
-rw-r--r-- | src/libmsc/transaction.c | 14 | ||||
-rw-r--r-- | src/libvlr/vlr.c | 2 | ||||
-rw-r--r-- | src/osmo-msc/msc_main.c | 2 |
23 files changed, 450 insertions, 452 deletions
diff --git a/src/libmsc/a_iface.c b/src/libmsc/a_iface.c index bd9b89035..fa0cb5f62 100644 --- a/src/libmsc/a_iface.c +++ b/src/libmsc/a_iface.c @@ -142,12 +142,12 @@ static struct bsc_context *get_bsc_context_by_sccp_addr(const struct osmo_sccp_a /* Send DTAP message via A-interface, take ownership of msg */ int a_iface_tx_dtap(struct msgb *msg) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct msgb *msg_resp; uint8_t link_id = OMSC_LINKID_CB(msg); OSMO_ASSERT(msg); - conn = (struct gsm_subscriber_connection *)msg->dst; + conn = (struct ran_conn *)msg->dst; OSMO_ASSERT(conn); OSMO_ASSERT(conn->a.scu); @@ -171,7 +171,7 @@ int a_iface_tx_dtap(struct msgb *msg) } /* Send Cipher mode command via A-interface */ -int a_iface_tx_cipher_mode(const struct gsm_subscriber_connection *conn, +int a_iface_tx_cipher_mode(const struct ran_conn *conn, struct gsm0808_encrypt_info *ei, int include_imeisv) { /* TODO generalize for A- and Iu interfaces, don't name after 08.08 */ @@ -358,7 +358,7 @@ static int enc_speech_codec_list(struct gsm0808_speech_codec_list *scl, const st /* Send assignment request via A-interface */ int a_iface_tx_assignment(const struct gsm_trans *trans) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct gsm0808_channel_type ct; struct gsm0808_speech_codec_list scl; uint32_t *ci_ptr = NULL; @@ -412,7 +412,7 @@ int a_iface_tx_assignment(const struct gsm_trans *trans) } /* Send clear command via A-interface */ -int a_iface_tx_clear_cmd(struct gsm_subscriber_connection *conn) +int a_iface_tx_clear_cmd(struct ran_conn *conn) { struct msgb *msg; @@ -422,7 +422,7 @@ int a_iface_tx_clear_cmd(struct gsm_subscriber_connection *conn) return osmo_sccp_tx_data_msg(conn->a.scu, conn->a.conn_id, msg); } -int a_iface_tx_classmark_request(const struct gsm_subscriber_connection *conn) +int a_iface_tx_classmark_request(const struct ran_conn *conn) { struct msgb *msg; @@ -443,7 +443,7 @@ static void a_reset_cb(const void *priv) if (!gsm_network) return; - /* Clear all now orphaned subscriber connections */ + /* Clear all now orphaned RAN connections */ a_clear_all(bsc_ctx->sccp_user, &bsc_ctx->bsc_addr); /* Send reset to the remote BSC */ @@ -612,22 +612,22 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu) return rc; } -/* Clear all subscriber connections on a specified BSC */ +/* Clear all RAN connections on a specified BSC */ void a_clear_all(struct osmo_sccp_user *scu, const struct osmo_sccp_addr *bsc_addr) { - struct gsm_subscriber_connection *conn; - struct gsm_subscriber_connection *conn_temp; + struct ran_conn *conn; + struct ran_conn *conn_temp; struct gsm_network *network = gsm_network; OSMO_ASSERT(scu); OSMO_ASSERT(bsc_addr); - llist_for_each_entry_safe(conn, conn_temp, &network->subscr_conns, entry) { + llist_for_each_entry_safe(conn, conn_temp, &network->ran_conns, entry) { /* Clear only A connections and connections that actually * belong to the specified BSC */ if (conn->via_ran == RAN_GERAN_A && memcmp(bsc_addr, &conn->a.bsc_addr, sizeof(conn->a.bsc_addr)) == 0) { uint32_t conn_id = conn->a.conn_id; - LOGPCONN(conn, LOGL_NOTICE, "Dropping orphaned subscriber connection\n"); + LOGPCONN(conn, LOGL_NOTICE, "Dropping orphaned RAN connection\n"); /* This call will/may talloc_free(conn), so we must save conn_id above */ msc_clear_request(conn, GSM48_CC_CAUSE_SWITCH_CONG); diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c index 77d84b32c..31cdb06ef 100644 --- a/src/libmsc/a_iface_bssap.c +++ b/src/libmsc/a_iface_bssap.c @@ -45,16 +45,16 @@ * Helper functions to lookup and allocate subscribers */ -/* Allocate a new subscriber connection */ -static struct gsm_subscriber_connection *subscr_conn_allocate_a(const struct a_conn_info *a_conn_info, +/* Allocate a new RAN connection */ +static struct ran_conn *ran_conn_allocate_a(const struct a_conn_info *a_conn_info, struct gsm_network *network, uint16_t lac, struct osmo_sccp_user *scu, int conn_id) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; - LOGP(DMSC, LOGL_DEBUG, "Allocating A-Interface subscriber conn: lac %i, conn_id %i\n", lac, conn_id); + LOGP(DMSC, LOGL_DEBUG, "Allocating A-Interface RAN conn: lac %i, conn_id %i\n", lac, conn_id); - conn = msc_subscr_conn_alloc(network, RAN_GERAN_A, lac); + conn = ran_conn_alloc(network, RAN_GERAN_A, lac); if (!conn) return NULL; @@ -62,18 +62,18 @@ static struct gsm_subscriber_connection *subscr_conn_allocate_a(const struct a_c conn->a.scu = scu; /* Also backup the calling address of the BSC, this allows us to - * identify later which BSC is responsible for this subscriber connection */ + * identify later which BSC is responsible for this RAN connection */ memcpy(&conn->a.bsc_addr, &a_conn_info->bsc->bsc_addr, sizeof(conn->a.bsc_addr)); - LOGPCONN(conn, LOGL_DEBUG, "A-Interface subscriber connection successfully allocated!\n"); + LOGPCONN(conn, LOGL_DEBUG, "A-Interface RAN connection successfully allocated!\n"); return conn; } -/* Return an existing A subscriber connection record for the given +/* Return an existing A RAN connection record for the given * connection IDs, or return NULL if not found. */ -static struct gsm_subscriber_connection *subscr_conn_lookup_a(const struct gsm_network *network, int conn_id) +static struct ran_conn *ran_conn_lookup_a(const struct gsm_network *network, int conn_id) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; OSMO_ASSERT(network); @@ -83,7 +83,7 @@ static struct gsm_subscriber_connection *subscr_conn_lookup_a(const struct gsm_n * maybe this function should be public to reach it from here? */ /* log_subscribers(network); */ - llist_for_each_entry(conn, &network->subscr_conns, entry) { + llist_for_each_entry(conn, &network->ran_conns, entry) { if (conn->via_ran == RAN_GERAN_A && conn->a.conn_id == conn_id) { LOGPCONN(conn, LOGL_DEBUG, "Found A subscriber for conn_id %i\n", conn_id); return conn; @@ -111,7 +111,7 @@ static void bssmap_rx_reset(struct osmo_sccp_user *scu, const struct a_conn_info osmo_sccp_tx_unitdata_msg(scu, &a_conn_info->bsc->msc_addr, &a_conn_info->bsc->bsc_addr, gsm0808_create_reset_ack()); - /* Make sure all orphand subscriber connections will be cleard */ + /* Make sure all orphand RAN connections will be cleard */ a_clear_all(scu, &a_conn_info->bsc->bsc_addr); if (!a_conn_info->bsc->reset_fsm) @@ -213,7 +213,7 @@ void a_sccp_rx_udt(struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_ */ /* Endpoint to handle BSSMAP clear request */ -static int bssmap_rx_clear_rqst(struct gsm_subscriber_connection *conn, +static int bssmap_rx_clear_rqst(struct ran_conn *conn, struct msgb *msg, struct tlv_parsed *tp) { uint8_t cause; @@ -226,7 +226,7 @@ static int bssmap_rx_clear_rqst(struct gsm_subscriber_connection *conn, } cause = TLVP_VAL(tp, GSM0808_IE_CAUSE)[0]; - msc_subscr_conn_mo_close(conn, cause); + ran_conn_mo_close(conn, cause); return 0; } @@ -234,14 +234,14 @@ static int bssmap_rx_clear_rqst(struct gsm_subscriber_connection *conn, /* Endpoint to handle BSSMAP clear complete */ static int bssmap_rx_clear_complete(struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_info, - struct gsm_subscriber_connection *conn) + struct ran_conn *conn) { int rc; LOGPCONN(conn, LOGL_INFO, "Rx BSSMAP CLEAR COMPLETE, releasing SCCP connection\n"); if (conn) - msc_subscr_conn_rx_bssmap_clear_complete(conn); + ran_conn_rx_bssmap_clear_complete(conn); rc = osmo_sccp_tx_disconn(scu, a_conn_info->conn_id, NULL, SCCP_RELEASE_CAUSE_END_USER_ORIGINATED); @@ -261,7 +261,7 @@ static int bssmap_rx_l3_compl(struct osmo_sccp_user *scu, const struct a_conn_in uint8_t data_length; const uint8_t *data; struct gsm_network *network = a_conn_info->network; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; LOGP(DBSSAP, LOGL_INFO, "Rx BSSMAP COMPLETE L3 INFO (conn_id=%i)\n", a_conn_info->conn_id); @@ -340,7 +340,7 @@ static int bssmap_rx_l3_compl(struct osmo_sccp_user *scu, const struct a_conn_in } /* Create new subscriber context */ - conn = subscr_conn_allocate_a(a_conn_info, network, lac, scu, a_conn_info->conn_id); + conn = ran_conn_allocate_a(a_conn_info, network, lac, scu, a_conn_info->conn_id); /* Handover location update to the MSC code */ msc_compl_l3(conn, msg, 0); @@ -348,7 +348,7 @@ static int bssmap_rx_l3_compl(struct osmo_sccp_user *scu, const struct a_conn_in } /* Endpoint to handle BSSMAP classmark update */ -static int bssmap_rx_classmark_upd(struct gsm_subscriber_connection *conn, struct msgb *msg, +static int bssmap_rx_classmark_upd(struct ran_conn *conn, struct msgb *msg, struct tlv_parsed *tp) { const uint8_t *cm2 = NULL; @@ -378,7 +378,7 @@ static int bssmap_rx_classmark_upd(struct gsm_subscriber_connection *conn, struc } /* Endpoint to handle BSSMAP cipher mode complete */ -static int bssmap_rx_ciph_compl(struct gsm_subscriber_connection *conn, struct msgb *msg, +static int bssmap_rx_ciph_compl(struct ran_conn *conn, struct msgb *msg, struct tlv_parsed *tp) { /* FIXME: The field GSM0808_IE_LAYER_3_MESSAGE_CONTENTS is optional by @@ -413,7 +413,7 @@ static int bssmap_rx_ciph_compl(struct gsm_subscriber_connection *conn, struct m } /* Endpoint to handle BSSMAP cipher mode reject, 3GPP TS 08.08 ยง3.2.1.48 */ -static int bssmap_rx_ciph_rej(struct gsm_subscriber_connection *conn, +static int bssmap_rx_ciph_rej(struct ran_conn *conn, struct msgb *msg, struct tlv_parsed *tp) { int rc; @@ -440,7 +440,7 @@ static int bssmap_rx_ciph_rej(struct gsm_subscriber_connection *conn, } /* Endpoint to handle BSSMAP assignment failure */ -static int bssmap_rx_ass_fail(struct gsm_subscriber_connection *conn, struct msgb *msg, +static int bssmap_rx_ass_fail(struct ran_conn *conn, struct msgb *msg, struct tlv_parsed *tp) { uint8_t cause; @@ -473,7 +473,7 @@ static int bssmap_rx_ass_fail(struct gsm_subscriber_connection *conn, struct msg } /* Endpoint to handle sapi "n" reject */ -static int bssmap_rx_sapi_n_rej(struct gsm_subscriber_connection *conn, struct msgb *msg, +static int bssmap_rx_sapi_n_rej(struct ran_conn *conn, struct msgb *msg, struct tlv_parsed *tp) { uint8_t dlci; @@ -538,7 +538,7 @@ static enum mgcp_codecs mgcp_codec_from_sc(struct gsm0808_speech_codec *sc) } /* Endpoint to handle assignment complete */ -static int bssmap_rx_ass_compl(struct gsm_subscriber_connection *conn, struct msgb *msg, +static int bssmap_rx_ass_compl(struct ran_conn *conn, struct msgb *msg, struct tlv_parsed *tp) { struct sockaddr_storage rtp_addr; @@ -590,7 +590,7 @@ static int bssmap_rx_ass_compl(struct gsm_subscriber_connection *conn, struct ms /* Handle incoming connection oriented BSSMAP messages */ static int rx_bssmap(struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_info, struct msgb *msg) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct tlv_parsed tp; int rc; uint8_t msg_type; @@ -616,11 +616,11 @@ static int rx_bssmap(struct osmo_sccp_user *scu, const struct a_conn_info *a_con break; } - conn = subscr_conn_lookup_a(a_conn_info->network, a_conn_info->conn_id); + conn = ran_conn_lookup_a(a_conn_info->network, a_conn_info->conn_id); if (!conn) { - LOGP(DBSSAP, LOGL_ERROR, "Couldn't find subscr_conn for conn_id=%d\n", a_conn_info->conn_id); + LOGP(DBSSAP, LOGL_ERROR, "Couldn't find ran_conn for conn_id=%d\n", a_conn_info->conn_id); /* We expect a Clear Complete to come in on a valid conn. But if for some reason we still - * have the SCCP connection while the subscriber connection data is already gone, at + * have the SCCP connection while the RAN connection data is already gone, at * least close the SCCP conn. */ if (msg_type == BSS_MAP_MSG_CLEAR_COMPLETE) @@ -660,10 +660,10 @@ static int rx_bssmap(struct osmo_sccp_user *scu, const struct a_conn_info *a_con static int rx_dtap(const struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_info, struct msgb *msg) { struct gsm_network *network = a_conn_info->network; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct dtap_header *dtap = (struct dtap_header *) msg->l2h; - conn = subscr_conn_lookup_a(network, a_conn_info->conn_id); + conn = ran_conn_lookup_a(network, a_conn_info->conn_id); if (!conn) { return -EINVAL; } diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c index 6569a9a52..407144e9b 100644 --- a/src/libmsc/gsm_04_08.c +++ b/src/libmsc/gsm_04_08.c @@ -77,16 +77,16 @@ void *tall_locop_ctx; void *tall_authciphop_ctx; -static int gsm0408_loc_upd_acc(struct gsm_subscriber_connection *conn, +static int gsm0408_loc_upd_acc(struct ran_conn *conn, uint32_t send_tmsi); /*! Send a simple GSM 04.08 message without any payload - * \param conn Active subscriber connection + * \param conn Active RAN connection * \param[in] pdisc Protocol discriminator * \param[in] msg_type Message type * \return result of \ref gsm48_conn_sendmsg */ -int gsm48_tx_simple(struct gsm_subscriber_connection *conn, +int gsm48_tx_simple(struct ran_conn *conn, uint8_t pdisc, uint8_t msg_type) { struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 TX SIMPLE"); @@ -176,7 +176,7 @@ static int classmark_supports_a5(const struct gsm_classmark *cm, uint8_t a5) } } -int gsm48_conn_sendmsg(struct msgb *msg, struct gsm_subscriber_connection *conn, struct gsm_trans *trans) +int gsm48_conn_sendmsg(struct msgb *msg, struct ran_conn *conn, struct gsm_trans *trans) { struct gsm48_hdr *gh = (struct gsm48_hdr *) msg->data; @@ -206,7 +206,7 @@ void gsm0408_clear_all_trans(struct gsm_network *net, int protocol) } /* Chapter 9.2.14 : Send LOCATION UPDATING REJECT */ -static int gsm0408_loc_upd_rej(struct gsm_subscriber_connection *conn, uint8_t cause) +static int gsm0408_loc_upd_rej(struct ran_conn *conn, uint8_t cause) { struct msgb *msg; @@ -223,7 +223,7 @@ static int gsm0408_loc_upd_rej(struct gsm_subscriber_connection *conn, uint8_t c } /* Chapter 9.2.13 : Send LOCATION UPDATE ACCEPT */ -static int gsm0408_loc_upd_acc(struct gsm_subscriber_connection *conn, +static int gsm0408_loc_upd_acc(struct ran_conn *conn, uint32_t send_tmsi) { struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 LOC UPD ACC"); @@ -274,7 +274,7 @@ static int gsm0408_loc_upd_acc(struct gsm_subscriber_connection *conn, } /* Transmit Chapter 9.2.10 Identity Request */ -static int mm_tx_identity_req(struct gsm_subscriber_connection *conn, uint8_t id_type) +static int mm_tx_identity_req(struct ran_conn *conn, uint8_t id_type) { struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 ID REQ"); struct gsm48_hdr *gh; @@ -288,7 +288,7 @@ static int mm_tx_identity_req(struct gsm_subscriber_connection *conn, uint8_t id } /* Parse Chapter 9.2.11 Identity Response */ -static int mm_rx_id_resp(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int mm_rx_id_resp(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); uint8_t mi_type = gh->data[1] & GSM_MI_TYPE_MASK; @@ -319,7 +319,7 @@ static const struct value_string lupd_names[] = { /* Chapter 9.2.15: Receive Location Updating Request. * Keep this function non-static for direct invocation by unit tests. */ -int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb *msg) +int mm_rx_loc_upd_req(struct ran_conn *conn, struct msgb *msg) { struct gsm_network *net = conn->network; struct gsm48_hdr *gh = msgb_l3(msg); @@ -339,7 +339,7 @@ int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb *msg) gsm48_mi_to_string(mi_string, sizeof(mi_string), lu->mi, lu->mi_len); - if (msc_subscr_conn_is_establishing_auth_ciph(conn)) { + if (ran_conn_is_establishing_auth_ciph(conn)) { LOGP(DMM, LOGL_ERROR, "Cannot accept another LU, conn already busy establishing authenticity;" " extraneous LOCATION UPDATING REQUEST: MI(%s)=%s type=%s\n", @@ -347,7 +347,7 @@ int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb *msg) return -EINVAL; } - if (msc_subscr_conn_is_accepted(conn)) { + if (ran_conn_is_accepted(conn)) { LOGP(DMM, LOGL_ERROR, "Cannot accept another LU, conn already established;" " extraneous LOCATION UPDATING REQUEST: MI(%s)=%s type=%s\n", @@ -355,7 +355,7 @@ int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb *msg) return -EINVAL; } - msc_subscr_conn_update_id(conn, COMPLETE_LAYER3_LU, mi_string); + ran_conn_update_id(conn, COMPLETE_LAYER3_LU, mi_string); DEBUGP(DMM, "LOCATION UPDATING REQUEST: MI(%s)=%s type=%s\n", gsm48_mi_type_name(mi_type), mi_string, @@ -406,7 +406,7 @@ int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb *msg) is_utran = (conn->via_ran == RAN_UTRAN_IU); lu_fsm = vlr_loc_update(conn->fi, - SUBSCR_CONN_E_ACCEPTED, SUBSCR_CONN_E_CN_CLOSE, NULL, + RAN_CONN_E_ACCEPTED, RAN_CONN_E_CN_CLOSE, NULL, net->vlr, conn, vlr_lu_type, tmsi, imsi, &old_lai, &new_lai, is_utran || conn->network->authentication_required, @@ -433,7 +433,7 @@ int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb *msg) conn->vsub->classmark.classmark1 = lu->classmark1; conn->vsub->classmark.classmark1_set = true; - msc_subscr_conn_complete_layer_3(conn); + ran_conn_complete_layer_3(conn); return 0; } @@ -451,7 +451,7 @@ static uint8_t bcdify(uint8_t value) /* Section 9.2.15a */ -int gsm48_tx_mm_info(struct gsm_subscriber_connection *conn) +int gsm48_tx_mm_info(struct ran_conn *conn) { struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 MM INF"); struct gsm48_hdr *gh; @@ -602,7 +602,7 @@ int gsm48_tx_mm_info(struct gsm_subscriber_connection *conn) return gsm48_conn_sendmsg(msg, conn, NULL); } -/*! Send an Authentication Request to MS on the given subscriber connection +/*! Send an Authentication Request to MS on the given RAN connection * according to 3GPP/ETSI TS 24.008, Section 9.2.2. * \param[in] conn Subscriber connection to send on. * \param[in] rand Random challenge token to send, must be 16 bytes long. @@ -610,7 +610,7 @@ int gsm48_tx_mm_info(struct gsm_subscriber_connection *conn) * send; must be 16 bytes long, or pass NULL for plain GSM auth. * \param[in] key_seq auth tuple's sequence number. */ -int gsm48_tx_mm_auth_req(struct gsm_subscriber_connection *conn, uint8_t *rand, +int gsm48_tx_mm_auth_req(struct ran_conn *conn, uint8_t *rand, uint8_t *autn, int key_seq) { struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 AUTH REQ"); @@ -640,7 +640,7 @@ int gsm48_tx_mm_auth_req(struct gsm_subscriber_connection *conn, uint8_t *rand, } /* Section 9.2.1 */ -int gsm48_tx_mm_auth_rej(struct gsm_subscriber_connection *conn) +int gsm48_tx_mm_auth_rej(struct ran_conn *conn) { DEBUGP(DMM, "-> AUTH REJECT\n"); return gsm48_tx_simple(conn, GSM48_PDISC_MM, GSM48_MT_MM_AUTH_REJ); @@ -649,7 +649,7 @@ int gsm48_tx_mm_auth_rej(struct gsm_subscriber_connection *conn) static int msc_vlr_tx_cm_serv_acc(void *msc_conn_ref); static int msc_vlr_tx_cm_serv_rej(void *msc_conn_ref, enum gsm48_reject_value result); -static int cm_serv_reuse_conn(struct gsm_subscriber_connection *conn, const uint8_t *mi_lv) +static int cm_serv_reuse_conn(struct ran_conn *conn, const uint8_t *mi_lv) { uint8_t mi_type; char mi_string[GSM48_MI_SIZE]; @@ -687,9 +687,9 @@ accept_reuse: if (!conn->received_cm_service_request) { conn->received_cm_service_request = true; - msc_subscr_conn_get(conn, MSC_CONN_USE_CM_SERVICE); + ran_conn_get(conn, MSC_CONN_USE_CM_SERVICE); } - msc_subscr_conn_update_id(conn, conn->complete_layer3_type, mi_string); + ran_conn_update_id(conn, conn->complete_layer3_type, mi_string); return conn->network->vlr->ops.tx_cm_serv_acc(conn); } @@ -704,7 +704,7 @@ accept_reuse: * * Keep this function non-static for direct invocation by unit tests. */ -int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct msgb *msg) +int gsm48_rx_mm_serv_req(struct ran_conn *conn, struct msgb *msg) { struct gsm_network *net = conn->network; uint8_t mi_type; @@ -771,10 +771,10 @@ int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct msgb *ms return msc_gsm48_tx_mm_serv_rej(conn, GSM48_REJECT_SRV_OPT_NOT_SUPPORTED); } - if (msc_subscr_conn_is_accepted(conn)) + if (ran_conn_is_accepted(conn)) return cm_serv_reuse_conn(conn, mi_p); - if (msc_subscr_conn_is_establishing_auth_ciph(conn)) { + if (ran_conn_is_establishing_auth_ciph(conn)) { LOGP(DMM, LOGL_ERROR, "Cannot accept CM Service Request, conn already busy establishing authenticity\n"); msc_vlr_tx_cm_serv_rej(conn, GSM48_REJECT_CONGESTION); @@ -782,13 +782,13 @@ int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct msgb *ms /* or should we accept and note down the service request anyway? */ } - msc_subscr_conn_update_id(conn, COMPLETE_LAYER3_CM_SERVICE_REQ, mi_string); + ran_conn_update_id(conn, COMPLETE_LAYER3_CM_SERVICE_REQ, mi_string); osmo_signal_dispatch(SS_SUBSCR, S_SUBSCR_IDENTITY, mi_p); is_utran = (conn->via_ran == RAN_UTRAN_IU); vlr_proc_acc_req(conn->fi, - SUBSCR_CONN_E_ACCEPTED, SUBSCR_CONN_E_CN_CLOSE, NULL, + RAN_CONN_E_ACCEPTED, RAN_CONN_E_CN_CLOSE, NULL, net->vlr, conn, VLR_PR_ARQ_T_CM_SERV_REQ, mi-1, &lai, is_utran || conn->network->authentication_required, @@ -807,12 +807,12 @@ int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct msgb *ms memcpy(conn->vsub->classmark.classmark2, classmark2, classmark2_len); conn->vsub->classmark.classmark2_len = classmark2_len; - msc_subscr_conn_complete_layer_3(conn); + ran_conn_complete_layer_3(conn); return 0; } /* Receive a CM Re-establish Request */ -static int gsm48_rx_cm_reest_req(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm48_rx_cm_reest_req(struct ran_conn *conn, struct msgb *msg) { uint8_t mi_type; char mi_string[GSM48_MI_SIZE]; @@ -831,7 +831,7 @@ static int gsm48_rx_cm_reest_req(struct gsm_subscriber_connection *conn, struct return msc_gsm48_tx_mm_serv_rej(conn, GSM48_REJECT_SRV_OPT_NOT_SUPPORTED); } -static int gsm48_rx_mm_imsi_detach_ind(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm48_rx_mm_imsi_detach_ind(struct ran_conn *conn, struct msgb *msg) { struct gsm_network *network = conn->network; struct gsm48_hdr *gh = msgb_l3(msg); @@ -884,7 +884,7 @@ static int gsm48_rx_mm_imsi_detach_ind(struct gsm_subscriber_connection *conn, s vlr_subscr_put(vsub); } - msc_subscr_conn_close(conn, 0); + ran_conn_close(conn, 0); return 0; } @@ -898,7 +898,7 @@ static int gsm48_rx_mm_status(struct msgb *msg) } static int parse_gsm_auth_resp(uint8_t *res, uint8_t *res_len, - struct gsm_subscriber_connection *conn, + struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); @@ -918,7 +918,7 @@ static int parse_gsm_auth_resp(uint8_t *res, uint8_t *res_len, } static int parse_umts_auth_resp(uint8_t *res, uint8_t *res_len, - struct gsm_subscriber_connection *conn, + struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh; @@ -970,7 +970,7 @@ static int parse_umts_auth_resp(uint8_t *res, uint8_t *res_len, } /* Chapter 9.2.3: Authentication Response */ -static int gsm48_rx_mm_auth_resp(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm48_rx_mm_auth_resp(struct ran_conn *conn, struct msgb *msg) { uint8_t res[16]; uint8_t res_len; @@ -980,7 +980,7 @@ static int gsm48_rx_mm_auth_resp(struct gsm_subscriber_connection *conn, struct if (!conn->vsub) { LOGP(DMM, LOGL_ERROR, "MM AUTHENTICATION RESPONSE: invalid: no subscriber\n"); - msc_subscr_conn_close(conn, GSM_CAUSE_AUTH_FAILED); + ran_conn_close(conn, GSM_CAUSE_AUTH_FAILED); return -EINVAL; } @@ -1010,7 +1010,7 @@ static int gsm48_rx_mm_auth_resp(struct gsm_subscriber_connection *conn, struct res, res_len); } -static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm48_rx_mm_auth_fail(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); uint8_t cause; @@ -1021,7 +1021,7 @@ static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct if (!conn->vsub) { LOGP(DMM, LOGL_ERROR, "MM R99 AUTHENTICATION FAILURE: invalid: no subscriber\n"); - msc_subscr_conn_close(conn, GSM_CAUSE_AUTH_FAILED); + ran_conn_close(conn, GSM_CAUSE_AUTH_FAILED); return -EINVAL; } @@ -1030,7 +1030,7 @@ static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct "%s: MM R99 AUTHENTICATION FAILURE:" " l3 length invalid: %u\n", vlr_subscr_name(conn->vsub), msgb_l3len(msg)); - msc_subscr_conn_close(conn, GSM_CAUSE_AUTH_FAILED); + ran_conn_close(conn, GSM_CAUSE_AUTH_FAILED); return -EINVAL; } @@ -1053,7 +1053,7 @@ static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct "%s: MM R99 AUTHENTICATION FAILURE:" " invalid Synch Failure: missing AUTS IE\n", vlr_subscr_name(conn->vsub)); - msc_subscr_conn_close(conn, GSM_CAUSE_AUTH_FAILED); + ran_conn_close(conn, GSM_CAUSE_AUTH_FAILED); return -EINVAL; } @@ -1070,7 +1070,7 @@ static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct " got IE 0x%02x of %u bytes\n", vlr_subscr_name(conn->vsub), GSM48_IE_AUTS, auts_tag, auts_len); - msc_subscr_conn_close(conn, GSM_CAUSE_AUTH_FAILED); + ran_conn_close(conn, GSM_CAUSE_AUTH_FAILED); return -EINVAL; } @@ -1079,7 +1079,7 @@ static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct "%s: MM R99 AUTHENTICATION FAILURE:" " invalid Synch Failure msg: message truncated (%u)\n", vlr_subscr_name(conn->vsub), msgb_l3len(msg)); - msc_subscr_conn_close(conn, GSM_CAUSE_AUTH_FAILED); + ran_conn_close(conn, GSM_CAUSE_AUTH_FAILED); return -EINVAL; } @@ -1092,7 +1092,7 @@ static int gsm48_rx_mm_auth_fail(struct gsm_subscriber_connection *conn, struct return vlr_subscr_rx_auth_fail(conn->vsub, auts); } -static int gsm48_rx_mm_tmsi_reall_compl(struct gsm_subscriber_connection *conn) +static int gsm48_rx_mm_tmsi_reall_compl(struct ran_conn *conn) { DEBUGP(DMM, "TMSI Reallocation Completed. Subscriber: %s\n", vlr_subscr_name(conn->vsub)); @@ -1105,7 +1105,7 @@ static int gsm48_rx_mm_tmsi_reall_compl(struct gsm_subscriber_connection *conn) } /* Receive a GSM 04.08 Mobility Management (MM) message */ -static int gsm0408_rcv_mm(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm0408_rcv_mm(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); int rc = 0; @@ -1148,7 +1148,7 @@ static int gsm0408_rcv_mm(struct gsm_subscriber_connection *conn, struct msgb *m } /* Receive a PAGING RESPONSE message from the MS */ -static int gsm48_rx_rr_pag_resp(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm48_rx_rr_pag_resp(struct ran_conn *conn, struct msgb *msg) { struct gsm_network *net = conn->network; struct gsm48_hdr *gh = msgb_l3(msg); @@ -1171,24 +1171,24 @@ static int gsm48_rx_rr_pag_resp(struct gsm_subscriber_connection *conn, struct m return -EINVAL; } - if (msc_subscr_conn_is_establishing_auth_ciph(conn)) { + if (ran_conn_is_establishing_auth_ciph(conn)) { LOGP(DMM, LOGL_ERROR, "Ignoring Paging Response, conn already busy establishing authenticity\n"); return 0; } - if (msc_subscr_conn_is_accepted(conn)) { + if (ran_conn_is_accepted(conn)) { LOGP(DMM, LOGL_ERROR, "Ignoring Paging Response, conn already established\n"); return 0; } DEBUGP(DRR, "PAGING RESPONSE: MI(%s)=%s\n", gsm48_mi_type_name(mi_type), mi_string); - msc_subscr_conn_update_id(conn, COMPLETE_LAYER3_PAGING_RESP, mi_string); + ran_conn_update_id(conn, COMPLETE_LAYER3_PAGING_RESP, mi_string); is_utran = (conn->via_ran == RAN_UTRAN_IU); vlr_proc_acc_req(conn->fi, - SUBSCR_CONN_E_ACCEPTED, SUBSCR_CONN_E_CN_CLOSE, NULL, + RAN_CONN_E_ACCEPTED, RAN_CONN_E_CN_CLOSE, NULL, net->vlr, conn, VLR_PR_ARQ_T_PAGING_RESP, mi_lv, &lai, is_utran || conn->network->authentication_required, @@ -1207,11 +1207,11 @@ static int gsm48_rx_rr_pag_resp(struct gsm_subscriber_connection *conn, struct m memcpy(conn->vsub->classmark.classmark2, classmark2, classmark2_len); conn->vsub->classmark.classmark2_len = classmark2_len; - msc_subscr_conn_complete_layer_3(conn); + ran_conn_complete_layer_3(conn); return 0; } -static int gsm48_rx_rr_app_info(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm48_rx_rr_app_info(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); uint8_t apdu_id_flags; @@ -1234,7 +1234,7 @@ static int gsm48_rx_rr_app_info(struct gsm_subscriber_connection *conn, struct m } /* Receive a GSM 04.08 Radio Resource (RR) message */ -static int gsm0408_rcv_rr(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm0408_rcv_rr(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); int rc = 0; @@ -1255,7 +1255,7 @@ static int gsm0408_rcv_rr(struct gsm_subscriber_connection *conn, struct msgb *m return rc; } -int gsm48_send_rr_app_info(struct gsm_subscriber_connection *conn, uint8_t apdu_id, +int gsm48_send_rr_app_info(struct ran_conn *conn, uint8_t apdu_id, uint8_t apdu_len, const uint8_t *apdu) { struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 APP INF"); @@ -1311,7 +1311,7 @@ static bool msg_is_initially_permitted(const struct gsm48_hdr *hdr) return false; } -void cm_service_request_concludes(struct gsm_subscriber_connection *conn, +void cm_service_request_concludes(struct ran_conn *conn, struct msgb *msg) { @@ -1332,7 +1332,7 @@ void cm_service_request_concludes(struct gsm_subscriber_connection *conn, gsm48_pdisc_msgtype_name(pdisc, msg_type)); } conn->received_cm_service_request = false; - msc_subscr_conn_put(conn, MSC_CONN_USE_CM_SERVICE); + ran_conn_put(conn, MSC_CONN_USE_CM_SERVICE); } /* TS 24.007 11.2.3.2.3 Message Type Octet / Duplicate Detection */ @@ -1393,7 +1393,7 @@ static uint8_t gsm0407_determine_nsd_ret_modulo_r98(uint8_t pdisc, uint8_t msg_t } /* TS 24.007 11.2.3.2 Message Type Octet / Duplicate Detection */ -static bool gsm0407_is_duplicate(struct gsm_subscriber_connection *conn, struct msgb *msg) +static bool gsm0407_is_duplicate(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh; uint8_t pdisc; @@ -1425,10 +1425,10 @@ static bool gsm0407_is_duplicate(struct gsm_subscriber_connection *conn, struct } } -extern int gsm0408_rcv_cc(struct gsm_subscriber_connection *conn, struct msgb *msg); +extern int gsm0408_rcv_cc(struct ran_conn *conn, struct msgb *msg); /* Main entry point for GSM 04.08/44.008 Layer 3 data (e.g. from the BSC). */ -int gsm0408_dispatch(struct gsm_subscriber_connection *conn, struct msgb *msg) +int gsm0408_dispatch(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh; uint8_t pdisc; @@ -1451,7 +1451,7 @@ int gsm0408_dispatch(struct gsm_subscriber_connection *conn, struct msgb *msg) gsm48_pdisc_msgtype_name(pdisc, gsm48_hdr_msg_type(gh)), pdisc, gsm48_hdr_msg_type(gh)); - if (!msc_subscr_conn_is_accepted(conn) + if (!ran_conn_is_accepted(conn) && !msg_is_initially_permitted(gh)) { LOGP(DRLL, LOGL_ERROR, "subscr %s: Message not permitted for initial conn: %s\n", @@ -1518,7 +1518,7 @@ int gsm0408_dispatch(struct gsm_subscriber_connection *conn, struct msgb *msg) static int msc_vlr_tx_auth_req(void *msc_conn_ref, struct gsm_auth_tuple *at, bool send_autn) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; return gsm48_tx_mm_auth_req(conn, at->vec.rand, send_autn? at->vec.autn : NULL, at->key_seq); @@ -1527,48 +1527,48 @@ static int msc_vlr_tx_auth_req(void *msc_conn_ref, struct gsm_auth_tuple *at, /* VLR asks us to send an authentication reject */ static int msc_vlr_tx_auth_rej(void *msc_conn_ref) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; return gsm48_tx_mm_auth_rej(conn); } /* VLR asks us to transmit an Identity Request of given type */ static int msc_vlr_tx_id_req(void *msc_conn_ref, uint8_t mi_type) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; return mm_tx_identity_req(conn, mi_type); } /* VLR asks us to transmit a Location Update Accept */ static int msc_vlr_tx_lu_acc(void *msc_conn_ref, uint32_t send_tmsi) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; return gsm0408_loc_upd_acc(conn, send_tmsi); } /* VLR asks us to transmit a Location Update Reject */ static int msc_vlr_tx_lu_rej(void *msc_conn_ref, enum gsm48_reject_value cause) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; return gsm0408_loc_upd_rej(conn, cause); } /* VLR asks us to transmit a CM Service Accept */ static int msc_vlr_tx_cm_serv_acc(void *msc_conn_ref) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; return msc_gsm48_tx_mm_serv_ack(conn); } static int msc_vlr_tx_common_id(void *msc_conn_ref) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; return msc_tx_common_id(conn); } /* VLR asks us to transmit MM info. */ static int msc_vlr_tx_mm_info(void *msc_conn_ref) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; if (!conn->network->send_mm_info) return 0; return gsm48_tx_mm_info(conn); @@ -1577,14 +1577,14 @@ static int msc_vlr_tx_mm_info(void *msc_conn_ref) /* VLR asks us to transmit a CM Service Reject */ static int msc_vlr_tx_cm_serv_rej(void *msc_conn_ref, enum gsm48_reject_value cause) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; int rc; rc = msc_gsm48_tx_mm_serv_rej(conn, cause); if (conn->received_cm_service_request) { conn->received_cm_service_request = false; - msc_subscr_conn_put(conn, MSC_CONN_USE_CM_SERVICE); + ran_conn_put(conn, MSC_CONN_USE_CM_SERVICE); } return rc; @@ -1594,7 +1594,7 @@ static int msc_vlr_tx_cm_serv_rej(void *msc_conn_ref, enum gsm48_reject_value ca osmo_static_assert(sizeof(((struct gsm0808_encrypt_info*)0)->key) >= sizeof(((struct osmo_auth_vector*)0)->kc), gsm0808_encrypt_info_key_fits_osmo_auth_vec_kc); -int msc_geran_set_cipher_mode(struct gsm_subscriber_connection *conn, bool umts_aka, bool retrieve_imeisv) +int msc_geran_set_cipher_mode(struct ran_conn *conn, bool umts_aka, bool retrieve_imeisv) { struct gsm_network *net = conn->network; struct gsm0808_encrypt_info ei; @@ -1679,7 +1679,7 @@ int msc_vlr_set_ciph_mode(void *msc_conn_ref, bool umts_aka, bool retrieve_imeisv) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; struct vlr_subscr *vsub; struct gsm_auth_tuple *tuple; @@ -1723,7 +1723,7 @@ int msc_vlr_set_ciph_mode(void *msc_conn_ref, return -ENOTSUP; } -void msc_rx_sec_mode_compl(struct gsm_subscriber_connection *conn) +void msc_rx_sec_mode_compl(struct ran_conn *conn) { struct vlr_ciph_result vlr_res = {}; @@ -1767,7 +1767,7 @@ static void update_classmark(const struct gsm_classmark *src, struct gsm_classma static void msc_vlr_subscr_assoc(void *msc_conn_ref, struct vlr_subscr *vsub) { - struct gsm_subscriber_connection *conn = msc_conn_ref; + struct ran_conn *conn = msc_conn_ref; OSMO_ASSERT(vsub); OSMO_ASSERT(!conn->vsub); conn->vsub = vlr_subscr_get(vsub); diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c index c9dffe3a5..516fc511d 100644 --- a/src/libmsc/gsm_04_08_cc.c +++ b/src/libmsc/gsm_04_08_cc.c @@ -310,7 +310,7 @@ static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg); static int setup_trig_pag_evt(unsigned int hooknum, unsigned int event, struct msgb *msg, void *_conn, void *_transt) { - struct gsm_subscriber_connection *conn = _conn; + struct ran_conn *conn = _conn; struct gsm_trans *transt = _transt; enum gsm_paging_event paging_event = event; @@ -322,7 +322,7 @@ static int setup_trig_pag_evt(unsigned int hooknum, unsigned int event, vlr_subscr_msisdn_or_name(transt->vsub)); OSMO_ASSERT(conn); /* Assign conn */ - transt->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_CC); + transt->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_CC); transt->paging_request = NULL; /* send SETUP request to called party */ gsm48_cc_tx_setup(transt, &transt->cc.msg); @@ -1755,7 +1755,7 @@ int gsm48_tch_rtp_create(struct gsm_trans *trans) * mgcp-gw expects the incoming RTP stream from the remote * end (e.g. Asterisk) is known. */ - struct gsm_subscriber_connection *conn = trans->conn; + struct ran_conn *conn = trans->conn; struct gsm_network *network = conn->network; mncc_recv_rtp_sock(network, trans, MNCC_RTP_CREATE); @@ -1859,7 +1859,7 @@ int mncc_tx_to_cc(struct gsm_network *net, int msg_type, void *arg) { int i, rc = 0; struct gsm_trans *trans = NULL, *transt; - struct gsm_subscriber_connection *conn = NULL; + struct ran_conn *conn = NULL; struct gsm_mncc *data = arg, rel; DEBUGP(DMNCC, "receive message %s\n", get_mncc_name(msg_type)); @@ -2005,7 +2005,7 @@ int mncc_tx_to_cc(struct gsm_network *net, int msg_type, void *arg) } /* Assign conn */ - trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_CC); + trans->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_CC); trans->dlci = 0x00; /* SAPI=0, not SACCH */ vlr_subscr_put(vsub); } else { @@ -2112,7 +2112,7 @@ static struct datastate { #define DATASLLEN \ (sizeof(datastatelist) / sizeof(struct datastate)) -int gsm0408_rcv_cc(struct gsm_subscriber_connection *conn, struct msgb *msg) +int gsm0408_rcv_cc(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); uint8_t msg_type = gsm48_hdr_msg_type(gh); @@ -2160,7 +2160,7 @@ int gsm0408_rcv_cc(struct gsm_subscriber_connection *conn, struct msgb *msg) return -ENOMEM; } /* Assign transaction */ - trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_CC); + trans->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_CC); trans->dlci = OMSC_LINKID_CB(msg); /* DLCI as received from BSC */ cm_service_request_concludes(conn, msg); } @@ -2179,6 +2179,6 @@ int gsm0408_rcv_cc(struct gsm_subscriber_connection *conn, struct msgb *msg) rc = datastatelist[i].rout(trans, msg); - msc_subscr_conn_communicating(conn); + ran_conn_communicating(conn); return rc; } diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c index b60234447..d214f2e86 100644 --- a/src/libmsc/gsm_04_11.c +++ b/src/libmsc/gsm_04_11.c @@ -120,7 +120,7 @@ static void send_signal(int sig_no, osmo_signal_dispatch(SS_SMS, sig_no, &sig); } -static int gsm411_sendmsg(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm411_sendmsg(struct ran_conn *conn, struct msgb *msg) { DEBUGP(DLSMS, "GSM4.11 TX %s\n", msgb_hexdump(msg)); msg->l3h = msg->data; @@ -131,7 +131,7 @@ static int gsm411_sendmsg(struct gsm_subscriber_connection *conn, struct msgb *m static int paging_cb_mmsms_est_req(unsigned int hooknum, unsigned int event, struct msgb *msg, void *_conn, void *_trans) { - struct gsm_subscriber_connection *conn = _conn; + struct ran_conn *conn = _conn; struct gsm_trans *trans = _trans; struct gsm_sms *sms = trans->sms.sms; int rc = 0; @@ -148,7 +148,7 @@ static int paging_cb_mmsms_est_req(unsigned int hooknum, unsigned int event, switch (event) { case GSM_PAGING_SUCCEEDED: /* Associate transaction with established connection */ - trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_SMS); + trans->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_SMS); /* Confirm successful connection establishment */ gsm411_smc_recv(&trans->sms.smc_inst, GSM411_MMSMS_EST_CNF, NULL, 0); @@ -404,7 +404,7 @@ static int gsm340_gen_sms_status_report_tpdu(struct msgb *msg, return msg->len - old_msg_len; } -static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, +static int sms_route_mt_sms(struct ran_conn *conn, struct gsm_sms *gsms) { int rc; @@ -475,7 +475,7 @@ try_local: static int gsm340_rx_tpdu(struct gsm_trans *trans, struct msgb *msg, uint32_t gsm411_msg_ref) { - struct gsm_subscriber_connection *conn = trans->conn; + struct ran_conn *conn = trans->conn; uint8_t *smsp = msgb_sms(msg); struct gsm_sms *gsms; unsigned int sms_alphabet; @@ -753,7 +753,7 @@ static struct gsm_sms *sms_report_alloc(struct gsm_sms *sms) } static void sms_status_report(struct gsm_sms *gsms, - struct gsm_subscriber_connection *conn) + struct ran_conn *conn) { struct gsm_sms *sms_report; int rc; @@ -980,7 +980,7 @@ static int gsm411_mn_recv(struct gsm411_smc_inst *inst, int msg_type, static struct gsm_trans *gsm411_alloc_mt_trans(struct gsm_network *net, struct vlr_subscr *vsub) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct gsm_trans *trans; int tid; @@ -1010,7 +1010,7 @@ static struct gsm_trans *gsm411_alloc_mt_trans(struct gsm_network *net, conn = connection_for_subscr(vsub); if (conn) { /* Associate transaction with connection */ - trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_SMS); + trans->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_SMS); /* Generate unique RP Message Reference */ trans->sms.sm_rp_mr = conn->next_rp_ref++; } @@ -1095,7 +1095,7 @@ int gsm411_send_sms(struct gsm_network *net, } /* Entry point for incoming GSM48_PDISC_SMS from abis_rsl.c */ -int gsm0411_rcv_sms(struct gsm_subscriber_connection *conn, +int gsm0411_rcv_sms(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); @@ -1140,7 +1140,7 @@ int gsm0411_rcv_sms(struct gsm_subscriber_connection *conn, gsm411_smr_init(&trans->sms.smr_inst, 0, 1, gsm411_rl_recv, gsm411_mn_send); - trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_SMS); + trans->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_SMS); trans->dlci = OMSC_LINKID_CB(msg); /* DLCI as received from BSC */ new_trans = 1; @@ -1171,7 +1171,7 @@ int gsm0411_rcv_sms(struct gsm_subscriber_connection *conn, } } - msc_subscr_conn_communicating(conn); + ran_conn_communicating(conn); gsm411_smc_recv(&trans->sms.smc_inst, (new_trans) ? GSM411_MMSMS_EST_IND : GSM411_MMSMS_DATA_IND, @@ -1200,7 +1200,7 @@ void _gsm411_sms_trans_free(struct gsm_trans *trans) } /* Process incoming SAPI N-REJECT from BSC */ -void gsm411_sapi_n_reject(struct gsm_subscriber_connection *conn) +void gsm411_sapi_n_reject(struct ran_conn *conn) { struct gsm_network *net; struct gsm_trans *trans, *tmp; diff --git a/src/libmsc/gsm_04_14.c b/src/libmsc/gsm_04_14.c index 2be534c94..8fe03a88b 100644 --- a/src/libmsc/gsm_04_14.c +++ b/src/libmsc/gsm_04_14.c @@ -51,12 +51,12 @@ static struct msgb *create_gsm0414_msg(uint8_t msg_type) return msg; } -static int gsm0414_conn_sendmsg(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int gsm0414_conn_sendmsg(struct ran_conn *conn, struct msgb *msg) { return msc_tx_dtap(conn, msg); } -static int gsm0414_tx_simple(struct gsm_subscriber_connection *conn, uint8_t msg_type) +static int gsm0414_tx_simple(struct ran_conn *conn, uint8_t msg_type) { struct msgb *msg = create_gsm0414_msg(msg_type); @@ -65,7 +65,7 @@ static int gsm0414_tx_simple(struct gsm_subscriber_connection *conn, uint8_t msg /* Send a CLOSE_TCH_LOOOP_CMD according to Section 8.1 */ -int gsm0414_tx_close_tch_loop_cmd(struct gsm_subscriber_connection *conn, +int gsm0414_tx_close_tch_loop_cmd(struct ran_conn *conn, enum gsm414_tch_loop_mode loop_mode) { struct msgb *msg = create_gsm0414_msg(GSM414_MT_CLOSE_TCH_LOOP_CMD); @@ -78,25 +78,25 @@ int gsm0414_tx_close_tch_loop_cmd(struct gsm_subscriber_connection *conn, } /* Send a OPEN_LOOP_CMD according to Section 8.3 */ -int gsm0414_tx_open_loop_cmd(struct gsm_subscriber_connection *conn) +int gsm0414_tx_open_loop_cmd(struct ran_conn *conn) { return gsm0414_tx_simple(conn, GSM414_MT_OPEN_LOOP_CMD); } /* Send a ACT_EMMI_CMD according to Section 8.8 */ -int gsm0414_tx_act_emmi_cmd(struct gsm_subscriber_connection *conn) +int gsm0414_tx_act_emmi_cmd(struct ran_conn *conn) { return gsm0414_tx_simple(conn, GSM414_MT_ACT_EMMI_CMD); } /* Send a DEACT_EMMI_CMD according to Section 8.10 */ -int gsm0414_tx_deact_emmi_cmd(struct gsm_subscriber_connection *conn) +int gsm0414_tx_deact_emmi_cmd(struct ran_conn *conn) { return gsm0414_tx_simple(conn, GSM414_MT_DEACT_EMMI_CMD); } /* Send a TEST_INTERFACE according to Section 8.11 */ -int gsm0414_tx_test_interface(struct gsm_subscriber_connection *conn, +int gsm0414_tx_test_interface(struct ran_conn *conn, uint8_t tested_devs) { struct msgb *msg = create_gsm0414_msg(GSM414_MT_TEST_INTERFACE); @@ -105,7 +105,7 @@ int gsm0414_tx_test_interface(struct gsm_subscriber_connection *conn, } /* Send a RESET_MS_POSITION_STORED according to Section 8.11 */ -int gsm0414_tx_reset_ms_pos_store(struct gsm_subscriber_connection *conn, +int gsm0414_tx_reset_ms_pos_store(struct ran_conn *conn, uint8_t technology) { struct msgb *msg = create_gsm0414_msg(GSM414_MT_RESET_MS_POS_STORED); @@ -116,7 +116,7 @@ int gsm0414_tx_reset_ms_pos_store(struct gsm_subscriber_connection *conn, /* Entry point for incoming GSM48_PDISC_TEST received from MS */ -int gsm0414_rcv_test(struct gsm_subscriber_connection *conn, +int gsm0414_rcv_test(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); diff --git a/src/libmsc/gsm_04_80.c b/src/libmsc/gsm_04_80.c index 81f200190..fb5a09189 100644 --- a/src/libmsc/gsm_04_80.c +++ b/src/libmsc/gsm_04_80.c @@ -36,7 +36,7 @@ /*! Send a MT RELEASE COMPLETE message with Reject component * (see section 3.6.1) and given error code (see section 3.6.7). * - * \param[in] conn Active subscriber connection + * \param[in] conn Active RAN connection * \param[in] transaction_id Transaction ID with TI flag set * \param[in] invoke_id InvokeID of the request * \param[in] problem_tag Problem code tag (table 3.13) @@ -47,7 +47,7 @@ * failed, any incorrect value can be passed (0x00 > x > 0xff), so * the universal NULL-tag (see table 3.6) will be used instead. */ -int msc_send_ussd_reject(struct gsm_subscriber_connection *conn, +int msc_send_ussd_reject(struct ran_conn *conn, uint8_t transaction_id, int invoke_id, uint8_t problem_tag, uint8_t problem_code) { @@ -70,7 +70,7 @@ int msc_send_ussd_reject(struct gsm_subscriber_connection *conn, return msc_tx_dtap(conn, msg); } -int msc_send_ussd_notify(struct gsm_subscriber_connection *conn, int level, const char *text) +int msc_send_ussd_notify(struct ran_conn *conn, int level, const char *text) { struct msgb *msg = gsm0480_create_ussd_notify(level, text); if (!msg) @@ -78,7 +78,7 @@ int msc_send_ussd_notify(struct gsm_subscriber_connection *conn, int level, cons return msc_tx_dtap(conn, msg); } -int msc_send_ussd_release_complete(struct gsm_subscriber_connection *conn) +int msc_send_ussd_release_complete(struct ran_conn *conn) { struct msgb *msg = gsm0480_create_ussd_release_complete(); if (!msg) diff --git a/src/libmsc/gsm_09_11.c b/src/libmsc/gsm_09_11.c index 63a10472c..e1ea6817a 100644 --- a/src/libmsc/gsm_09_11.c +++ b/src/libmsc/gsm_09_11.c @@ -53,7 +53,7 @@ static uint32_t new_callref = 0x20000001; /* Entry point for call independent MO SS messages */ -int gsm0911_rcv_nc_ss(struct gsm_subscriber_connection *conn, struct msgb *msg) +int gsm0911_rcv_nc_ss(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); struct osmo_gsup_message gsup_msg; @@ -113,7 +113,7 @@ int gsm0911_rcv_nc_ss(struct gsm_subscriber_connection *conn, struct msgb *msg) /* Count active NC SS/USSD sessions */ osmo_counter_inc(conn->network->active_nc_ss); - trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_NC_SS); + trans->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_NC_SS); trans->dlci = OMSC_LINKID_CB(msg); cm_service_request_concludes(conn, msg); } @@ -193,7 +193,7 @@ int gsm0911_rcv_nc_ss(struct gsm_subscriber_connection *conn, struct msgb *msg) if (msg_type == GSM0480_MTYPE_RELEASE_COMPLETE) trans_free(trans); else - msc_subscr_conn_communicating(conn); + ran_conn_communicating(conn); /* Count established MS-initiated NC SS/USSD sessions */ if (msg_type == GSM0480_MTYPE_REGISTER) @@ -217,7 +217,7 @@ error: static int handle_paging_event(unsigned int hooknum, unsigned int event, struct msgb *msg, void *_conn, void *_transt) { - struct gsm_subscriber_connection *conn = _conn; + struct ran_conn *conn = _conn; enum gsm_paging_event paging_event = event; struct gsm_trans *transt = _transt; struct gsm48_hdr *gh; @@ -232,7 +232,7 @@ static int handle_paging_event(unsigned int hooknum, unsigned int event, vlr_subscr_msisdn_or_name(transt->vsub)); /* Assign connection */ - transt->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_NC_SS); + transt->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_NC_SS); transt->paging_request = NULL; /* Send stored message */ @@ -272,7 +272,7 @@ static int handle_paging_event(unsigned int hooknum, unsigned int event, static struct gsm_trans *establish_nc_ss_trans(struct gsm_network *net, struct vlr_subscr *vsub, struct osmo_gsup_message *gsup_msg) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct gsm_trans *trans, *transt; int tid; @@ -324,7 +324,7 @@ static struct gsm_trans *establish_nc_ss_trans(struct gsm_network *net, conn = connection_for_subscr(vsub); if (conn) { /* Assign connection */ - trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_NC_SS); + trans->conn = ran_conn_get(conn, MSC_CONN_USE_TRANS_NC_SS); trans->dlci = 0x00; /* SAPI=0, not SACCH */ return trans; } diff --git a/src/libmsc/gsm_subscriber.c b/src/libmsc/gsm_subscriber.c index fb612090b..a5bf74523 100644 --- a/src/libmsc/gsm_subscriber.c +++ b/src/libmsc/gsm_subscriber.c @@ -59,7 +59,7 @@ int subscr_paging_dispatch(unsigned int hooknum, unsigned int event, struct msgb *msg, void *data, void *param) { struct subscr_request *request, *tmp; - struct gsm_subscriber_connection *conn = data; + struct ran_conn *conn = data; struct vlr_subscr *vsub = param; struct paging_signal_data sig_data; @@ -189,12 +189,12 @@ void subscr_remove_request(struct subscr_request *request) talloc_free(request); } -struct gsm_subscriber_connection *connection_for_subscr(struct vlr_subscr *vsub) +struct ran_conn *connection_for_subscr(struct vlr_subscr *vsub) { struct gsm_network *net = vsub->vlr->user_ctx; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; - llist_for_each_entry(conn, &net->subscr_conns, entry) { + llist_for_each_entry(conn, &net->ran_conns, entry) { if (conn->vsub == vsub) return conn; } diff --git a/src/libmsc/iucs.c b/src/libmsc/iucs.c index c3fea0d06..f9ed75985 100644 --- a/src/libmsc/iucs.c +++ b/src/libmsc/iucs.c @@ -1,4 +1,4 @@ -/* Code to manage MSC subscriber connections over IuCS interface */ +/* Code to manage MSC RAN connections over IuCS interface */ /* * (C) 2016,2017 by sysmocom s.f.m.c. GmbH <info@sysmocom.de> @@ -48,16 +48,16 @@ extern struct msgb *ranap_new_msg_rab_assign_voice(uint8_t rab_id, #endif /* BUILD_IU */ /* For A-interface see libbsc/bsc_api.c subscr_con_allocate() */ -static struct gsm_subscriber_connection *subscr_conn_allocate_iu(struct gsm_network *network, +static struct ran_conn *ran_conn_allocate_iu(struct gsm_network *network, struct ranap_ue_conn_ctx *ue, uint16_t lac) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; - DEBUGP(DIUCS, "Allocating IuCS subscriber conn: lac %d, conn_id %" PRIx32 "\n", + DEBUGP(DIUCS, "Allocating IuCS RAN conn: lac %d, conn_id %" PRIx32 "\n", lac, ue->conn_id); - conn = msc_subscr_conn_alloc(network, RAN_UTRAN_IU, lac); + conn = ran_conn_alloc(network, RAN_UTRAN_IU, lac); if (!conn) return NULL; @@ -78,9 +78,9 @@ static inline void log_subscribers(struct gsm_network *network) if (!log_check_level(DIUCS, LOGL_DEBUG)) return; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; int i = 0; - llist_for_each_entry(conn, &network->subscr_conns, entry) { + llist_for_each_entry(conn, &network->ran_conns, entry) { DEBUGP(DIUCS, "%3d: %s", i, vlr_subscr_name(conn->vsub)); switch (conn->via_ran) { case RAN_UTRAN_IU: @@ -108,19 +108,19 @@ static inline void log_subscribers(struct gsm_network *network) DEBUGP(DIUCS, "subscribers registered: %d\n", i); } -/* Return an existing IuCS subscriber connection record for the given +/* Return an existing IuCS RAN connection record for the given * connection IDs, or return NULL if not found. */ -struct gsm_subscriber_connection *subscr_conn_lookup_iu( +struct ran_conn *ran_conn_lookup_iu( struct gsm_network *network, struct ranap_ue_conn_ctx *ue) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; DEBUGP(DIUCS, "Looking for IuCS subscriber: conn_id %" PRIx32 "\n", ue->conn_id); log_subscribers(network); - llist_for_each_entry(conn, &network->subscr_conns, entry) { + llist_for_each_entry(conn, &network->ran_conns, entry) { if (conn->via_ran != RAN_UTRAN_IU) continue; if (!same_ue_conn(conn->iu.ue_ctx, ue)) @@ -143,13 +143,13 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg, uint16_t *lac) { struct ranap_ue_conn_ctx *ue_ctx; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; ue_ctx = (struct ranap_ue_conn_ctx*)msg->dst; /* TODO: are there message types that could allow us to skip this * search? */ - conn = subscr_conn_lookup_iu(network, ue_ctx); + conn = ran_conn_lookup_iu(network, ue_ctx); if (conn && lac && (conn->lac != *lac)) { LOGP(DIUCS, LOGL_ERROR, "IuCS subscriber has changed LAC" @@ -157,7 +157,7 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg, " %s from LAC %d to %d\n", vlr_subscr_name(conn->vsub), conn->lac, *lac); /* Deallocate conn with previous LAC */ - msc_subscr_conn_close(conn, GSM_CAUSE_INV_MAND_INFO); + ran_conn_close(conn, GSM_CAUSE_INV_MAND_INFO); /* At this point we could be tolerant and allocate a new * connection, but changing the LAC within the same connection * is shifty. Rather cancel everything. */ @@ -184,7 +184,7 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg, return -1; } - conn = subscr_conn_allocate_iu(network, ue_ctx, *lac); + conn = ran_conn_allocate_iu(network, ue_ctx, *lac); if (!conn) abort(); @@ -197,7 +197,7 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg, int iu_rab_act_cs(struct gsm_trans *trans) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct msgb *msg; bool use_x213_nsap; uint32_t conn_id; diff --git a/src/libmsc/iucs_ranap.c b/src/libmsc/iucs_ranap.c index ec0b569c7..735808060 100644 --- a/src/libmsc/iucs_ranap.c +++ b/src/libmsc/iucs_ranap.c @@ -43,9 +43,9 @@ #include <asn1c/asn1helpers.h> /* To continue authorization after a Security Mode Complete */ -int gsm0408_authorize(struct gsm_subscriber_connection *conn); +int gsm0408_authorize(struct ran_conn *conn); -static int iucs_rx_rab_assign(struct gsm_subscriber_connection *conn, RANAP_RAB_SetupOrModifiedItemIEs_t * setup_ies) +static int iucs_rx_rab_assign(struct ran_conn *conn, RANAP_RAB_SetupOrModifiedItemIEs_t * setup_ies) { uint8_t rab_id; RANAP_RAB_SetupOrModifiedItem_t *item = &setup_ies->raB_SetupOrModifiedItem; @@ -89,7 +89,7 @@ static int iucs_rx_rab_assign(struct gsm_subscriber_connection *conn, RANAP_RAB_ return 0; } -int iucs_rx_sec_mode_compl(struct gsm_subscriber_connection *conn, +int iucs_rx_sec_mode_compl(struct ran_conn *conn, RANAP_SecurityModeCompleteIEs_t *ies) { OSMO_ASSERT(conn->via_ran == RAN_UTRAN_IU); @@ -103,9 +103,9 @@ int iucs_rx_sec_mode_compl(struct gsm_subscriber_connection *conn, int iucs_rx_ranap_event(struct gsm_network *network, struct ranap_ue_conn_ctx *ue_ctx, int type, void *data) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; - conn = subscr_conn_lookup_iu(network, ue_ctx); + conn = ran_conn_lookup_iu(network, ue_ctx); if (!conn) { LOGP(DRANAP, LOGL_ERROR, "Cannot find subscriber for IU event %u\n", type); @@ -117,7 +117,7 @@ int iucs_rx_ranap_event(struct gsm_network *network, case RANAP_IU_EVENT_LINK_INVALIDATED: LOGP(DIUCS, LOGL_INFO, "IuCS release for %s\n", vlr_subscr_name(conn->vsub)); - msc_subscr_conn_rx_iu_release_complete(conn); + ran_conn_rx_iu_release_complete(conn); return 0; case RANAP_IU_EVENT_SECURITY_MODE_COMPLETE: diff --git a/src/libmsc/msc_ifaces.c b/src/libmsc/msc_ifaces.c index b76cdb45d..8ae34fcdd 100644 --- a/src/libmsc/msc_ifaces.c +++ b/src/libmsc/msc_ifaces.c @@ -46,7 +46,7 @@ const struct value_string ran_type_names[] = { { 0, NULL } }; -static int msc_tx(struct gsm_subscriber_connection *conn, struct msgb *msg) +static int msc_tx(struct ran_conn *conn, struct msgb *msg) { if (!msg) return -EINVAL; @@ -77,7 +77,7 @@ static int msc_tx(struct gsm_subscriber_connection *conn, struct msgb *msg) } -int msc_tx_dtap(struct gsm_subscriber_connection *conn, +int msc_tx_dtap(struct ran_conn *conn, struct msgb *msg) { return msc_tx(conn, msg); @@ -85,7 +85,7 @@ int msc_tx_dtap(struct gsm_subscriber_connection *conn, /* 9.2.5 CM service accept */ -int msc_gsm48_tx_mm_serv_ack(struct gsm_subscriber_connection *conn) +int msc_gsm48_tx_mm_serv_ack(struct ran_conn *conn) { struct msgb *msg; struct gsm48_hdr *gh; @@ -106,7 +106,7 @@ int msc_gsm48_tx_mm_serv_ack(struct gsm_subscriber_connection *conn) } /* 9.2.6 CM service reject */ -int msc_gsm48_tx_mm_serv_rej(struct gsm_subscriber_connection *conn, +int msc_gsm48_tx_mm_serv_rej(struct ran_conn *conn, enum gsm48_reject_value value) { struct msgb *msg; @@ -125,7 +125,7 @@ int msc_gsm48_tx_mm_serv_rej(struct gsm_subscriber_connection *conn, return msc_tx_dtap(conn, msg); } -int msc_tx_common_id(struct gsm_subscriber_connection *conn) +int msc_tx_common_id(struct ran_conn *conn) { if (!conn) return -EINVAL; diff --git a/src/libmsc/msc_mgcp.c b/src/libmsc/msc_mgcp.c index c2bbe5fc3..1ddec08af 100644 --- a/src/libmsc/msc_mgcp.c +++ b/src/libmsc/msc_mgcp.c @@ -280,7 +280,7 @@ static void fsm_crcx_ran_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data struct msgb *msg; int rc; struct gsm_trans *trans; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; OSMO_ASSERT(mgcp_ctx); mgcp = mgcp_ctx->mgcp; @@ -338,7 +338,7 @@ static void mgw_crcx_ran_resp_cb(struct mgcp_response *r, void *priv) struct mgcp_ctx *mgcp_ctx = priv; int rc; struct gsm_trans *trans; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; /* NOTE: In case of error, we will not be able to perform any DLCX * operation because until we either get a parseable message that @@ -393,7 +393,7 @@ static void fsm_crcx_cn_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data) struct msgb *msg; int rc; struct gsm_trans *trans; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; OSMO_ASSERT(mgcp_ctx); mgcp = mgcp_ctx->mgcp; @@ -447,7 +447,7 @@ static void mgw_crcx_cn_resp_cb(struct mgcp_response *r, void *priv) struct mgcp_ctx *mgcp_ctx = priv; int rc; struct gsm_trans *trans; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; OSMO_ASSERT(mgcp_ctx); trans = mgcp_ctx->trans; @@ -487,7 +487,7 @@ static void fsm_crcx_compl(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct mgcp_ctx *mgcp_ctx = data; struct gsm_trans *trans; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; OSMO_ASSERT(mgcp_ctx); trans = mgcp_ctx->trans; @@ -548,7 +548,7 @@ static void fsm_mdcx_cn_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data) struct mgcp_ctx *mgcp_ctx = data; struct mgcp_client *mgcp; struct gsm_trans *trans; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct mgcp_msg mgcp_msg; struct msgb *msg; int rc; @@ -631,7 +631,7 @@ static void mgw_mdcx_cn_resp_cb(struct mgcp_response *r, void *priv) static void fsm_mdcx_cn_compl_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct mgcp_ctx *mgcp_ctx = data; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct gsm_trans *trans; OSMO_ASSERT(mgcp_ctx); @@ -667,7 +667,7 @@ static void fsm_mdcx_ran_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data struct mgcp_ctx *mgcp_ctx = data; struct mgcp_client *mgcp; struct gsm_trans *trans; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct mgcp_msg mgcp_msg; struct msgb *msg; int rc; @@ -959,7 +959,7 @@ int msc_mgcp_call_assignment(struct gsm_trans *trans) struct mgcp_ctx *mgcp_ctx; char name[32]; static bool fsm_registered = false; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct mgcp_client *mgcp; OSMO_ASSERT(trans); @@ -1027,11 +1027,11 @@ int msc_mgcp_call_assignment(struct gsm_trans *trans) /* Inform the FSM that the assignment (RAN connection) is now complete. * Parameter: - * conn: subscriber connection context. + * conn: RAN connection context. * port: port number of the remote leg. * addr: IP-address of the remote leg. * Returns -EINVAL on error, 0 on success. */ -int msc_mgcp_ass_complete(struct gsm_subscriber_connection *conn, uint16_t port, char *addr) +int msc_mgcp_ass_complete(struct ran_conn *conn, uint16_t port, char *addr) { struct mgcp_ctx *mgcp_ctx; @@ -1081,7 +1081,7 @@ int msc_mgcp_ass_complete(struct gsm_subscriber_connection *conn, uint16_t port, int msc_mgcp_call_complete(struct gsm_trans *trans, uint16_t port, char *addr) { struct mgcp_ctx *mgcp_ctx; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; OSMO_ASSERT(trans); OSMO_ASSERT(addr); diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c index 401586ea3..589eca077 100644 --- a/src/libmsc/msc_vty.c +++ b/src/libmsc/msc_vty.c @@ -489,7 +489,7 @@ static void vty_conn_hdr(struct vty *vty) VTY_NEWLINE); } -static void vty_dump_one_conn(struct vty *vty, const struct gsm_subscriber_connection *conn) +static void vty_dump_one_conn(struct vty *vty, const struct ran_conn *conn) { vty_out(vty, "%08x %22s %3s %5u %3u %08x %c /%1u %27s %s", conn->a.conn_id, @@ -507,10 +507,10 @@ static void vty_dump_one_conn(struct vty *vty, const struct gsm_subscriber_conne DEFUN(show_msc_conn, show_msc_conn_cmd, "show connection", SHOW_STR "Subscriber Connections\n") { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; vty_conn_hdr(vty); - llist_for_each_entry(conn, &gsmnet->subscr_conns, entry) + llist_for_each_entry(conn, &gsmnet->ran_conns, entry) vty_dump_one_conn(vty, conn); return CMD_SUCCESS; @@ -628,7 +628,7 @@ static void subscr_dump_full_vty(struct vty *vty, struct vlr_subscr *vsub) /* Connection */ if (vsub->msc_conn_ref) { - struct gsm_subscriber_connection *conn = vsub->msc_conn_ref; + struct ran_conn *conn = vsub->msc_conn_ref; vty_conn_hdr(vty); vty_dump_one_conn(vty, conn); } @@ -1003,7 +1003,7 @@ DEFUN(subscriber_ussd_notify, "Text of USSD message to send\n") { char *text; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct vlr_subscr *vsub = get_vsub_by_argv(gsmnet, argv[0], argv[1]); int level; @@ -1095,7 +1095,7 @@ DEFUN(subscriber_mstest_close, "Loop Type F\n" "Loop Type I\n") { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct vlr_subscr *vsub = get_vsub_by_argv(gsmnet, argv[0], argv[1]); const char *loop_str; int loop_mode; @@ -1128,7 +1128,7 @@ DEFUN(subscriber_mstest_open, SUBSCR_HELP "Send a TS 04.14 MS Test Command to subscriber\n" "Open a TCH Loop inside the MS\n") { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct vlr_subscr *vsub = get_vsub_by_argv(gsmnet, argv[0], argv[1]); if (!vsub) { diff --git a/src/libmsc/osmo_msc.c b/src/libmsc/osmo_msc.c index 05ac8452a..f2fe85cb0 100644 --- a/src/libmsc/osmo_msc.c +++ b/src/libmsc/osmo_msc.c @@ -60,7 +60,7 @@ struct gsm_network *gsm_network_init(void *ctx, mncc_recv_cb_t mncc_recv) INIT_LLIST_HEAD(&net->trans_list); INIT_LLIST_HEAD(&net->upqueue); - INIT_LLIST_HEAD(&net->subscr_conns); + INIT_LLIST_HEAD(&net->ran_conns); /* init statistics */ net->msc_ctrs = rate_ctr_group_alloc(net, &msc_ctrg_desc, 0); @@ -79,7 +79,7 @@ struct gsm_network *gsm_network_init(void *ctx, mncc_recv_cb_t mncc_recv) } /* Receive a SAPI-N-REJECT from BSC */ -void msc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci) +void msc_sapi_n_reject(struct ran_conn *conn, int dlci) { int sapi = dlci & 0x7; @@ -90,25 +90,25 @@ void msc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci) /* receive a Level 3 Complete message. * Ownership of the conn is completely passed to the conn FSM, i.e. for both acceptance and rejection, * the conn FSM shall decide when to release this conn. It may already be discarded before this exits. */ -void msc_compl_l3(struct gsm_subscriber_connection *conn, +void msc_compl_l3(struct ran_conn *conn, struct msgb *msg, uint16_t chosen_channel) { - msc_subscr_conn_get(conn, MSC_CONN_USE_COMPL_L3); + ran_conn_get(conn, MSC_CONN_USE_COMPL_L3); gsm0408_dispatch(conn, msg); - msc_subscr_conn_put(conn, MSC_CONN_USE_COMPL_L3); + ran_conn_put(conn, MSC_CONN_USE_COMPL_L3); } /* Receive a DTAP message from BSC */ -void msc_dtap(struct gsm_subscriber_connection *conn, struct msgb *msg) +void msc_dtap(struct ran_conn *conn, struct msgb *msg) { - msc_subscr_conn_get(conn, MSC_CONN_USE_DTAP); + ran_conn_get(conn, MSC_CONN_USE_DTAP); gsm0408_dispatch(conn, msg); - msc_subscr_conn_put(conn, MSC_CONN_USE_DTAP); + ran_conn_put(conn, MSC_CONN_USE_DTAP); } /* Receive an ASSIGNMENT COMPLETE from BSC */ -void msc_assign_compl(struct gsm_subscriber_connection *conn, +void msc_assign_compl(struct ran_conn *conn, uint8_t rr_cause, uint8_t chosen_channel, uint8_t encr_alg_id, uint8_t speec) { @@ -116,14 +116,14 @@ void msc_assign_compl(struct gsm_subscriber_connection *conn, } /* Receive an ASSIGNMENT FAILURE from BSC */ -void msc_assign_fail(struct gsm_subscriber_connection *conn, +void msc_assign_fail(struct ran_conn *conn, uint8_t cause, uint8_t *rr_cause) { LOGP(DRR, LOGL_DEBUG, "MSC assign failure (do nothing).\n"); } /* Receive a CLASSMARK CHANGE from BSC */ -void msc_classmark_chg(struct gsm_subscriber_connection *conn, +void msc_classmark_chg(struct ran_conn *conn, const uint8_t *cm2, uint8_t cm2_len, const uint8_t *cm3, uint8_t cm3_len) { @@ -154,12 +154,12 @@ void msc_classmark_chg(struct gsm_subscriber_connection *conn, } /* bump subscr conn FSM in case it is waiting for a Classmark Update */ - if (conn->fi->state == SUBSCR_CONN_S_WAIT_CLASSMARK_UPDATE) - osmo_fsm_inst_dispatch(conn->fi, SUBSCR_CONN_E_CLASSMARK_UPDATE, NULL); + if (conn->fi->state == RAN_CONN_S_WAIT_CLASSMARK_UPDATE) + osmo_fsm_inst_dispatch(conn->fi, RAN_CONN_E_CLASSMARK_UPDATE, NULL); } /* Receive a CIPHERING MODE COMPLETE from BSC */ -void msc_cipher_mode_compl(struct gsm_subscriber_connection *conn, +void msc_cipher_mode_compl(struct ran_conn *conn, struct msgb *msg, uint8_t alg_id) { struct vlr_ciph_result ciph_res = { .cause = VLR_CIPH_REJECT }; @@ -207,13 +207,13 @@ void msc_cipher_mode_compl(struct gsm_subscriber_connection *conn, } /* Receive a CLEAR REQUEST from BSC */ -int msc_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause) +int msc_clear_request(struct ran_conn *conn, uint32_t cause) { - msc_subscr_conn_close(conn, cause); + ran_conn_close(conn, cause); return 1; } -static const char *used_ref_counts_str(struct gsm_subscriber_connection *conn) +static const char *used_ref_counts_str(struct ran_conn *conn) { static char buf[256]; int bit_nr; @@ -237,7 +237,7 @@ static const char *used_ref_counts_str(struct gsm_subscriber_connection *conn) for (bit_nr = 0; (1 << bit_nr) <= conn->use_tokens; bit_nr++) { if (conn->use_tokens & (1 << bit_nr)) { - APPEND_STR("%s", get_value_string(msc_subscr_conn_use_names, bit_nr)); + APPEND_STR("%s", get_value_string(ran_conn_use_names, bit_nr)); } } return buf; @@ -245,10 +245,8 @@ static const char *used_ref_counts_str(struct gsm_subscriber_connection *conn) } /* increment the ref-count. Needs to be called by every user */ -struct gsm_subscriber_connection * -_msc_subscr_conn_get(struct gsm_subscriber_connection *conn, - enum msc_subscr_conn_use balance_token, - const char *file, int line) +struct ran_conn *_ran_conn_get(struct ran_conn *conn, enum ran_conn_use balance_token, + const char *file, int line) { OSMO_ASSERT(conn); @@ -259,22 +257,22 @@ _msc_subscr_conn_get(struct gsm_subscriber_connection *conn, LOGPSRC(DREF, LOGL_ERROR, file, line, "%s: MSC conn use error: using an already used token: %s\n", vlr_subscr_name(conn->vsub), - msc_subscr_conn_use_name(balance_token)); + ran_conn_use_name(balance_token)); conn->use_tokens |= flag; } conn->use_count++; LOGPSRC(DREF, LOGL_DEBUG, file, line, "%s: MSC conn use + %s == %u (0x%x: %s)\n", - vlr_subscr_name(conn->vsub), msc_subscr_conn_use_name(balance_token), + vlr_subscr_name(conn->vsub), ran_conn_use_name(balance_token), conn->use_count, conn->use_tokens, used_ref_counts_str(conn)); return conn; } /* decrement the ref-count. Once it reaches zero, we release */ -void _msc_subscr_conn_put(struct gsm_subscriber_connection *conn, - enum msc_subscr_conn_use balance_token, +void _ran_conn_put(struct ran_conn *conn, + enum ran_conn_use balance_token, const char *file, int line) { OSMO_ASSERT(conn); @@ -286,7 +284,7 @@ void _msc_subscr_conn_put(struct gsm_subscriber_connection *conn, LOGPSRC(DREF, LOGL_ERROR, file, line, "%s: MSC conn use error: freeing an unused token: %s\n", vlr_subscr_name(conn->vsub), - msc_subscr_conn_use_name(balance_token)); + ran_conn_use_name(balance_token)); conn->use_tokens &= ~flag; } @@ -294,26 +292,26 @@ void _msc_subscr_conn_put(struct gsm_subscriber_connection *conn, LOGPSRC(DREF, LOGL_ERROR, file, line, "%s: MSC conn use - %s failed: is already 0\n", vlr_subscr_name(conn->vsub), - msc_subscr_conn_use_name(balance_token)); + ran_conn_use_name(balance_token)); return; } conn->use_count--; LOGPSRC(DREF, LOGL_DEBUG, file, line, "%s: MSC conn use - %s == %u (0x%x: %s)\n", - vlr_subscr_name(conn->vsub), msc_subscr_conn_use_name(balance_token), + vlr_subscr_name(conn->vsub), ran_conn_use_name(balance_token), conn->use_count, conn->use_tokens, used_ref_counts_str(conn)); if (conn->use_count == 0) - osmo_fsm_inst_dispatch(conn->fi, SUBSCR_CONN_E_UNUSED, NULL); + osmo_fsm_inst_dispatch(conn->fi, RAN_CONN_E_UNUSED, NULL); } -bool msc_subscr_conn_used_by(struct gsm_subscriber_connection *conn, enum msc_subscr_conn_use token) +bool ran_conn_used_by(struct ran_conn *conn, enum ran_conn_use token) { return conn && (conn->use_tokens & (1 << token)); } -const struct value_string msc_subscr_conn_use_names[] = { +const struct value_string ran_conn_use_names[] = { {MSC_CONN_USE_UNTRACKED, "UNTRACKED"}, {MSC_CONN_USE_COMPL_L3, "compl_l3"}, {MSC_CONN_USE_DTAP, "dtap"}, diff --git a/src/libmsc/rrlp.c b/src/libmsc/rrlp.c index 2a5c1aad6..c0747cdca 100644 --- a/src/libmsc/rrlp.c +++ b/src/libmsc/rrlp.c @@ -58,7 +58,7 @@ const char *msc_rrlp_mode_name(enum rrlp_mode mode) return get_value_string(rrlp_mode_names, mode); } -static int send_rrlp_req(struct gsm_subscriber_connection *conn) +static int send_rrlp_req(struct ran_conn *conn) { struct gsm_network *net = conn->network; const uint8_t *req; @@ -89,7 +89,7 @@ static int subscr_sig_cb(unsigned int subsys, unsigned int signal, void *handler_data, void *signal_data) { struct vlr_subscr *vsub; - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; switch (signal) { case S_SUBSCR_ATTACHED: diff --git a/src/libmsc/silent_call.c b/src/libmsc/silent_call.c index 988889440..6c6e217d2 100644 --- a/src/libmsc/silent_call.c +++ b/src/libmsc/silent_call.c @@ -36,7 +36,7 @@ static int paging_cb_silent(unsigned int hooknum, unsigned int event, struct msgb *msg, void *_conn, void *_data) { - struct gsm_subscriber_connection *conn = _conn; + struct ran_conn *conn = _conn; struct scall_signal_data sigdata; int rc = 0; @@ -57,7 +57,7 @@ static int paging_cb_silent(unsigned int hooknum, unsigned int event, conn->lchan->ts->nr, conn->lchan->ts->trx->arfcn); #endif conn->silent_call = 1; - msc_subscr_conn_get(conn, MSC_CONN_USE_SILENT_CALL); + ran_conn_get(conn, MSC_CONN_USE_SILENT_CALL); /* increment lchan reference count */ osmo_signal_dispatch(SS_SCALL, S_SCALL_SUCCESS, &sigdata); break; @@ -76,7 +76,7 @@ static int paging_cb_silent(unsigned int hooknum, unsigned int event, #if 0 /* receive a layer 3 message from a silent call */ -int silent_call_rx(struct gsm_subscriber_connection *conn, struct msgb *msg) +int silent_call_rx(struct ran_conn *conn, struct msgb *msg) { /* FIXME: do something like sending it through a UDP port */ LOGP(DLSMS, LOGL_NOTICE, "Discarding L3 message from a silent call.\n"); @@ -95,7 +95,7 @@ static const struct msg_match silent_call_accept[] = { }; /* decide if we need to reroute a message as part of a silent call */ -int silent_call_reroute(struct gsm_subscriber_connection *conn, struct msgb *msg) +int silent_call_reroute(struct ran_conn *conn, struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); uint8_t pdisc = gsm48_hdr_pdisc(gh); @@ -138,7 +138,7 @@ int gsm_silent_call_start(struct vlr_subscr *vsub, void *data, int type) /* end a silent call with a given subscriber */ int gsm_silent_call_stop(struct vlr_subscr *vsub) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; conn = connection_for_subscr(vsub); if (!conn) { @@ -162,7 +162,7 @@ int gsm_silent_call_stop(struct vlr_subscr *vsub) #endif conn->silent_call = 0; - msc_subscr_conn_put(conn, MSC_CONN_USE_SILENT_CALL); + ran_conn_put(conn, MSC_CONN_USE_SILENT_CALL); return 0; } diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c index 051372c08..10f3cfaad 100644 --- a/src/libmsc/smpp_openbsc.c +++ b/src/libmsc/smpp_openbsc.c @@ -536,7 +536,7 @@ void smpp_cmd_flush_pending(struct osmo_esme *esme) void smpp_cmd_ack(struct osmo_smpp_cmd *cmd) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct gsm_trans *trans; if (cmd->is_report) @@ -562,7 +562,7 @@ out: void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct gsm_trans *trans; int gsm411_cause; @@ -636,7 +636,7 @@ struct osmo_smpp_cmd *smpp_cmd_find_by_seqnum(struct osmo_esme *esme, } static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, - struct gsm_subscriber_connection *conn) + struct ran_conn *conn) { struct deliver_sm_t deliver; int mode, ret; @@ -731,13 +731,13 @@ static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, static struct smsc *g_smsc; -int smpp_route_smpp_first(struct gsm_sms *sms, struct gsm_subscriber_connection *conn) +int smpp_route_smpp_first(struct gsm_sms *sms, struct ran_conn *conn) { return g_smsc->smpp_first; } int smpp_try_deliver(struct gsm_sms *sms, - struct gsm_subscriber_connection *conn) + struct ran_conn *conn) { struct osmo_esme *esme; struct osmo_smpp_addr dst; diff --git a/src/libmsc/smpp_smsc.h b/src/libmsc/smpp_smsc.h index 755e68577..27a2646ab 100644 --- a/src/libmsc/smpp_smsc.h +++ b/src/libmsc/smpp_smsc.h @@ -158,10 +158,10 @@ int smpp_determine_scheme(uint8_t dcs, uint8_t *data_coding, int *mode); struct gsm_sms; -struct gsm_subscriber_connection; +struct ran_conn; int smpp_route_smpp_first(struct gsm_sms *sms, - struct gsm_subscriber_connection *conn); + struct ran_conn *conn); int smpp_try_deliver(struct gsm_sms *sms, - struct gsm_subscriber_connection *conn); + struct ran_conn *conn); #endif diff --git a/src/libmsc/subscr_conn.c b/src/libmsc/subscr_conn.c index f9e198586..b1c8bc9e9 100644 --- a/src/libmsc/subscr_conn.c +++ b/src/libmsc/subscr_conn.c @@ -1,4 +1,4 @@ -/* MSC subscriber connection implementation */ +/* MSC RAN connection implementation */ /* * (C) 2016-2018 by sysmocom s.m.f.c. <info@sysmocom.de> @@ -40,23 +40,23 @@ #include <osmocom/msc/iu_dummy.h> #endif -#define SUBSCR_CONN_TIMEOUT 5 /* seconds */ - -static const struct value_string subscr_conn_fsm_event_names[] = { - OSMO_VALUE_STRING(SUBSCR_CONN_E_COMPLETE_LAYER_3), - OSMO_VALUE_STRING(SUBSCR_CONN_E_CLASSMARK_UPDATE), - OSMO_VALUE_STRING(SUBSCR_CONN_E_ACCEPTED), - OSMO_VALUE_STRING(SUBSCR_CONN_E_COMMUNICATING), - OSMO_VALUE_STRING(SUBSCR_CONN_E_RELEASE_WHEN_UNUSED), - OSMO_VALUE_STRING(SUBSCR_CONN_E_MO_CLOSE), - OSMO_VALUE_STRING(SUBSCR_CONN_E_CN_CLOSE), - OSMO_VALUE_STRING(SUBSCR_CONN_E_UNUSED), +#define RAN_CONN_TIMEOUT 5 /* seconds */ + +static const struct value_string ran_conn_fsm_event_names[] = { + OSMO_VALUE_STRING(RAN_CONN_E_COMPLETE_LAYER_3), + OSMO_VALUE_STRING(RAN_CONN_E_CLASSMARK_UPDATE), + OSMO_VALUE_STRING(RAN_CONN_E_ACCEPTED), + OSMO_VALUE_STRING(RAN_CONN_E_COMMUNICATING), + OSMO_VALUE_STRING(RAN_CONN_E_RELEASE_WHEN_UNUSED), + OSMO_VALUE_STRING(RAN_CONN_E_MO_CLOSE), + OSMO_VALUE_STRING(RAN_CONN_E_CN_CLOSE), + OSMO_VALUE_STRING(RAN_CONN_E_UNUSED), { 0, NULL } }; static void update_counters(struct osmo_fsm_inst *fi, bool conn_accepted) { - struct gsm_subscriber_connection *conn = fi->priv; + struct ran_conn *conn = fi->priv; switch (conn->complete_layer3_type) { case COMPLETE_LAYER3_LU: rate_ctr_inc(&conn->network->msc_ctrs->ctr[ @@ -80,7 +80,7 @@ static void update_counters(struct osmo_fsm_inst *fi, bool conn_accepted) static void evaluate_acceptance_outcome(struct osmo_fsm_inst *fi, bool conn_accepted) { - struct gsm_subscriber_connection *conn = fi->priv; + struct ran_conn *conn = fi->priv; update_counters(fi, conn_accepted); @@ -94,7 +94,7 @@ static void evaluate_acceptance_outcome(struct osmo_fsm_inst *fi, bool conn_acce if (conn->complete_layer3_type == COMPLETE_LAYER3_CM_SERVICE_REQ && conn_accepted) { conn->received_cm_service_request = true; - msc_subscr_conn_get(conn, MSC_CONN_USE_CM_SERVICE); + ran_conn_get(conn, MSC_CONN_USE_CM_SERVICE); } if (conn_accepted) @@ -110,25 +110,25 @@ static void log_close_event(struct osmo_fsm_inst *fi, uint32_t event, void *data LOGPFSML(fi, LOGL_NOTICE, "Close event, cause: %s\n", gsm48_reject_value_name(*cause)); } -static void subscr_conn_fsm_new(struct osmo_fsm_inst *fi, uint32_t event, void *data) +static void ran_conn_fsm_new(struct osmo_fsm_inst *fi, uint32_t event, void *data) { switch (event) { - case SUBSCR_CONN_E_COMPLETE_LAYER_3: - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_AUTH_CIPH, SUBSCR_CONN_TIMEOUT, 0); + case RAN_CONN_E_COMPLETE_LAYER_3: + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_AUTH_CIPH, RAN_CONN_TIMEOUT, 0); return; - case SUBSCR_CONN_E_ACCEPTED: + case RAN_CONN_E_ACCEPTED: evaluate_acceptance_outcome(fi, true); - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_ACCEPTED, SUBSCR_CONN_TIMEOUT, 0); + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_ACCEPTED, RAN_CONN_TIMEOUT, 0); return; - case SUBSCR_CONN_E_MO_CLOSE: - case SUBSCR_CONN_E_CN_CLOSE: + case RAN_CONN_E_MO_CLOSE: + case RAN_CONN_E_CN_CLOSE: log_close_event(fi, event, data); evaluate_acceptance_outcome(fi, false); /* fall through */ - case SUBSCR_CONN_E_UNUSED: - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_RELEASING, SUBSCR_CONN_TIMEOUT, 0); + case RAN_CONN_E_UNUSED: + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_RELEASING, RAN_CONN_TIMEOUT, 0); return; default: @@ -136,25 +136,25 @@ static void subscr_conn_fsm_new(struct osmo_fsm_inst *fi, uint32_t event, void * } } -static void subscr_conn_fsm_auth_ciph(struct osmo_fsm_inst *fi, uint32_t event, void *data) +static void ran_conn_fsm_auth_ciph(struct osmo_fsm_inst *fi, uint32_t event, void *data) { /* If accepted, transition the state, all other cases mean failure. */ switch (event) { - case SUBSCR_CONN_E_ACCEPTED: + case RAN_CONN_E_ACCEPTED: evaluate_acceptance_outcome(fi, true); - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_ACCEPTED, SUBSCR_CONN_TIMEOUT, 0); + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_ACCEPTED, RAN_CONN_TIMEOUT, 0); return; - case SUBSCR_CONN_E_UNUSED: + case RAN_CONN_E_UNUSED: LOGPFSML(fi, LOGL_DEBUG, "Awaiting results for Auth+Ciph, overruling event %s\n", osmo_fsm_event_name(fi->fsm, event)); return; - case SUBSCR_CONN_E_MO_CLOSE: - case SUBSCR_CONN_E_CN_CLOSE: + case RAN_CONN_E_MO_CLOSE: + case RAN_CONN_E_CN_CLOSE: log_close_event(fi, event, data); evaluate_acceptance_outcome(fi, false); - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_RELEASING, SUBSCR_CONN_TIMEOUT, 0); + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_RELEASING, RAN_CONN_TIMEOUT, 0); return; @@ -163,7 +163,7 @@ static void subscr_conn_fsm_auth_ciph(struct osmo_fsm_inst *fi, uint32_t event, } } -int msc_classmark_request_then_cipher_mode_cmd(struct gsm_subscriber_connection *conn, bool umts_aka, +int msc_classmark_request_then_cipher_mode_cmd(struct ran_conn *conn, bool umts_aka, bool retrieve_imeisv) { int rc; @@ -177,15 +177,15 @@ int msc_classmark_request_then_cipher_mode_cmd(struct gsm_subscriber_connection return -EIO; } - osmo_fsm_inst_state_chg(conn->fi, SUBSCR_CONN_S_WAIT_CLASSMARK_UPDATE, SUBSCR_CONN_TIMEOUT, 0); + osmo_fsm_inst_state_chg(conn->fi, RAN_CONN_S_WAIT_CLASSMARK_UPDATE, RAN_CONN_TIMEOUT, 0); return 0; } -static void subscr_conn_fsm_wait_classmark_update(struct osmo_fsm_inst *fi, uint32_t event, void *data) +static void ran_conn_fsm_wait_classmark_update(struct osmo_fsm_inst *fi, uint32_t event, void *data) { - struct gsm_subscriber_connection *conn = fi->priv; + struct ran_conn *conn = fi->priv; switch (event) { - case SUBSCR_CONN_E_CLASSMARK_UPDATE: + case RAN_CONN_E_CLASSMARK_UPDATE: /* Theoretically, this event can be used for requesting Classmark in various situations. * So far though, the only time we send a Classmark Request is during Ciphering. As soon * as more such situations arise, we need to add state to indicate what action should @@ -196,7 +196,7 @@ static void subscr_conn_fsm_wait_classmark_update(struct osmo_fsm_inst *fi, uint /* During Ciphering, we needed Classmark information. The Classmark Update has come in, * go back into the Set Ciphering Command procedure. */ - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_AUTH_CIPH, SUBSCR_CONN_TIMEOUT, 0); + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_AUTH_CIPH, RAN_CONN_TIMEOUT, 0); if (msc_geran_set_cipher_mode(conn, conn->geran_set_cipher_mode.umts_aka, conn->geran_set_cipher_mode.retrieve_imeisv)) { LOGPFSML(fi, LOGL_ERROR, @@ -206,16 +206,16 @@ static void subscr_conn_fsm_wait_classmark_update(struct osmo_fsm_inst *fi, uint } return; - case SUBSCR_CONN_E_UNUSED: + case RAN_CONN_E_UNUSED: LOGPFSML(fi, LOGL_DEBUG, "Awaiting results for Auth+Ciph, overruling event %s\n", osmo_fsm_event_name(fi->fsm, event)); return; - case SUBSCR_CONN_E_MO_CLOSE: - case SUBSCR_CONN_E_CN_CLOSE: + case RAN_CONN_E_MO_CLOSE: + case RAN_CONN_E_CN_CLOSE: log_close_event(fi, event, data); evaluate_acceptance_outcome(fi, false); - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_RELEASING, SUBSCR_CONN_TIMEOUT, 0); + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_RELEASING, RAN_CONN_TIMEOUT, 0); return; default: @@ -223,9 +223,9 @@ static void subscr_conn_fsm_wait_classmark_update(struct osmo_fsm_inst *fi, uint } } -static bool subscr_conn_fsm_has_active_transactions(struct osmo_fsm_inst *fi) +static bool ran_conn_fsm_has_active_transactions(struct osmo_fsm_inst *fi) { - struct gsm_subscriber_connection *conn = fi->priv; + struct ran_conn *conn = fi->priv; struct gsm_trans *trans; if (conn->silent_call) { @@ -260,9 +260,9 @@ static bool subscr_conn_fsm_has_active_transactions(struct osmo_fsm_inst *fi) return false; } -static void subscr_conn_fsm_accepted_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) +static void ran_conn_fsm_accepted_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) { - struct gsm_subscriber_connection *conn = fi->priv; + struct ran_conn *conn = fi->priv; /* Stop Location Update expiry for this subscriber. While the subscriber * has an open connection the LU expiry timer must remain disabled. @@ -271,29 +271,29 @@ static void subscr_conn_fsm_accepted_enter(struct osmo_fsm_inst *fi, uint32_t pr * The LU expiry timer will restart once the connection is closed. */ conn->vsub->expire_lu = VLR_SUBSCRIBER_NO_EXPIRATION; - if (!subscr_conn_fsm_has_active_transactions(fi)) - osmo_fsm_inst_dispatch(fi, SUBSCR_CONN_E_UNUSED, NULL); + if (!ran_conn_fsm_has_active_transactions(fi)) + osmo_fsm_inst_dispatch(fi, RAN_CONN_E_UNUSED, NULL); } -static void subscr_conn_fsm_accepted(struct osmo_fsm_inst *fi, uint32_t event, void *data) +static void ran_conn_fsm_accepted(struct osmo_fsm_inst *fi, uint32_t event, void *data) { switch (event) { - case SUBSCR_CONN_E_COMPLETE_LAYER_3: + case RAN_CONN_E_COMPLETE_LAYER_3: /* When Authentication is off, we may already be in the Accepted state when the code * evaluates the Compl L3. Simply ignore. This just cosmetically mutes the error log * about the useless event. */ return; - case SUBSCR_CONN_E_COMMUNICATING: - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_COMMUNICATING, 0, 0); + case RAN_CONN_E_COMMUNICATING: + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_COMMUNICATING, 0, 0); return; - case SUBSCR_CONN_E_MO_CLOSE: - case SUBSCR_CONN_E_CN_CLOSE: + case RAN_CONN_E_MO_CLOSE: + case RAN_CONN_E_CN_CLOSE: log_close_event(fi, event, data); /* fall through */ - case SUBSCR_CONN_E_UNUSED: - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_RELEASING, SUBSCR_CONN_TIMEOUT, 0); + case RAN_CONN_E_UNUSED: + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_RELEASING, RAN_CONN_TIMEOUT, 0); return; default: @@ -301,19 +301,19 @@ static void subscr_conn_fsm_accepted(struct osmo_fsm_inst *fi, uint32_t event, v } } -static void subscr_conn_fsm_communicating(struct osmo_fsm_inst *fi, uint32_t event, void *data) +static void ran_conn_fsm_communicating(struct osmo_fsm_inst *fi, uint32_t event, void *data) { switch (event) { - case SUBSCR_CONN_E_COMMUNICATING: + case RAN_CONN_E_COMMUNICATING: /* no-op */ return; - case SUBSCR_CONN_E_MO_CLOSE: - case SUBSCR_CONN_E_CN_CLOSE: + case RAN_CONN_E_MO_CLOSE: + case RAN_CONN_E_CN_CLOSE: log_close_event(fi, event, data); /* fall through */ - case SUBSCR_CONN_E_UNUSED: - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_RELEASING, SUBSCR_CONN_TIMEOUT, 0); + case RAN_CONN_E_UNUSED: + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_RELEASING, RAN_CONN_TIMEOUT, 0); return; default: @@ -321,33 +321,33 @@ static void subscr_conn_fsm_communicating(struct osmo_fsm_inst *fi, uint32_t eve } } -static int subscr_conn_fsm_timeout(struct osmo_fsm_inst *fi) +static int ran_conn_fsm_timeout(struct osmo_fsm_inst *fi) { - struct gsm_subscriber_connection *conn = fi->priv; - if (msc_subscr_conn_in_release(conn)) { + struct ran_conn *conn = fi->priv; + if (ran_conn_in_release(conn)) { LOGPFSML(fi, LOGL_ERROR, "Timeout while releasing, discarding right now\n"); osmo_fsm_inst_term(fi, OSMO_FSM_TERM_TIMEOUT, NULL); } else { enum gsm48_reject_value cause = GSM48_REJECT_CONGESTION; - osmo_fsm_inst_dispatch(fi, SUBSCR_CONN_E_CN_CLOSE, &cause); + osmo_fsm_inst_dispatch(fi, RAN_CONN_E_CN_CLOSE, &cause); } return 0; } -static void subscr_conn_fsm_releasing_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state) +static void ran_conn_fsm_releasing_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state) { - struct gsm_subscriber_connection *conn = fi->priv; + struct ran_conn *conn = fi->priv; /* Use count for either conn->a.waiting_for_clear_complete or * conn->iu.waiting_for_release_complete. 'get' it early, so we don't deallocate after tearing * down active transactions. Safeguard against double-get (though it shouldn't happen). */ - if (!msc_subscr_conn_used_by(conn, MSC_CONN_USE_RELEASE)) - msc_subscr_conn_get(conn, MSC_CONN_USE_RELEASE); + if (!ran_conn_used_by(conn, MSC_CONN_USE_RELEASE)) + ran_conn_get(conn, MSC_CONN_USE_RELEASE); /* Cancel pending CM Service Requests */ if (conn->received_cm_service_request) { conn->received_cm_service_request = false; - msc_subscr_conn_put(conn, MSC_CONN_USE_CM_SERVICE); + ran_conn_put(conn, MSC_CONN_USE_CM_SERVICE); } /* Cancel all VLR FSMs, if any */ @@ -388,110 +388,110 @@ static void subscr_conn_fsm_releasing_onenter(struct osmo_fsm_inst *fi, uint32_t } } -static void subscr_conn_fsm_releasing(struct osmo_fsm_inst *fi, uint32_t event, void *data) +static void ran_conn_fsm_releasing(struct osmo_fsm_inst *fi, uint32_t event, void *data) { - OSMO_ASSERT(event == SUBSCR_CONN_E_UNUSED); - osmo_fsm_inst_state_chg(fi, SUBSCR_CONN_S_RELEASED, 0, 0); + OSMO_ASSERT(event == RAN_CONN_E_UNUSED); + osmo_fsm_inst_state_chg(fi, RAN_CONN_S_RELEASED, 0, 0); } -static void subscr_conn_fsm_released(struct osmo_fsm_inst *fi, uint32_t prev_state) +static void ran_conn_fsm_released(struct osmo_fsm_inst *fi, uint32_t prev_state) { - /* Terminate, deallocate and also deallocate the gsm_subscriber_connection, which is allocated as + /* Terminate, deallocate and also deallocate the ran_conn, which is allocated as * a talloc child of fi. Also calls the cleanup function. */ osmo_fsm_inst_term(fi, OSMO_FSM_TERM_REGULAR, NULL); } #define S(x) (1 << (x)) -static const struct osmo_fsm_state subscr_conn_fsm_states[] = { - [SUBSCR_CONN_S_NEW] = { - .name = OSMO_STRINGIFY(SUBSCR_CONN_S_NEW), - .in_event_mask = S(SUBSCR_CONN_E_COMPLETE_LAYER_3) | - S(SUBSCR_CONN_E_ACCEPTED) | - S(SUBSCR_CONN_E_MO_CLOSE) | - S(SUBSCR_CONN_E_CN_CLOSE) | - S(SUBSCR_CONN_E_UNUSED), - .out_state_mask = S(SUBSCR_CONN_S_AUTH_CIPH) | - S(SUBSCR_CONN_S_ACCEPTED) | - S(SUBSCR_CONN_S_RELEASING), - .action = subscr_conn_fsm_new, +static const struct osmo_fsm_state ran_conn_fsm_states[] = { + [RAN_CONN_S_NEW] = { + .name = OSMO_STRINGIFY(RAN_CONN_S_NEW), + .in_event_mask = S(RAN_CONN_E_COMPLETE_LAYER_3) | + S(RAN_CONN_E_ACCEPTED) | + S(RAN_CONN_E_MO_CLOSE) | + S(RAN_CONN_E_CN_CLOSE) | + S(RAN_CONN_E_UNUSED), + .out_state_mask = S(RAN_CONN_S_AUTH_CIPH) | + S(RAN_CONN_S_ACCEPTED) | + S(RAN_CONN_S_RELEASING), + .action = ran_conn_fsm_new, }, - [SUBSCR_CONN_S_AUTH_CIPH] = { - .name = OSMO_STRINGIFY(SUBSCR_CONN_S_AUTH_CIPH), - .in_event_mask = S(SUBSCR_CONN_E_ACCEPTED) | - S(SUBSCR_CONN_E_MO_CLOSE) | - S(SUBSCR_CONN_E_CN_CLOSE) | - S(SUBSCR_CONN_E_UNUSED), - .out_state_mask = S(SUBSCR_CONN_S_WAIT_CLASSMARK_UPDATE) | - S(SUBSCR_CONN_S_ACCEPTED) | - S(SUBSCR_CONN_S_RELEASING), - .action = subscr_conn_fsm_auth_ciph, + [RAN_CONN_S_AUTH_CIPH] = { + .name = OSMO_STRINGIFY(RAN_CONN_S_AUTH_CIPH), + .in_event_mask = S(RAN_CONN_E_ACCEPTED) | + S(RAN_CONN_E_MO_CLOSE) | + S(RAN_CONN_E_CN_CLOSE) | + S(RAN_CONN_E_UNUSED), + .out_state_mask = S(RAN_CONN_S_WAIT_CLASSMARK_UPDATE) | + S(RAN_CONN_S_ACCEPTED) | + S(RAN_CONN_S_RELEASING), + .action = ran_conn_fsm_auth_ciph, }, - [SUBSCR_CONN_S_WAIT_CLASSMARK_UPDATE] = { - .name = OSMO_STRINGIFY(SUBSCR_CONN_S_WAIT_CLASSMARK_UPDATE), - .in_event_mask = S(SUBSCR_CONN_E_CLASSMARK_UPDATE) | - S(SUBSCR_CONN_E_MO_CLOSE) | - S(SUBSCR_CONN_E_CN_CLOSE) | - S(SUBSCR_CONN_E_UNUSED), - .out_state_mask = S(SUBSCR_CONN_S_AUTH_CIPH) | - S(SUBSCR_CONN_S_RELEASING), - .action = subscr_conn_fsm_wait_classmark_update, + [RAN_CONN_S_WAIT_CLASSMARK_UPDATE] = { + .name = OSMO_STRINGIFY(RAN_CONN_S_WAIT_CLASSMARK_UPDATE), + .in_event_mask = S(RAN_CONN_E_CLASSMARK_UPDATE) | + S(RAN_CONN_E_MO_CLOSE) | + S(RAN_CONN_E_CN_CLOSE) | + S(RAN_CONN_E_UNUSED), + .out_state_mask = S(RAN_CONN_S_AUTH_CIPH) | + S(RAN_CONN_S_RELEASING), + .action = ran_conn_fsm_wait_classmark_update, }, - [SUBSCR_CONN_S_ACCEPTED] = { - .name = OSMO_STRINGIFY(SUBSCR_CONN_S_ACCEPTED), + [RAN_CONN_S_ACCEPTED] = { + .name = OSMO_STRINGIFY(RAN_CONN_S_ACCEPTED), /* allow everything to release for any odd behavior */ - .in_event_mask = S(SUBSCR_CONN_E_COMPLETE_LAYER_3) | - S(SUBSCR_CONN_E_COMMUNICATING) | - S(SUBSCR_CONN_E_RELEASE_WHEN_UNUSED) | - S(SUBSCR_CONN_E_ACCEPTED) | - S(SUBSCR_CONN_E_MO_CLOSE) | - S(SUBSCR_CONN_E_CN_CLOSE) | - S(SUBSCR_CONN_E_UNUSED), - .out_state_mask = S(SUBSCR_CONN_S_RELEASING) | - S(SUBSCR_CONN_S_COMMUNICATING), - .onenter = subscr_conn_fsm_accepted_enter, - .action = subscr_conn_fsm_accepted, + .in_event_mask = S(RAN_CONN_E_COMPLETE_LAYER_3) | + S(RAN_CONN_E_COMMUNICATING) | + S(RAN_CONN_E_RELEASE_WHEN_UNUSED) | + S(RAN_CONN_E_ACCEPTED) | + S(RAN_CONN_E_MO_CLOSE) | + S(RAN_CONN_E_CN_CLOSE) | + S(RAN_CONN_E_UNUSED), + .out_state_mask = S(RAN_CONN_S_RELEASING) | + S(RAN_CONN_S_COMMUNICATING), + .onenter = ran_conn_fsm_accepted_enter, + .action = ran_conn_fsm_accepted, }, - [SUBSCR_CONN_S_COMMUNICATING] = { - .name = OSMO_STRINGIFY(SUBSCR_CONN_S_COMMUNICATING), + [RAN_CONN_S_COMMUNICATING] = { + .name = OSMO_STRINGIFY(RAN_CONN_S_COMMUNICATING), /* allow everything to release for any odd behavior */ - .in_event_mask = S(SUBSCR_CONN_E_RELEASE_WHEN_UNUSED) | - S(SUBSCR_CONN_E_ACCEPTED) | - S(SUBSCR_CONN_E_COMMUNICATING) | - S(SUBSCR_CONN_E_MO_CLOSE) | - S(SUBSCR_CONN_E_CN_CLOSE) | - S(SUBSCR_CONN_E_UNUSED), - .out_state_mask = S(SUBSCR_CONN_S_RELEASING), - .action = subscr_conn_fsm_communicating, + .in_event_mask = S(RAN_CONN_E_RELEASE_WHEN_UNUSED) | + S(RAN_CONN_E_ACCEPTED) | + S(RAN_CONN_E_COMMUNICATING) | + S(RAN_CONN_E_MO_CLOSE) | + S(RAN_CONN_E_CN_CLOSE) | + S(RAN_CONN_E_UNUSED), + .out_state_mask = S(RAN_CONN_S_RELEASING), + .action = ran_conn_fsm_communicating, }, - [SUBSCR_CONN_S_RELEASING] = { - .name = OSMO_STRINGIFY(SUBSCR_CONN_S_RELEASING), - .in_event_mask = S(SUBSCR_CONN_E_UNUSED), - .out_state_mask = S(SUBSCR_CONN_S_RELEASED), - .onenter = subscr_conn_fsm_releasing_onenter, - .action = subscr_conn_fsm_releasing, + [RAN_CONN_S_RELEASING] = { + .name = OSMO_STRINGIFY(RAN_CONN_S_RELEASING), + .in_event_mask = S(RAN_CONN_E_UNUSED), + .out_state_mask = S(RAN_CONN_S_RELEASED), + .onenter = ran_conn_fsm_releasing_onenter, + .action = ran_conn_fsm_releasing, }, - [SUBSCR_CONN_S_RELEASED] = { - .name = OSMO_STRINGIFY(SUBSCR_CONN_S_RELEASED), - .onenter = subscr_conn_fsm_released, + [RAN_CONN_S_RELEASED] = { + .name = OSMO_STRINGIFY(RAN_CONN_S_RELEASED), + .onenter = ran_conn_fsm_released, }, }; -static void subscr_conn_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause); +static void ran_conn_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause); -static struct osmo_fsm subscr_conn_fsm = { - .name = "Subscr_Conn", - .states = subscr_conn_fsm_states, - .num_states = ARRAY_SIZE(subscr_conn_fsm_states), +static struct osmo_fsm ran_conn_fsm = { + .name = "RAN_conn", + .states = ran_conn_fsm_states, + .num_states = ARRAY_SIZE(ran_conn_fsm_states), .allstate_event_mask = 0, .allstate_action = NULL, .log_subsys = DMM, - .event_names = subscr_conn_fsm_event_names, - .cleanup = subscr_conn_fsm_cleanup, - .timer_cb = subscr_conn_fsm_timeout, + .event_names = ran_conn_fsm_event_names, + .cleanup = ran_conn_fsm_cleanup, + .timer_cb = ran_conn_fsm_timeout, }; -char *msc_subscr_conn_get_conn_id(struct gsm_subscriber_connection *conn) +char *ran_conn_get_conn_id(struct ran_conn *conn) { char *id; @@ -511,64 +511,64 @@ char *msc_subscr_conn_get_conn_id(struct gsm_subscriber_connection *conn) } /* Tidy up before the FSM deallocates */ -static void subscr_conn_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause) +static void ran_conn_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause) { - struct gsm_subscriber_connection *conn = fi->priv; + struct ran_conn *conn = fi->priv; - if (subscr_conn_fsm_has_active_transactions(fi)) + if (ran_conn_fsm_has_active_transactions(fi)) LOGPFSML(fi, LOGL_ERROR, "Deallocating despite active transactions\n"); if (!conn) { - LOGP(DRLL, LOGL_ERROR, "Freeing NULL subscriber connection\n"); + LOGP(DRLL, LOGL_ERROR, "Freeing NULL RAN connection\n"); return; } if (conn->vsub) { - DEBUGP(DRLL, "%s: Freeing subscriber connection\n", vlr_subscr_name(conn->vsub)); + DEBUGP(DRLL, "%s: Freeing RAN connection\n", vlr_subscr_name(conn->vsub)); conn->vsub->lu_fsm = NULL; conn->vsub->msc_conn_ref = NULL; vlr_subscr_put(conn->vsub); conn->vsub = NULL; } else - DEBUGP(DRLL, "Freeing subscriber connection with NULL subscriber\n"); + DEBUGP(DRLL, "Freeing RAN connection with NULL subscriber\n"); llist_del(&conn->entry); } /* Signal success of Complete Layer 3. Allow to keep the conn open for Auth and Ciph. */ -void msc_subscr_conn_complete_layer_3(struct gsm_subscriber_connection *conn) +void ran_conn_complete_layer_3(struct ran_conn *conn) { if (!conn) return; - osmo_fsm_inst_dispatch(conn->fi, SUBSCR_CONN_E_COMPLETE_LAYER_3, NULL); + osmo_fsm_inst_dispatch(conn->fi, RAN_CONN_E_COMPLETE_LAYER_3, NULL); } -void subscr_conn_release_when_unused(struct gsm_subscriber_connection *conn) +void ran_conn_release_when_unused(struct ran_conn *conn) { if (!conn) return; - if (msc_subscr_conn_in_release(conn)) { + if (ran_conn_in_release(conn)) { DEBUGP(DMM, "%s: %s: conn already in release (%s)\n", vlr_subscr_name(conn->vsub), __func__, osmo_fsm_inst_state_name(conn->fi)); return; } - if (conn->fi->state == SUBSCR_CONN_S_NEW) { + if (conn->fi->state == RAN_CONN_S_NEW) { DEBUGP(DMM, "%s: %s: conn still being established (%s)\n", vlr_subscr_name(conn->vsub), __func__, osmo_fsm_inst_state_name(conn->fi)); return; } - osmo_fsm_inst_dispatch(conn->fi, SUBSCR_CONN_E_RELEASE_WHEN_UNUSED, NULL); + osmo_fsm_inst_dispatch(conn->fi, RAN_CONN_E_RELEASE_WHEN_UNUSED, NULL); } -static void conn_close(struct gsm_subscriber_connection *conn, uint32_t cause, uint32_t event) +static void conn_close(struct ran_conn *conn, uint32_t cause, uint32_t event) { if (!conn) { LOGP(DMM, LOGL_ERROR, "Cannot release NULL connection\n"); return; } - if (msc_subscr_conn_in_release(conn)) { + if (ran_conn_in_release(conn)) { DEBUGP(DMM, "%s(vsub=%s, cause=%u): already in release, ignore.\n", __func__, vlr_subscr_name(conn->vsub), cause); return; @@ -576,75 +576,75 @@ static void conn_close(struct gsm_subscriber_connection *conn, uint32_t cause, u osmo_fsm_inst_dispatch(conn->fi, event, &cause); } -void msc_subscr_conn_close(struct gsm_subscriber_connection *conn, uint32_t cause) +void ran_conn_close(struct ran_conn *conn, uint32_t cause) { - return conn_close(conn, cause, SUBSCR_CONN_E_CN_CLOSE); + return conn_close(conn, cause, RAN_CONN_E_CN_CLOSE); } -void msc_subscr_conn_mo_close(struct gsm_subscriber_connection *conn, uint32_t cause) +void ran_conn_mo_close(struct ran_conn *conn, uint32_t cause) { - return conn_close(conn, cause, SUBSCR_CONN_E_MO_CLOSE); + return conn_close(conn, cause, RAN_CONN_E_MO_CLOSE); } -bool msc_subscr_conn_in_release(struct gsm_subscriber_connection *conn) +bool ran_conn_in_release(struct ran_conn *conn) { if (!conn || !conn->fi) return true; - if (conn->fi->state == SUBSCR_CONN_S_RELEASING) + if (conn->fi->state == RAN_CONN_S_RELEASING) return true; - if (conn->fi->state == SUBSCR_CONN_S_RELEASED) + if (conn->fi->state == RAN_CONN_S_RELEASED) return true; return false; } -bool msc_subscr_conn_is_accepted(const struct gsm_subscriber_connection *conn) +bool ran_conn_is_accepted(const struct ran_conn *conn) { if (!conn) return false; if (!conn->vsub) return false; - if (!(conn->fi->state == SUBSCR_CONN_S_ACCEPTED - || conn->fi->state == SUBSCR_CONN_S_COMMUNICATING)) + if (!(conn->fi->state == RAN_CONN_S_ACCEPTED + || conn->fi->state == RAN_CONN_S_COMMUNICATING)) return false; return true; } /* Indicate that *some* communication is happening with the phone, so that the conn FSM no longer times * out to release within a few seconds. */ -void msc_subscr_conn_communicating(struct gsm_subscriber_connection *conn) +void ran_conn_communicating(struct ran_conn *conn) { - osmo_fsm_inst_dispatch(conn->fi, SUBSCR_CONN_E_COMMUNICATING, NULL); + osmo_fsm_inst_dispatch(conn->fi, RAN_CONN_E_COMMUNICATING, NULL); } -void msc_subscr_conn_init(void) +void ran_conn_init(void) { - osmo_fsm_register(&subscr_conn_fsm); + osmo_fsm_register(&ran_conn_fsm); } -/* Allocate a new subscriber conn and FSM. - * Deallocation is by msc_subscr_conn_put(): when the use count reaches zero, the - * SUBSCR_CONN_E_RELEASE_COMPLETE event is dispatched, the FSM terminates and deallocates both FSM and +/* Allocate a new RAN conn and FSM. + * Deallocation is by ran_conn_put(): when the use count reaches zero, the + * RAN_CONN_E_RELEASE_COMPLETE event is dispatched, the FSM terminates and deallocates both FSM and * conn. As long as the FSM is waiting for responses from the subscriber, it will itself hold a use count * on the conn. */ -struct gsm_subscriber_connection *msc_subscr_conn_alloc(struct gsm_network *network, +struct ran_conn *ran_conn_alloc(struct gsm_network *network, enum ran_type via_ran, uint16_t lac) { - struct gsm_subscriber_connection *conn; + struct ran_conn *conn; struct osmo_fsm_inst *fi; - fi = osmo_fsm_inst_alloc(&subscr_conn_fsm, network, NULL, LOGL_DEBUG, NULL); + fi = osmo_fsm_inst_alloc(&ran_conn_fsm, network, NULL, LOGL_DEBUG, NULL); if (!fi) { LOGP(DMM, LOGL_ERROR, "Failed to allocate conn FSM\n"); return NULL; } - conn = talloc_zero(fi, struct gsm_subscriber_connection); + conn = talloc_zero(fi, struct ran_conn); if (!conn) { osmo_fsm_inst_free(fi); return NULL; } - *conn = (struct gsm_subscriber_connection){ + *conn = (struct ran_conn){ .network = network, .via_ran = via_ran, .lac = lac, @@ -652,15 +652,15 @@ struct gsm_subscriber_connection *msc_subscr_conn_alloc(struct gsm_network *netw }; fi->priv = conn; - llist_add_tail(&conn->entry, &network->subscr_conns); + llist_add_tail(&conn->entry, &network->ran_conns); return conn; } -bool msc_subscr_conn_is_establishing_auth_ciph(const struct gsm_subscriber_connection *conn) +bool ran_conn_is_establishing_auth_ciph(const struct ran_conn *conn) { if (!conn) return false; - return conn->fi->state == SUBSCR_CONN_S_AUTH_CIPH; + return conn->fi->state == RAN_CONN_S_AUTH_CIPH; } @@ -672,7 +672,7 @@ const struct value_string complete_layer3_type_names[] = { { 0, NULL } }; -void msc_subscr_conn_update_id(struct gsm_subscriber_connection *conn, +void ran_conn_update_id(struct ran_conn *conn, enum complete_layer3_type from, const char *id) { conn->complete_layer3_type = from; @@ -680,11 +680,11 @@ void msc_subscr_conn_update_id(struct gsm_subscriber_connection *conn, LOGPFSML(conn->fi, LOGL_DEBUG, "Updated ID\n"); } -static void rx_close_complete(struct gsm_subscriber_connection *conn, const char *label, bool *flag) +static void rx_close_complete(struct ran_conn *conn, const char *label, bool *flag) { if (!conn) return; - if (!msc_subscr_conn_in_release(conn)) { + if (!ran_conn_in_release(conn)) { LOGPFSML(conn->fi, LOGL_ERROR, "Received unexpected %s, discarding right now\n", label); trans_conn_closed(conn); @@ -693,16 +693,16 @@ static void rx_close_complete(struct gsm_subscriber_connection *conn, const char } if (*flag) { *flag = false; - msc_subscr_conn_put(conn, MSC_CONN_USE_RELEASE); + ran_conn_put(conn, MSC_CONN_USE_RELEASE); } } -void msc_subscr_conn_rx_bssmap_clear_complete(struct gsm_subscriber_connection *conn) +void ran_conn_rx_bssmap_clear_complete(struct ran_conn *conn) { rx_close_complete(conn, "BSSMAP Clear Complete", &conn->a.waiting_for_clear_complete); } -void msc_subscr_conn_rx_iu_release_complete(struct gsm_subscriber_connection *conn) +void ran_conn_rx_iu_release_complete(struct ran_conn *conn) { rx_close_complete(conn, "Iu Release Complete", &conn->iu.waiting_for_release_complete); } diff --git a/src/libmsc/transaction.c b/src/libmsc/transaction.c index cffbe0dac..5c80e5f3c 100644 --- a/src/libmsc/transaction.c +++ b/src/libmsc/transaction.c @@ -40,7 +40,7 @@ void _gsm911_nc_ss_trans_free(struct gsm_trans *trans); * \param[in] trans_id Transaction ID of transaction * \returns Matching transaction, if any */ -struct gsm_trans *trans_find_by_id(struct gsm_subscriber_connection *conn, +struct gsm_trans *trans_find_by_id(struct ran_conn *conn, uint8_t proto, uint8_t trans_id) { struct gsm_trans *trans; @@ -78,7 +78,7 @@ struct gsm_trans *trans_find_by_callref(struct gsm_network *net, * \param[in] sm_rp_mr RP Message Reference (see GSM TS 04.11, section 8.2.3) * \returns Matching transaction, NULL otherwise */ -struct gsm_trans *trans_find_by_sm_rp_mr(struct gsm_subscriber_connection *conn, +struct gsm_trans *trans_find_by_sm_rp_mr(struct ran_conn *conn, uint8_t sm_rp_mr) { struct gsm_network *net = conn->network; @@ -140,8 +140,8 @@ struct gsm_trans *trans_alloc(struct gsm_network *net, */ void trans_free(struct gsm_trans *trans) { - enum msc_subscr_conn_use conn_usage_token = MSC_CONN_USE_UNTRACKED; - struct gsm_subscriber_connection *conn; + enum ran_conn_use conn_usage_token = MSC_CONN_USE_UNTRACKED; + struct ran_conn *conn; switch (trans->protocol) { case GSM48_PDISC_CC: @@ -174,7 +174,7 @@ void trans_free(struct gsm_trans *trans) talloc_free(trans); if (conn) - msc_subscr_conn_put(conn, conn_usage_token); + ran_conn_put(conn, conn_usage_token); } /*! allocate an unused transaction ID for the given subscriber @@ -220,7 +220,7 @@ int trans_assign_trans_id(struct gsm_network *net, struct vlr_subscr *vsub, * \param[in] conn Connection to check * \returns 1 in case there is a transaction, 0 otherwise */ -struct gsm_trans *trans_has_conn(const struct gsm_subscriber_connection *conn) +struct gsm_trans *trans_has_conn(const struct ran_conn *conn) { struct gsm_trans *trans; @@ -236,7 +236,7 @@ struct gsm_trans *trans_has_conn(const struct gsm_subscriber_connection *conn) * facilities, which will then send the necessary release indications. * \param[in] conn Connection that is going to be closed. */ -void trans_conn_closed(struct gsm_subscriber_connection *conn) +void trans_conn_closed(struct ran_conn *conn) { struct gsm_trans *trans; diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c index f7ac864d3..189cb6646 100644 --- a/src/libvlr/vlr.c +++ b/src/libvlr/vlr.c @@ -1168,7 +1168,7 @@ int vlr_subscr_rx_imsi_detach(struct vlr_subscr *vsub) * message before the entire connection is torn down. * \param[in] vsub subscriber to tear down */ -void vlr_subscr_conn_timeout(struct vlr_subscr *vsub) +void vlr_ran_conn_timeout(struct vlr_subscr *vsub) { vlr_subscr_cancel_attach_fsm(vsub, OSMO_FSM_TERM_TIMEOUT, GSM48_REJECT_CONGESTION); } diff --git a/src/osmo-msc/msc_main.c b/src/osmo-msc/msc_main.c index 53d27d373..a13904690 100644 --- a/src/osmo-msc/msc_main.c +++ b/src/osmo-msc/msc_main.c @@ -642,7 +642,7 @@ TODO: we probably want some of the _net_ ctrl commands from bsc_base_ctrl_cmds_i exit(1); } - msc_subscr_conn_init(); + ran_conn_init(); if (db_prepare()) { printf("DB: Failed to prepare database.\n"); |