osmux: Simplify and constify param passing
Parameters passed to several functions are rearrange to make code
simplier to follow, as well as dependencies between the different
functions. As a result, some parameters can be marked as const while
doing the change.
Change-Id: Idebd4a66630c16548f557632a54d6b7e1b3906fd
diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c
index ebb41a6..f820276 100644
--- a/src/libosmo-mgcp/mgcp_osmux.c
+++ b/src/libosmo-mgcp/mgcp_osmux.c
@@ -151,11 +151,10 @@
/* Allocate free OSMUX handle */
static struct osmux_handle *
-osmux_handle_alloc(struct mgcp_conn_rtp *conn, const struct osmo_sockaddr *rem_addr)
+osmux_handle_alloc(const struct mgcp_trunk *trunk, const struct osmo_sockaddr *rem_addr)
{
struct osmux_handle *h;
- struct mgcp_trunk *trunk = conn->conn->endp->trunk;
- struct mgcp_config *cfg = trunk->cfg;
+ const struct mgcp_config *cfg = trunk->cfg;
h = talloc_zero(trunk, struct osmux_handle);
if (!h)
@@ -186,7 +185,7 @@
/* Lookup existing handle for a specified address, if the handle can not be
* found, the function will automatically allocate one */
static struct osmux_in_handle *
-osmux_handle_find_or_create(struct mgcp_conn_rtp *conn, const struct osmo_sockaddr *rem_addr)
+osmux_handle_find_or_create(const struct mgcp_trunk *trunk, const struct osmo_sockaddr *rem_addr)
{
struct osmux_handle *h;
@@ -194,7 +193,7 @@
if (h != NULL)
return h->in;
- h = osmux_handle_alloc(conn, rem_addr);
+ h = osmux_handle_alloc(trunk, rem_addr);
if (h == NULL)
return NULL;
@@ -245,7 +244,7 @@
/* Lookup the endpoint that corresponds to the specified address (port) */
static struct mgcp_conn_rtp*
-osmux_conn_lookup(struct mgcp_trunk *trunk, uint8_t local_cid, const struct osmo_sockaddr *rem_addr)
+osmux_conn_lookup(const struct mgcp_trunk *trunk, uint8_t local_cid, const struct osmo_sockaddr *rem_addr)
{
struct mgcp_endpoint *endp;
struct mgcp_conn *conn = NULL;
@@ -292,7 +291,7 @@
static void scheduled_from_osmux_tx_rtp_cb(struct msgb *msg, void *data)
{
struct mgcp_conn_rtp *conn = data;
- struct mgcp_endpoint *endp = conn->conn->endp;
+ const struct mgcp_endpoint *endp = conn->conn->endp;
struct osmux_handle *h = osmux_xfrm_input_get_deliver_cb_data(conn->osmux.in);
struct osmo_rtp_msg_ctx *mc = OSMO_RTP_MSG_CTX(msg);
*mc = (struct osmo_rtp_msg_ctx){
@@ -327,16 +326,13 @@
return msg;
}
-/* Updates endp osmux state and returns 0 if it can process messages, -1 otherwise */
-static int endp_osmux_state_check(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn,
+/* Updates conn osmux state and returns 0 if it can process messages, -1 otherwise */
+static int conn_osmux_state_check(struct mgcp_conn_rtp *conn,
bool sending)
{
- struct osmo_sockaddr rem_addr;
-
switch(conn->osmux.state) {
case OSMUX_STATE_ACTIVATING:
- rem_addr = conn->end.addr;
- if (osmux_enable_conn(endp, conn, &rem_addr) < 0) {
+ if (conn_osmux_enable(conn) < 0) {
LOGPCONN(conn->conn, DOSMUX, LOGL_ERROR,
"Could not enable osmux for conn on %s: %s\n",
sending ? "sent" : "received",
@@ -347,7 +343,7 @@
"Osmux %s CID %u towards %s is now enabled\n",
sending ? "sent" : "received",
sending ? conn->osmux.remote_cid : conn->osmux.local_cid,
- osmo_sockaddr_to_str(&rem_addr));
+ osmo_sockaddr_to_str(&conn->end.addr));
return 0;
case OSMUX_STATE_ENABLED:
return 0;
@@ -362,8 +358,8 @@
/* Old versions of osmux used to send dummy packets [0x23 0x<CID>] to punch the
* hole in the NAT. Let's handle them speficially. */
-static int osmux_handle_legacy_dummy(struct mgcp_trunk *trunk, const struct osmo_sockaddr *rem_addr,
- struct msgb *msg)
+static int osmux_handle_legacy_dummy(const struct mgcp_trunk *trunk, const struct osmo_sockaddr *rem_addr,
+ struct msgb *msg)
{
uint8_t osmux_cid = msg->data[1];
struct mgcp_conn_rtp *conn;
@@ -375,7 +371,7 @@
goto out;
}
- endp_osmux_state_check(conn->conn->endp, conn, false);
+ conn_osmux_state_check(conn, false);
/* Only needed to punch hole in firewall, it can be dropped */
out:
msgb_free(msg);
@@ -413,7 +409,6 @@
rem = msg->len;
while((osmuxh = osmux_xfrm_output_pull(msg)) != NULL) {
- struct mgcp_endpoint *endp;
struct mgcp_conn_rtp *conn_src;
conn_src = osmux_conn_lookup(trunk, osmuxh->circuit_id,
&rem_addr);
@@ -424,10 +419,9 @@
rem = msg->len;
continue;
}
- endp = conn_src->conn->endp;
mgcp_conn_watchdog_kick(conn_src->conn);
- if (endp_osmux_state_check(endp, conn_src, false) == 0) {
+ if (conn_osmux_state_check(conn_src, false) == 0) {
rtpconn_osmux_rate_ctr_inc(conn_src, OSMUX_CHUNKS_RX_CTR);
rtpconn_osmux_rate_ctr_add(conn_src, OSMUX_OCTETS_RX_CTR,
osmux_chunk_length(msg, rem));
@@ -505,12 +499,9 @@
}
/*! enable OSXMUX circuit for a specified connection.
- * \param[in] endp mgcp endpoint (configuration)
- * \param[in] conn connection to disable
- * \param[in] addr IP address and port of remote OSMUX endpoint
+ * \param[in] conn connection to enable
* \returns 0 on success, -1 on ERROR */
-int osmux_enable_conn(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn,
- const struct osmo_sockaddr *rem_addr)
+int conn_osmux_enable(struct mgcp_conn_rtp *conn)
{
/*! If osmux is enabled, initialize the output handler. This handler is
* used to reconstruct the RTP flow from osmux. The RTP SSRC is
@@ -521,8 +512,9 @@
* overlapping RTP SSRC traveling to the BTSes behind the BSC,
* similarly, for flows traveling to the MSC.
*/
+ const struct mgcp_trunk *trunk = conn->conn->endp->trunk;
static const uint32_t rtp_ssrc_winlen = UINT32_MAX / (OSMUX_CID_MAX + 1);
- uint16_t osmux_dummy = endp->trunk->cfg->osmux_dummy;
+ uint16_t osmux_dummy = trunk->cfg->osmux_dummy;
/* Check if osmux is enabled for the specified connection */
if (conn->osmux.state != OSMUX_STATE_ACTIVATING) {
@@ -539,7 +531,7 @@
return -1;
}
- conn->osmux.in = osmux_handle_find_or_create(conn, rem_addr);
+ conn->osmux.in = osmux_handle_find_or_create(trunk, &conn->end.addr);
if (!conn->osmux.in) {
LOGPCONN(conn->conn, DOSMUX, LOGL_ERROR,
"Cannot allocate input osmux handle for conn:%s\n",
@@ -627,10 +619,9 @@
}
/*! send RTP dummy packet to OSMUX connection port.
- * \param[in] endp mcgp endpoint that holds the RTP connection
* \param[in] conn associated RTP connection
* \returns bytes sent, -1 on error */
-int osmux_send_dummy(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn)
+int osmux_send_dummy(struct mgcp_conn_rtp *conn)
{
char ipbuf[INET6_ADDRSTRLEN];
struct osmux_hdr *osmuxh;
@@ -646,7 +637,7 @@
* approach is simple though. */
- if (endp_osmux_state_check(endp, conn, true) < 0)
+ if (conn_osmux_state_check(conn, true) < 0)
return 0;
buf_len = sizeof(struct osmux_hdr) + osmo_amr_bytes(AMR_FT_0);
diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index b4a4792..d92725a 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -330,7 +330,7 @@
return;
if (mgcp_conn_rtp_is_osmux(conn))
- osmux_send_dummy(endp, conn);
+ osmux_send_dummy(conn);
else
mgcp_send_dummy(endp, conn);
}