aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-12-18 18:27:43 +0100
committerHarald Welte <laforge@gnumonks.org>2017-12-19 18:58:51 +0100
commitea0c3203db95518c75258bf5c6bb350a3ffb56fc (patch)
treea67cdbb7c4faa862f1467ef98a28ddc78e63f2d0
parentca494f385e2f71475c7f4dd04383939729fed9d6 (diff)
osmo-bsc: Move user plane/voice related bits into sub-structure
This clarifies which members of the struct are for what. Change-Id: I618822e6f2d48adce25f9df5c25acbce7c858412
-rw-r--r--include/osmocom/bsc/osmo_bsc.h34
-rw-r--r--src/osmo-bsc/osmo_bsc_api.c2
-rw-r--r--src/osmo-bsc/osmo_bsc_audio.c14
-rw-r--r--src/osmo-bsc/osmo_bsc_bssap.c25
-rw-r--r--src/osmo-bsc/osmo_bsc_ctrl.c2
-rw-r--r--src/osmo-bsc/osmo_bsc_mgcp.c10
-rw-r--r--src/osmo-bsc/osmo_bsc_sigtran.c4
7 files changed, 45 insertions, 46 deletions
diff --git a/include/osmocom/bsc/osmo_bsc.h b/include/osmocom/bsc/osmo_bsc.h
index 131007bb6..485c83648 100644
--- a/include/osmocom/bsc/osmo_bsc.h
+++ b/include/osmocom/bsc/osmo_bsc.h
@@ -26,23 +26,23 @@ struct osmo_bsc_sccp_con {
int ciphering_handled;
/* for audio handling */
- uint16_t cic;
- uint32_t rtp_ip;
- int rtp_port;
-
- /* RTP address of the remote end (assigned by MSC through assignment
- * request) */
- struct sockaddr_storage aoip_rtp_addr_remote;
-
- /* Local RTP address (reported back to the MSC by us with the
- * assignment complete message) */
- struct sockaddr_storage aoip_rtp_addr_local;
-
- /* storage to keep states of the MGCP connection handler, the
- * handler is created when an assignment request is received
- * and is terminated when the assignment complete message is
- * sent */
- struct mgcp_ctx *mgcp_ctx;
+ struct {
+ uint16_t cic;
+ uint32_t rtp_ip;
+ int rtp_port;
+ /* RTP address of the remote end (assigned by MSC through assignment request) */
+ struct sockaddr_storage aoip_rtp_addr_remote;
+
+ /* Local RTP address (reported back to the MSC by us with the
+ * assignment complete message) */
+ struct sockaddr_storage aoip_rtp_addr_local;
+
+ /* storage to keep states of the MGCP connection handler, the
+ * handler is created when an assignment request is received
+ * and is terminated when the assignment complete message is
+ * sent */
+ struct mgcp_ctx *mgcp_ctx;
+ } user_plane;
/* for advanced ping/pong */
int send_ping;
diff --git a/src/osmo-bsc/osmo_bsc_api.c b/src/osmo-bsc/osmo_bsc_api.c
index 152b81837..a2a863068 100644
--- a/src/osmo-bsc/osmo_bsc_api.c
+++ b/src/osmo-bsc/osmo_bsc_api.c
@@ -435,7 +435,7 @@ static void bsc_assign_compl(struct gsm_subscriber_connection *conn, uint8_t rr_
struct msgb *resp;
return_when_not_connected(conn);
- if (is_ipaccess_bts(conn->bts) && conn->sccp_con->rtp_ip) {
+ if (is_ipaccess_bts(conn->bts) && conn->sccp_con->user_plane.rtp_ip) {
/* NOTE: In a network that makes use of an IPA base station
* and AoIP, we have to wait until the BTS reports its RTP
* IP/Port combination back to BSC via RSL. Unfortunately, the
diff --git a/src/osmo-bsc/osmo_bsc_audio.c b/src/osmo-bsc/osmo_bsc_audio.c
index 0c11b85e3..82367f074 100644
--- a/src/osmo-bsc/osmo_bsc_audio.c
+++ b/src/osmo-bsc/osmo_bsc_audio.c
@@ -57,17 +57,17 @@ static int handle_abisip_signal(unsigned int subsys, unsigned int signal,
/* we can ask it to connect now */
LOGP(DMSC, LOGL_DEBUG, "Connecting BTS to port: %d conn: %d\n",
- con->sccp_con->rtp_port, lchan->abis_ip.conn_id);
+ con->sccp_con->user_plane.rtp_port, lchan->abis_ip.conn_id);
/* If AoIP is in use, the rtp_ip, which has been communicated
* via the A interface as connect_ip */
- if(con->sccp_con->rtp_ip)
- rtp_ip = con->sccp_con->rtp_ip;
+ if(con->sccp_con->user_plane.rtp_ip)
+ rtp_ip = con->sccp_con->user_plane.rtp_ip;
else
rtp_ip = ntohl(INADDR_ANY);
rc = rsl_ipacc_mdcx(lchan, rtp_ip,
- con->sccp_con->rtp_port,
+ con->sccp_con->user_plane.rtp_port,
lchan->abis_ip.rtp_payload2);
if (rc < 0) {
LOGP(DMSC, LOGL_ERROR, "Failed to send MDCX: %d\n", rc);
@@ -84,13 +84,13 @@ static int handle_abisip_signal(unsigned int subsys, unsigned int signal,
* inform the logic that controls the MGW about the new
* connection info */
LOGP(DMSC, LOGL_INFO,"RTP connection handover initiated...\n");
- mgcp_handover(con->sccp_con->mgcp_ctx, con->ho_lchan);
- } else if (is_ipaccess_bts(con->bts) && con->sccp_con->rtp_ip) {
+ mgcp_handover(con->sccp_con->user_plane.mgcp_ctx, con->ho_lchan);
+ } else if (is_ipaccess_bts(con->bts) && con->sccp_con->user_plane.rtp_ip) {
/* NOTE: This is only relevant on AoIP networks with
* IPA based base stations. See also osmo_bsc_api.c,
* function bsc_assign_compl() */
LOGP(DMSC, LOGL_INFO, "Tx MSC ASSIGN COMPL (POSTPONED)\n");
- mgcp_ass_complete(con->sccp_con->mgcp_ctx, lchan);
+ mgcp_ass_complete(con->sccp_con->user_plane.mgcp_ctx, lchan);
}
break;
}
diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c
index aea3994ee..6f2d0f4a0 100644
--- a/src/osmo-bsc/osmo_bsc_bssap.c
+++ b/src/osmo-bsc/osmo_bsc_bssap.c
@@ -361,13 +361,13 @@ static int bssmap_handle_clear_command(struct osmo_bsc_sccp_con *conn,
return -1;
}
- if (conn->mgcp_ctx) {
+ if (conn->user_plane.mgcp_ctx) {
/* NOTE: This is the AoIP case, osmo-bsc has to negotiate with
* the MGCP-GW. For this an mgcp_ctx should be created that
* contains the FSM and some system data. When the connection
* is removed from the MGCP-GW, then osmo_bsc_sigtran_send()
* calls osmo_bsc_sigtran_send(). */
- mgcp_clear_complete(conn->mgcp_ctx, resp);
+ mgcp_clear_complete(conn->user_plane.mgcp_ctx, resp);
} else {
/* NOTE: This is the SCCP-Lite case, since we do not handle
* the MGCP-GW switching ourselves, we may skip everything
@@ -535,11 +535,9 @@ static int bssmap_handle_assignm_req(struct osmo_bsc_sccp_con *conn,
/* Detect if a CIC code is present, if so, we use the classic ip.access
* method to calculate the RTP port */
if (TLVP_PRESENT(&tp, GSM0808_IE_CIRCUIT_IDENTITY_CODE)) {
- conn->cic =
- osmo_load16be(TLVP_VAL
- (&tp, GSM0808_IE_CIRCUIT_IDENTITY_CODE));
- timeslot = conn->cic & 0x1f;
- multiplex = (conn->cic & ~0x1f) >> 5;
+ conn->user_plane.cic = osmo_load16be(TLVP_VAL(&tp, GSM0808_IE_CIRCUIT_IDENTITY_CODE));
+ timeslot = conn->user_plane.cic & 0x1f;
+ multiplex = (conn->user_plane.cic & ~0x1f) >> 5;
} else if (TLVP_PRESENT(&tp, GSM0808_IE_AOIP_TRASP_ADDR)) {
/* Decode AoIP transport address element */
data = TLVP_VAL(&tp, GSM0808_IE_AOIP_TRASP_ADDR);
@@ -621,15 +619,16 @@ static int bssmap_handle_assignm_req(struct osmo_bsc_sccp_con *conn,
* reasons, functional wise it would not matter when exactly
* the network side RTP connection is made, as long it is made
* before we return with the assignment complete message. */
- memcpy(&conn->aoip_rtp_addr_remote, &rtp_addr, sizeof(rtp_addr));
+ memcpy(&conn->user_plane.aoip_rtp_addr_remote, &rtp_addr, sizeof(rtp_addr));
/* Create an assignment request using the MGCP fsm. This FSM
* is directly started when its created (now) and will also
* take care about the further processing (creating RTP
* endpoints, calling gsm0808_assign_req(), responding to
* the assignment request etc... */
- conn->mgcp_ctx = mgcp_assignm_req(msc->network, msc->network->mgw.client, conn, chan_mode, full_rate);
- if (!conn->mgcp_ctx) {
+ conn->user_plane.mgcp_ctx = mgcp_assignm_req(msc->network, msc->network->mgw.client,
+ conn, chan_mode, full_rate);
+ if (!conn->user_plane.mgcp_ctx) {
LOGP(DMSC, LOGL_ERROR, "MGCP GW failure, rejecting assignment... (id=%i)\n", conn->conn_id);
goto reject;
}
@@ -641,8 +640,8 @@ static int bssmap_handle_assignm_req(struct osmo_bsc_sccp_con *conn,
* (the MSC does that for us). We set conn->rtp_ip to 0 and check
* on this later. By this we know that we have to behave accordingly
* to sccp-lite. */
- conn->rtp_port = mgcp_timeslot_to_port(multiplex, timeslot, msc->rtp_base);
- conn->rtp_ip = 0;
+ conn->user_plane.rtp_port = mgcp_timeslot_to_port(multiplex, timeslot, msc->rtp_base);
+ conn->user_plane.rtp_ip = 0;
return gsm0808_assign_req(conn->conn, chan_mode, full_rate);
}
@@ -849,7 +848,7 @@ int bssmap_send_aoip_ass_compl(struct gsm_lchan *lchan)
lchan->abis_ip.ass_compl.chosen_channel,
lchan->abis_ip.ass_compl.encr_alg_id,
lchan->abis_ip.ass_compl.speech_mode,
- &conn->sccp_con->aoip_rtp_addr_local,
+ &conn->sccp_con->user_plane.aoip_rtp_addr_local,
&sc,
NULL);
diff --git a/src/osmo-bsc/osmo_bsc_ctrl.c b/src/osmo-bsc/osmo_bsc_ctrl.c
index 633089247..8c9dfe7a9 100644
--- a/src/osmo-bsc/osmo_bsc_ctrl.c
+++ b/src/osmo-bsc/osmo_bsc_ctrl.c
@@ -552,7 +552,7 @@ static int set_net_ussd_notify(struct ctrl_cmd *cmd, void *data)
if (!conn->sccp_con)
continue;
- if (conn->sccp_con->cic != cic)
+ if (conn->sccp_con->user_plane.cic != cic)
continue;
/*
diff --git a/src/osmo-bsc/osmo_bsc_mgcp.c b/src/osmo-bsc/osmo_bsc_mgcp.c
index f5efa95be..ebd13d6dc 100644
--- a/src/osmo-bsc/osmo_bsc_mgcp.c
+++ b/src/osmo-bsc/osmo_bsc_mgcp.c
@@ -231,8 +231,8 @@ static void crcx_for_bts_resp_cb(struct mgcp_response *r, void *priv)
/* Set the connection details in the conn struct. The code that
* controls the BTS via RSL will take these values and signal them
* to the BTS via RSL/IPACC */
- conn->rtp_port = r->audio_port;
- conn->rtp_ip = osmo_ntohl(inet_addr(r->audio_ip));
+ conn->user_plane.rtp_port = r->audio_port;
+ conn->user_plane.rtp_ip = osmo_ntohl(inet_addr(r->audio_ip));
/* Notify the FSM that we got the response. */
osmo_fsm_inst_dispatch(mgcp_ctx->fsm, EV_CRCX_BTS_RESP, mgcp_ctx);
@@ -428,7 +428,7 @@ static void fsm_crcx_net_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data
* identifier. However, the MGW does not support IPv6 yet. This is
* why we stop here in case some MSC tries to signal IPv6 AoIP
* transport identifiers */
- if (conn->aoip_rtp_addr_remote.ss_family != AF_INET) {
+ if (conn->user_plane.aoip_rtp_addr_remote.ss_family != AF_INET) {
LOGPFSML(fi, LOGL_ERROR,
"CRCX/NET: endpoint:%x MSC uses unsupported address format in AoIP transport identifier -- aborting...\n",
rtp_endpoint);
@@ -436,7 +436,7 @@ static void fsm_crcx_net_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data
return;
}
- sin = (struct sockaddr_in *)&conn->aoip_rtp_addr_remote;
+ sin = (struct sockaddr_in *)&conn->user_plane.aoip_rtp_addr_remote;
addr = inet_ntoa(sin->sin_addr);
port = osmo_ntohs(sin->sin_port);
LOGPFSML(fi, LOGL_DEBUG, "CRCX/NET: MSC expects RTP input on address %s:%u\n", addr, port);
@@ -512,7 +512,7 @@ static void crcx_for_net_resp_cb(struct mgcp_response *r, void *priv)
r->audio_ip, r->audio_port);
/* Store address */
- sin = (struct sockaddr_in *)&conn->aoip_rtp_addr_local;
+ sin = (struct sockaddr_in *)&conn->user_plane.aoip_rtp_addr_local;
sin->sin_family = AF_INET;
sin->sin_addr.s_addr = inet_addr(r->audio_ip);
sin->sin_port = osmo_ntohs(r->audio_port);
diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c
index 7669b67b7..67f870378 100644
--- a/src/osmo-bsc/osmo_bsc_sigtran.c
+++ b/src/osmo-bsc/osmo_bsc_sigtran.c
@@ -385,8 +385,8 @@ int osmo_bsc_sigtran_del_conn(struct osmo_bsc_sccp_con *conn)
}
/* Remove mgcp context if existant */
- if (conn->mgcp_ctx)
- mgcp_free_ctx(conn->mgcp_ctx);
+ if (conn->user_plane.mgcp_ctx)
+ mgcp_free_ctx(conn->user_plane.mgcp_ctx);
llist_del(&conn->entry);
talloc_free(conn);