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,"