pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-mgw/+/39186?usp=email )
Change subject: mgw: Clean up access to conn_rtp from conn
......................................................................
mgw: Clean up access to conn_rtp from conn
Add a new mgcp_conn_get_conn_rtp() and use it everywhere instead of
accessing deep structure fields.
Change-Id: Iee2c19598e9570ea3b1ceba3cdfd2a5f5be2c954
---
M include/osmocom/mgcp/mgcp_conn.h
M src/libosmo-mgcp/mgcp_conn.c
M src/libosmo-mgcp/mgcp_e1.c
M src/libosmo-mgcp/mgcp_endp.c
M src/libosmo-mgcp/mgcp_msg.c
M src/libosmo-mgcp/mgcp_osmux.c
M src/libosmo-mgcp/mgcp_protocol.c
M src/libosmo-mgcp/mgcp_stat.c
M src/libosmo-mgcp/mgcp_vty.c
9 files changed, 39 insertions(+), 27 deletions(-)
Approvals:
pespin: Looks good to me, approved
Jenkins Builder: Verified
daniel: Looks good to me, but someone else must approve
laforge: Looks good to me, but someone else must approve
diff --git a/include/osmocom/mgcp/mgcp_conn.h b/include/osmocom/mgcp/mgcp_conn.h
index de9bae6..106544a 100644
--- a/include/osmocom/mgcp/mgcp_conn.h
+++ b/include/osmocom/mgcp/mgcp_conn.h
@@ -28,6 +28,7 @@
#include <osmocom/mgcp/osmux.h>
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/rate_ctr.h>
+#include <osmocom/core/utils.h>
#include <osmocom/gsm/iuup.h>
#include <inttypes.h>
@@ -237,6 +238,12 @@
return conn->type == MGCP_RTP_IUUP;
}
+static inline struct mgcp_conn_rtp *mgcp_conn_get_conn_rtp(struct mgcp_conn *conn)
+{
+ OSMO_ASSERT(conn->type == MGCP_CONN_TYPE_RTP);
+ return &conn->u.rtp;
+}
+
struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp,
enum mgcp_conn_type type, char *name);
void mgcp_conn_free(struct mgcp_conn *conn);
diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c
index 9d03550..403cbda 100644
--- a/src/libosmo-mgcp/mgcp_conn.c
+++ b/src/libosmo-mgcp/mgcp_conn.c
@@ -239,13 +239,16 @@
*/
void mgcp_conn_free(struct mgcp_conn *conn)
{
+ struct mgcp_conn_rtp *conn_rtp;
+
if (!conn)
return;
switch (conn->type) {
case MGCP_CONN_TYPE_RTP:
- aggregate_rtp_conn_stats(conn->endp, &conn->u.rtp);
- mgcp_rtp_conn_cleanup(&conn->u.rtp);
+ conn_rtp = mgcp_conn_get_conn_rtp(conn);
+ aggregate_rtp_conn_stats(conn->endp, conn_rtp);
+ mgcp_rtp_conn_cleanup(conn_rtp);
break;
default:
/* NOTE: This should never be called with an
@@ -268,24 +271,26 @@
static char str[sizeof(conn->name)+sizeof(conn->id)+256];
char ipbuf[INET6_ADDRSTRLEN];
struct osmo_strbuf sb = { .buf = str, .len = sizeof(str) };
+ struct mgcp_conn_rtp *conn_rtp;
if (!conn)
return "NULL";
switch (conn->type) {
case MGCP_CONN_TYPE_RTP:
+ conn_rtp = mgcp_conn_get_conn_rtp(conn);
OSMO_STRBUF_PRINTF(sb, "(%s/%s C:%s r=%s:%u<->l=%s:%u",
conn->name,
mgcp_conn_rtp_type_name(conn->type),
conn->id,
- osmo_sockaddr_ntop(&conn->u.rtp.end.addr.u.sa, ipbuf) ? :
"NULL",
- osmo_sockaddr_port(&conn->u.rtp.end.addr.u.sa),
- conn->u.rtp.end.local_addr ? : "NULL",
- conn->u.rtp.end.local_port);
+ osmo_sockaddr_ntop(&conn_rtp->end.addr.u.sa, ipbuf) ? : "NULL",
+ osmo_sockaddr_port(&conn_rtp->end.addr.u.sa),
+ conn_rtp->end.local_addr ? : "NULL",
+ conn_rtp->end.local_port);
- switch (conn->u.rtp.type) {
+ switch (conn_rtp->type) {
case MGCP_RTP_OSMUX:
- OSMO_STRBUF_PRINTF(sb, " CID=%u", conn->u.rtp.osmux.local_cid);
+ OSMO_STRBUF_PRINTF(sb, " CID=%u", conn_rtp->osmux.local_cid);
break;
default:
break;
diff --git a/src/libosmo-mgcp/mgcp_e1.c b/src/libosmo-mgcp/mgcp_e1.c
index fac1ff6..428d652 100644
--- a/src/libosmo-mgcp/mgcp_e1.c
+++ b/src/libosmo-mgcp/mgcp_e1.c
@@ -650,6 +650,7 @@
void mgcp_e1_endp_update(struct mgcp_endpoint *endp)
{
struct mgcp_conn *conn;
+ struct mgcp_conn_rtp *conn_rtp;
struct mgcp_rtp_codec *codec;
enum osmo_tray_sync_pat_id sync_pat_id;
@@ -658,7 +659,8 @@
* endpoint no more than one connection should exist. */
conn = mgcp_endp_get_conn_oldest(endp);
OSMO_ASSERT(conn);
- codec = conn->u.rtp.end.codec;
+ conn_rtp = mgcp_conn_get_conn_rtp(conn);
+ codec = conn_rtp->end.codec;
OSMO_ASSERT(codec);
/* Update codec information */
diff --git a/src/libosmo-mgcp/mgcp_endp.c b/src/libosmo-mgcp/mgcp_endp.c
index b2ece20..c91a00d 100644
--- a/src/libosmo-mgcp/mgcp_endp.c
+++ b/src/libosmo-mgcp/mgcp_endp.c
@@ -741,7 +741,7 @@
return NULL;
if (conn->type == MGCP_CONN_TYPE_RTP)
- return &conn->u.rtp;
+ return mgcp_conn_get_conn_rtp(conn);
return NULL;
}
diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c
index 5900a65..2360a0b 100644
--- a/src/libosmo-mgcp/mgcp_msg.c
+++ b/src/libosmo-mgcp/mgcp_msg.c
@@ -110,20 +110,16 @@
ret = -1;
}
- /* Special handling for RTP connections */
- if (conn->type == MGCP_CONN_TYPE_RTP) {
- conn->u.rtp.end.output_enabled = !!(conn->mode & MGCP_CONN_SEND_ONLY);
- }
-
LOGPENDP(endp, DLMGCP, LOGL_DEBUG, "conn:%s\n", mgcp_conn_dump(conn));
-
LOGPCONN(conn, DLMGCP, LOGL_DEBUG, "connection mode '%s' %d\n",
mode, conn->mode);
- /* Special handling für RTP connections */
+ /* Special handling for RTP connections */
if (conn->type == MGCP_CONN_TYPE_RTP) {
+ struct mgcp_conn_rtp *conn_rtp = mgcp_conn_get_conn_rtp(conn);
+ conn_rtp->end.output_enabled = !!(conn->mode & MGCP_CONN_SEND_ONLY);
LOGPCONN(conn, DLMGCP, LOGL_DEBUG, "output_enabled %u\n",
- conn->u.rtp.end.output_enabled);
+ conn_rtp->end.output_enabled);
}
/* The VTY might change the connection mode at any time, so we have
diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c
index f8383d6..0c285dd 100644
--- a/src/libosmo-mgcp/mgcp_osmux.c
+++ b/src/libosmo-mgcp/mgcp_osmux.c
@@ -265,7 +265,7 @@
if (conn->type != MGCP_CONN_TYPE_RTP)
continue;
- conn_rtp = &conn->u.rtp;
+ conn_rtp = mgcp_conn_get_conn_rtp(conn);
if (!mgcp_conn_rtp_is_osmux(conn_rtp))
continue;
diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index d166a4e..4e63e4d 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -172,7 +172,7 @@
/* Find the "sister" connection */
llist_for_each_entry(_conn, &endp->conns, entry) {
if (_conn->id != conn->conn->id) {
- conn_src = &_conn->u.rtp;
+ conn_src = mgcp_conn_get_conn_rtp(_conn);
break;
}
}
@@ -819,7 +819,7 @@
/* Try to find an destination RTP connection that we can include in the codec decision.
*/
conn_dst = mgcp_find_dst_conn(conn->conn);
if (conn_dst && conn_dst->type == MGCP_CONN_TYPE_RTP)
- conn_dst_rtp = &conn_dst->u.rtp;
+ conn_dst_rtp = mgcp_conn_get_conn_rtp(conn_dst);
else
conn_dst_rtp = NULL;
@@ -1609,7 +1609,7 @@
llist_for_each_entry(conn, &endp->conns, entry) {
if (conn->type == MGCP_CONN_TYPE_RTP &&
conn->mode == MGCP_CONN_RECV_ONLY)
- send_dummy(endp, &conn->u.rtp);
+ send_dummy(endp, mgcp_conn_get_conn_rtp(conn));
}
}
diff --git a/src/libosmo-mgcp/mgcp_stat.c b/src/libosmo-mgcp/mgcp_stat.c
index c66ce6b..081a381 100644
--- a/src/libosmo-mgcp/mgcp_stat.c
+++ b/src/libosmo-mgcp/mgcp_stat.c
@@ -141,7 +141,7 @@
* keep this option open: */
switch (conn->type) {
case MGCP_CONN_TYPE_RTP:
- mgcp_format_stats_rtp(str, str_len, &conn->u.rtp);
+ mgcp_format_stats_rtp(str, str_len, mgcp_conn_get_conn_rtp(conn));
break;
default:
break;
diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c
index 042841c..8e0360f 100644
--- a/src/libosmo-mgcp/mgcp_vty.c
+++ b/src/libosmo-mgcp/mgcp_vty.c
@@ -254,7 +254,8 @@
* connection types (E1) as soon as
* the implementation is available */
if (conn->type == MGCP_CONN_TYPE_RTP) {
- dump_rtp_end(vty, &conn->u.rtp);
+ struct mgcp_conn_rtp *conn_rtp = mgcp_conn_get_conn_rtp(conn);
+ dump_rtp_end(vty, conn_rtp);
}
}
}
@@ -1357,10 +1358,11 @@
endp = trunk->endpoints[endp_no];
int loop = atoi(argv[2]);
llist_for_each_entry(conn, &endp->conns, entry) {
- if (conn->type == MGCP_CONN_TYPE_RTP)
+ if (conn->type == MGCP_CONN_TYPE_RTP) {
/* Handle it like a MDCX, switch on SSRC patching if enabled */
- mgcp_rtp_end_config(endp, 1, &conn->u.rtp.end);
- else {
+ struct mgcp_conn_rtp *conn_rtp = mgcp_conn_get_conn_rtp(conn);
+ mgcp_rtp_end_config(endp, 1, &conn_rtp->end);
+ } else {
/* FIXME: Introduce support for other connection (E1)
* types when implementation is available */
vty_out(vty, "%%Can't enable SSRC patching,"
--
To view, visit
https://gerrit.osmocom.org/c/osmo-mgw/+/39186?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Change-Id: Iee2c19598e9570ea3b1ceba3cdfd2a5f5be2c954
Gerrit-Change-Number: 39186
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>