This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
dexter gerrit-no-reply at lists.osmocom.orgdexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-mgw/+/19525 ) Change subject: resolve mgcp_internal.h ...................................................................... resolve mgcp_internal.h The file mgcp_internal.h still contains mostly definitions and types that are relevant for mgcp_network.c and mgcp_protocol.c. Lets give the network and protocol module its own header files, also move stuff that does not relate to protocol and network to the appropiate places. Change-Id: I837eaad771ed7252304db4a81c37953b70766fff --- M include/Makefile.am M include/osmocom/mgcp/Makefile.am M include/osmocom/mgcp/mgcp_codec.h M include/osmocom/mgcp/mgcp_conn.h D include/osmocom/mgcp/mgcp_internal.h A include/osmocom/mgcp/mgcp_network.h A include/osmocom/mgcp/mgcp_protocol.h M include/osmocom/mgcp/mgcp_stat.h M src/libosmo-mgcp/mgcp_codec.c 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_network.c M src/libosmo-mgcp/mgcp_osmux.c M src/libosmo-mgcp/mgcp_protocol.c M src/libosmo-mgcp/mgcp_ratectr.c M src/libosmo-mgcp/mgcp_sdp.c M src/libosmo-mgcp/mgcp_stat.c M src/libosmo-mgcp/mgcp_trunk.c M src/libosmo-mgcp/mgcp_vty.c M src/osmo-mgw/mgw_main.c M tests/mgcp/mgcp_test.c 23 files changed, 306 insertions(+), 331 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/25/19525/1 diff --git a/include/Makefile.am b/include/Makefile.am index fbbd08d..457ac3f 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -8,7 +8,6 @@ osmocom/mgcp_client/mgcp_client_fsm.h \ osmocom/mgcp/mgcp.h \ osmocom/mgcp/mgcp_common.h \ - osmocom/mgcp/mgcp_internal.h \ osmocom/mgcp/osmux.h \ $(NULL) diff --git a/include/osmocom/mgcp/Makefile.am b/include/osmocom/mgcp/Makefile.am index 549ba87..b94cdcd 100644 --- a/include/osmocom/mgcp/Makefile.am +++ b/include/osmocom/mgcp/Makefile.am @@ -11,4 +11,6 @@ debug.h \ mgcp_ratectr.h \ mgcp_e1.h \ + mgcp_network.h \ + mgcp_protocol.h \ $(NULL) diff --git a/include/osmocom/mgcp/mgcp_codec.h b/include/osmocom/mgcp/mgcp_codec.h index caeecb0..97650e4 100644 --- a/include/osmocom/mgcp/mgcp_codec.h +++ b/include/osmocom/mgcp/mgcp_codec.h @@ -1,5 +1,15 @@ #pragma once +#define DEFAULT_RTP_AUDIO_FRAME_DUR_NUM 20 +#define DEFAULT_RTP_AUDIO_FRAME_DUR_DEN 1000 +#define DEFAULT_RTP_AUDIO_PACKET_DURATION_MS 20 +#define DEFAULT_RTP_AUDIO_DEFAULT_RATE 8000 +#define DEFAULT_RTP_AUDIO_DEFAULT_CHANNELS 1 + +#define PTYPE_UNDEFINED (-1) + +struct mgcp_conn_rtp; + void mgcp_codec_summary(struct mgcp_conn_rtp *conn); void mgcp_codec_reset_all(struct mgcp_conn_rtp *conn); int mgcp_codec_add(struct mgcp_conn_rtp *conn, int payload_type, const char *audio_name, const struct mgcp_codec_param *param); diff --git a/include/osmocom/mgcp/mgcp_conn.h b/include/osmocom/mgcp/mgcp_conn.h index 78d5ea8..4f882e9 100644 --- a/include/osmocom/mgcp/mgcp_conn.h +++ b/include/osmocom/mgcp/mgcp_conn.h @@ -23,7 +23,9 @@ #pragma once -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp.h> +#include <osmocom/mgcp/mgcp_network.h> +#include <osmocom/mgcp/osmux.h> #include <osmocom/core/linuxlist.h> #include <osmocom/core/rate_ctr.h> #include <inttypes.h> @@ -33,12 +35,67 @@ (conn)->id, \ ## args) +#define LOG_CONN(conn, level, fmt, args...) \ + LOGP(DRTP, level, "(%s I:%s) " fmt, \ + (conn)->endp ? (conn)->endp->name : "none", (conn)->id, ## args) + +#define LOG_CONN_RTP(conn_rtp, level, fmt, args...) \ + LOG_CONN((conn_rtp)->conn, level, fmt, ## args) + +/* Specific rtp connection type (see struct mgcp_conn_rtp) */ +enum mgcp_conn_rtp_type { + MGCP_RTP_DEFAULT = 0, + MGCP_OSMUX_BSC, + MGCP_OSMUX_BSC_NAT, +}; + /*! Connection type, specifies which member of the union "u" in mgcp_conn * contains a useful connection description (currently only RTP) */ enum mgcp_conn_type { MGCP_CONN_TYPE_RTP, }; +/* MGCP connection (RTP) */ +struct mgcp_conn_rtp { + + /* Backpointer to conn struct */ + struct mgcp_conn *conn; + + /* Specific connection type */ + enum mgcp_conn_rtp_type type; + + /* Port status */ + struct mgcp_rtp_end end; + + /* Sequence bits */ + struct mgcp_rtp_state state; + + /* taps for the rtp connection; one per direction */ + struct mgcp_rtp_tap tap_in; + struct mgcp_rtp_tap tap_out; + + /* Osmux states (optional) */ + struct { + /* Osmux state: disabled, activating, active */ + enum osmux_state state; + /* Is cid holding valid data? is it allocated from pool? */ + bool cid_allocated; + /* Allocated Osmux circuit ID for this conn */ + uint8_t cid; + /* handle to batch messages */ + struct osmux_in_handle *in; + /* handle to unbatch messages */ + struct osmux_out_handle out; + /* statistics */ + struct { + uint32_t chunks; + uint32_t octets; + } stats; + } osmux; + + struct rate_ctr_group *rate_ctr_group; +}; + /*! MGCP connection (untyped) */ struct mgcp_conn { /*! list head */ @@ -114,6 +171,11 @@ [RTP_NUM_CONNECTIONS] = {"all_rtp:num_closed_conns", "Total number of rtp connections closed."} }; +/* Was conn configured to handle Osmux? */ +static inline bool mgcp_conn_rtp_is_osmux(const struct mgcp_conn_rtp *conn) { + return conn->type == MGCP_OSMUX_BSC || conn->type == MGCP_OSMUX_BSC_NAT; +} + struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp, enum mgcp_conn_type type, char *name); struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id); @@ -125,3 +187,4 @@ char *mgcp_conn_dump(struct mgcp_conn *conn); struct mgcp_conn *mgcp_find_dst_conn(struct mgcp_conn *conn); struct mgcp_conn *mgcp_conn_get_oldest(struct mgcp_endpoint *endp); +void mgcp_conn_watchdog_kick(struct mgcp_conn *conn); diff --git a/include/osmocom/mgcp/mgcp_internal.h b/include/osmocom/mgcp/mgcp_internal.h deleted file mode 100644 index 86b2a57..0000000 --- a/include/osmocom/mgcp/mgcp_internal.h +++ /dev/null @@ -1,311 +0,0 @@ -/* MGCP Private Data */ - -/* - * (C) 2009-2012 by Holger Hans Peter Freyther <zecke at selfish.org> - * (C) 2009-2012 by On-Waves - * All Rights Reserved - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -#pragma once - -#include <string.h> -#include <inttypes.h> -#include <osmocom/core/select.h> -#include <osmocom/mgcp/mgcp.h> -#include <osmocom/core/linuxlist.h> -#include <osmocom/core/counter.h> -#include <osmocom/core/rate_ctr.h> - -#define CI_UNUSED 0 - -/* FIXME: This this is only needed to compile the currently - * broken OSMUX support. Remove when fixed */ -#define CONN_ID_BTS "0" -#define CONN_ID_NET "1" - -#define LOG_CONN(conn, level, fmt, args...) \ - LOGP(DRTP, level, "(%s I:%s) " fmt, \ - (conn)->endp ? (conn)->endp->name : "none", (conn)->id, ## args) - -#define LOG_CONN_RTP(conn_rtp, level, fmt, args...) \ - LOG_CONN((conn_rtp)->conn, level, fmt, ## args) - -struct mgcp_rtp_stream_state { - uint32_t ssrc; - uint16_t last_seq; - uint32_t last_timestamp; - struct rate_ctr *err_ts_ctr; - int32_t last_tsdelta; - uint32_t last_arrival_time; -}; - -struct mgcp_rtp_state { - /* has this state structure been initialized? */ - int initialized; - - struct { - /* are we patching the SSRC value? */ - int patch_ssrc; - /* original SSRC (to which we shall patch any different SSRC) */ - uint32_t orig_ssrc; - /* offset to apply on the sequence number */ - int seq_offset; - /* offset to apply on the timestamp number */ - int32_t timestamp_offset; - } patch; - - /* duration of a packet (FIXME: in which unit?) */ - uint32_t packet_duration; - - /* Note: These states are not continuously updated, they serve as an - * information source to patch certain values in the RTP header. Do - * not use this state if constantly updated data about the RTP stream - * is needed. (see also mgcp_patch_and_count() */ - struct mgcp_rtp_stream_state in_stream; - struct mgcp_rtp_stream_state out_stream; - - /* jitter and packet loss calculation */ - struct { - int initialized; - uint16_t base_seq; - uint16_t max_seq; - uint32_t ssrc; - uint32_t jitter; - int32_t transit; - int cycles; - } stats; - - /* Alternative values for RTP tx, in case no sufficient header - * information is available so the header needs to be generated - * locally (when just forwarding packets, the header of incoming - * data is just re-used) */ - uint16_t alt_rtp_tx_sequence; - uint32_t alt_rtp_tx_ssrc; - - bool patched_first_rtp_payload; /* FIXME: drop this, see OS#2459 */ -}; - -struct mgcp_rtp_codec { - uint32_t rate; - int channels; - uint32_t frame_duration_num; - uint32_t frame_duration_den; - - int payload_type; - char *audio_name; - char *subtype_name; - - bool param_present; - struct mgcp_codec_param param; -}; - -/* 'mgcp_rtp_end': basically a wrapper around the RTP+RTCP ports */ -struct mgcp_rtp_end { - /* local IP address of the RTP socket */ - struct in_addr addr; - - /* in network byte order */ - int rtp_port, rtcp_port; - - /* currently selected audio codec */ - struct mgcp_rtp_codec *codec; - - /* array with assigned audio codecs to choose from (SDP) */ - struct mgcp_rtp_codec codecs[MGCP_MAX_CODECS]; - - /* number of assigned audio codecs (SDP) */ - unsigned int codecs_assigned; - - /* per endpoint data */ - int frames_per_packet; - uint32_t packet_duration_ms; - int maximum_packet_time; /* -1: not set */ - char *fmtp_extra; - /* are we transmitting packets (1) or dropping (0) outbound packets */ - int output_enabled; - /* FIXME: This parameter can be set + printed, but is nowhere used! */ - int force_output_ptime; - - /* RTP patching */ - int force_constant_ssrc; /* -1: always, 0: don't, 1: once */ - /* should we perform align_rtp_timestamp_offset() (1) or not (0) */ - int force_aligned_timing; - bool rfc5993_hr_convert; - - /* Each end has a separate socket for RTP and RTCP */ - struct osmo_fd rtp; - struct osmo_fd rtcp; - - /* local UDP port number of the RTP socket; RTCP is +1 */ - int local_port; -}; - -struct mgcp_rtp_tap { - /* is this tap active (1) or not (0) */ - int enabled; - /* IP/port to which we're forwarding the tapped data */ - struct sockaddr_in forward; -}; - -struct mgcp_lco { - char *string; - char *codec; - int pkt_period_min; /* time in ms */ - int pkt_period_max; /* time in ms */ -}; - -/* Specific rtp connection type (see struct mgcp_conn_rtp) */ -enum mgcp_conn_rtp_type { - MGCP_RTP_DEFAULT = 0, - MGCP_OSMUX_BSC, - MGCP_OSMUX_BSC_NAT, -}; - -#include <osmocom/mgcp/osmux.h> - -/* MGCP connection (RTP) */ -struct mgcp_conn_rtp { - - /* Backpointer to conn struct */ - struct mgcp_conn *conn; - - /* Specific connection type */ - enum mgcp_conn_rtp_type type; - - /* Port status */ - struct mgcp_rtp_end end; - - /* Sequence bits */ - struct mgcp_rtp_state state; - - /* taps for the rtp connection; one per direction */ - struct mgcp_rtp_tap tap_in; - struct mgcp_rtp_tap tap_out; - - /* Osmux states (optional) */ - struct { - /* Osmux state: disabled, activating, active */ - enum osmux_state state; - /* Is cid holding valid data? is it allocated from pool? */ - bool cid_allocated; - /* Allocated Osmux circuit ID for this conn */ - uint8_t cid; - /* handle to batch messages */ - struct osmux_in_handle *in; - /* handle to unbatch messages */ - struct osmux_out_handle out; - /* statistics */ - struct { - uint32_t chunks; - uint32_t octets; - } stats; - } osmux; - - struct rate_ctr_group *rate_ctr_group; -}; - -#include <osmocom/mgcp/mgcp_conn.h> - -/** - * Internal structure while parsing a request - */ -struct mgcp_parse_data { - struct mgcp_config *cfg; - struct mgcp_endpoint *endp; - char *trans; - char *save; -}; - -int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr, - struct msgb *msg, struct mgcp_conn_rtp *conn_src, - struct mgcp_conn_rtp *conn_dst); -int mgcp_send_dummy(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn); -int mgcp_dispatch_rtp_bridge_cb(struct msgb *msg); -void mgcp_cleanup_rtp_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn); -int mgcp_dispatch_e1_bridge_cb(struct msgb *msg); -void mgcp_cleanup_e1_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn); -int mgcp_bind_net_rtp_port(struct mgcp_endpoint *endp, int rtp_port, - struct mgcp_conn_rtp *conn); -void mgcp_free_rtp_port(struct mgcp_rtp_end *end); - -/* For transcoding we need to manage an in and an output that are connected */ -static inline int endp_back_channel(int endpoint) -{ - return endpoint + 60; -} - -char *get_lco_identifier(const char *options); -int check_local_cx_options(void *ctx, const char *options); -void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change, - struct mgcp_rtp_end *rtp); -uint32_t mgcp_rtp_packet_duration(struct mgcp_endpoint *endp, - struct mgcp_rtp_end *rtp); - -/* payload processing default functions */ -int mgcp_rtp_processing_default(struct mgcp_endpoint *endp, struct mgcp_rtp_end *dst_end, - char *data, int *len, int buf_size); - -int mgcp_setup_rtp_processing_default(struct mgcp_endpoint *endp, - struct mgcp_conn_rtp *conn_dst, - struct mgcp_conn_rtp *conn_src); - -void mgcp_get_net_downlink_format_default(struct mgcp_endpoint *endp, - const struct mgcp_rtp_codec **codec, - const char **fmtp_extra, - struct mgcp_conn_rtp *conn); - -/* internal RTP Annex A counting */ -void mgcp_rtp_annex_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *state, - const uint16_t seq, const int32_t transit, - const uint32_t ssrc); - -int mgcp_set_ip_tos(int fd, int tos); - -/* Was conn configured to handle Osmux? */ -static inline bool mgcp_conn_rtp_is_osmux(const struct mgcp_conn_rtp *conn) { - return conn->type == MGCP_OSMUX_BSC || conn->type == MGCP_OSMUX_BSC_NAT; -} - -enum { - MGCP_DEST_NET = 0, - MGCP_DEST_BTS, -}; - - -#define MGCP_DUMMY_LOAD 0x23 - - -/** - * SDP related information - */ -/* Assume audio frame length of 20ms */ -#define DEFAULT_RTP_AUDIO_FRAME_DUR_NUM 20 -#define DEFAULT_RTP_AUDIO_FRAME_DUR_DEN 1000 -#define DEFAULT_RTP_AUDIO_PACKET_DURATION_MS 20 -#define DEFAULT_RTP_AUDIO_DEFAULT_RATE 8000 -#define DEFAULT_RTP_AUDIO_DEFAULT_CHANNELS 1 - -#define PTYPE_UNDEFINED (-1) - -void mgcp_get_local_addr(char *addr, struct mgcp_conn_rtp *conn); -void mgcp_conn_watchdog_kick(struct mgcp_conn *conn); -void mgcp_patch_and_count(struct mgcp_endpoint *endp, - struct mgcp_rtp_state *state, - struct mgcp_rtp_end *rtp_end, - struct sockaddr_in *addr, struct msgb *msg); - -#define RTP_BUF_SIZE 4096 diff --git a/include/osmocom/mgcp/mgcp_network.h b/include/osmocom/mgcp/mgcp_network.h new file mode 100644 index 0000000..c08d009 --- /dev/null +++ b/include/osmocom/mgcp/mgcp_network.h @@ -0,0 +1,163 @@ +#pragma once + +#include <inttypes.h> +#include <stdbool.h> +#include <osmocom/mgcp/mgcp.h> + +#define MGCP_DUMMY_LOAD 0x23 +#define RTP_BUF_SIZE 4096 + +struct mgcp_rtp_stream_state { + uint32_t ssrc; + uint16_t last_seq; + uint32_t last_timestamp; + struct rate_ctr *err_ts_ctr; + int32_t last_tsdelta; + uint32_t last_arrival_time; +}; + +struct mgcp_rtp_state { + /* has this state structure been initialized? */ + int initialized; + + struct { + /* are we patching the SSRC value? */ + int patch_ssrc; + /* original SSRC (to which we shall patch any different SSRC) */ + uint32_t orig_ssrc; + /* offset to apply on the sequence number */ + int seq_offset; + /* offset to apply on the timestamp number */ + int32_t timestamp_offset; + } patch; + + /* duration of a packet (FIXME: in which unit?) */ + uint32_t packet_duration; + + /* Note: These states are not continuously updated, they serve as an + * information source to patch certain values in the RTP header. Do + * not use this state if constantly updated data about the RTP stream + * is needed. (see also mgcp_patch_and_count() */ + struct mgcp_rtp_stream_state in_stream; + struct mgcp_rtp_stream_state out_stream; + + /* jitter and packet loss calculation */ + struct { + int initialized; + uint16_t base_seq; + uint16_t max_seq; + uint32_t ssrc; + uint32_t jitter; + int32_t transit; + int cycles; + } stats; + + /* Alternative values for RTP tx, in case no sufficient header + * information is available so the header needs to be generated + * locally (when just forwarding packets, the header of incoming + * data is just re-used) */ + uint16_t alt_rtp_tx_sequence; + uint32_t alt_rtp_tx_ssrc; + + bool patched_first_rtp_payload; /* FIXME: drop this, see OS#2459 */ +}; + +struct mgcp_rtp_codec { + uint32_t rate; + int channels; + uint32_t frame_duration_num; + uint32_t frame_duration_den; + + int payload_type; + char *audio_name; + char *subtype_name; + + bool param_present; + struct mgcp_codec_param param; +}; + +/* 'mgcp_rtp_end': basically a wrapper around the RTP+RTCP ports */ +struct mgcp_rtp_end { + /* local IP address of the RTP socket */ + struct in_addr addr; + + /* in network byte order */ + int rtp_port, rtcp_port; + + /* currently selected audio codec */ + struct mgcp_rtp_codec *codec; + + /* array with assigned audio codecs to choose from (SDP) */ + struct mgcp_rtp_codec codecs[MGCP_MAX_CODECS]; + + /* number of assigned audio codecs (SDP) */ + unsigned int codecs_assigned; + + /* per endpoint data */ + int frames_per_packet; + uint32_t packet_duration_ms; + int maximum_packet_time; /* -1: not set */ + char *fmtp_extra; + /* are we transmitting packets (1) or dropping (0) outbound packets */ + int output_enabled; + /* FIXME: This parameter can be set + printed, but is nowhere used! */ + int force_output_ptime; + + /* RTP patching */ + int force_constant_ssrc; /* -1: always, 0: don't, 1: once */ + /* should we perform align_rtp_timestamp_offset() (1) or not (0) */ + int force_aligned_timing; + bool rfc5993_hr_convert; + + /* Each end has a separate socket for RTP and RTCP */ + struct osmo_fd rtp; + struct osmo_fd rtcp; + + /* local UDP port number of the RTP socket; RTCP is +1 */ + int local_port; +}; + +struct mgcp_rtp_tap { + /* is this tap active (1) or not (0) */ + int enabled; + /* IP/port to which we're forwarding the tapped data */ + struct sockaddr_in forward; +}; + +struct mgcp_conn; + +int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr, + struct msgb *msg, struct mgcp_conn_rtp *conn_src, + struct mgcp_conn_rtp *conn_dst); +int mgcp_send_dummy(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn); +int mgcp_dispatch_rtp_bridge_cb(struct msgb *msg); +void mgcp_cleanup_rtp_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn); +int mgcp_dispatch_e1_bridge_cb(struct msgb *msg); +void mgcp_cleanup_e1_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn); +int mgcp_bind_net_rtp_port(struct mgcp_endpoint *endp, int rtp_port, + struct mgcp_conn_rtp *conn); +void mgcp_free_rtp_port(struct mgcp_rtp_end *end); +void mgcp_patch_and_count(struct mgcp_endpoint *endp, + struct mgcp_rtp_state *state, + struct mgcp_rtp_end *rtp_end, + struct sockaddr_in *addr, struct msgb *msg); +void mgcp_get_local_addr(char *addr, struct mgcp_conn_rtp *conn); +int mgcp_set_ip_tos(int fd, int tos); + +/* payload processing default functions */ +int mgcp_rtp_processing_default(struct mgcp_endpoint *endp, struct mgcp_rtp_end *dst_end, + char *data, int *len, int buf_size); + +int mgcp_setup_rtp_processing_default(struct mgcp_endpoint *endp, + struct mgcp_conn_rtp *conn_dst, + struct mgcp_conn_rtp *conn_src); + +void mgcp_get_net_downlink_format_default(struct mgcp_endpoint *endp, + const struct mgcp_rtp_codec **codec, + const char **fmtp_extra, + struct mgcp_conn_rtp *conn); + +/* internal RTP Annex A counting */ +void mgcp_rtp_annex_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *state, + const uint16_t seq, const int32_t transit, + const uint32_t ssrc); diff --git a/include/osmocom/mgcp/mgcp_protocol.h b/include/osmocom/mgcp/mgcp_protocol.h new file mode 100644 index 0000000..abd264c --- /dev/null +++ b/include/osmocom/mgcp/mgcp_protocol.h @@ -0,0 +1,27 @@ +#pragma once + +/* Internal structure while parsing a request */ +struct mgcp_parse_data { + struct mgcp_config *cfg; + struct mgcp_endpoint *endp; + char *trans; + char *save; +}; + +/* Local connection options */ +struct mgcp_lco { + char *string; + char *codec; + int pkt_period_min; /* time in ms */ + int pkt_period_max; /* time in ms */ +}; + +char *get_lco_identifier(const char *options); +int check_local_cx_options(void *ctx, const char *options); + +struct mgcp_rtp_end; +void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change, + struct mgcp_rtp_end *rtp); + +uint32_t mgcp_rtp_packet_duration(struct mgcp_endpoint *endp, + struct mgcp_rtp_end *rtp); diff --git a/include/osmocom/mgcp/mgcp_stat.h b/include/osmocom/mgcp/mgcp_stat.h index 0bde8cf..a66257b 100644 --- a/include/osmocom/mgcp/mgcp_stat.h +++ b/include/osmocom/mgcp/mgcp_stat.h @@ -24,7 +24,6 @@ #pragma once -#include <osmocom/mgcp/mgcp_internal.h> #include <inttypes.h> void mgcp_format_stats(char *str, size_t str_len, struct mgcp_conn *conn); diff --git a/src/libosmo-mgcp/mgcp_codec.c b/src/libosmo-mgcp/mgcp_codec.c index 58079c6..f237e38 100644 --- a/src/libosmo-mgcp/mgcp_codec.c +++ b/src/libosmo-mgcp/mgcp_codec.c @@ -17,9 +17,13 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp.h> +#include <osmocom/mgcp/osmux.h> +#include <osmocom/mgcp/mgcp_conn.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_endp.h> #include <osmocom/mgcp/mgcp_trunk.h> +#include <osmocom/mgcp/mgcp_codec.h> #include <errno.h> /* Helper function to dump codec information of a specified codec to a printable diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c index 1e3e721..91c7ee1 100644 --- a/src/libosmo-mgcp/mgcp_conn.c +++ b/src/libosmo-mgcp/mgcp_conn.c @@ -22,7 +22,8 @@ */ #include <osmocom/mgcp/mgcp_conn.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp_network.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_common.h> #include <osmocom/mgcp/mgcp_endp.h> #include <osmocom/mgcp/mgcp_trunk.h> diff --git a/src/libosmo-mgcp/mgcp_e1.c b/src/libosmo-mgcp/mgcp_e1.c index 4718792..10469d0 100644 --- a/src/libosmo-mgcp/mgcp_e1.c +++ b/src/libosmo-mgcp/mgcp_e1.c @@ -21,7 +21,10 @@ * */ -#include <osmocom/mgcp/mgcp_internal.h> +#include <inttypes.h> + +#include <osmocom/mgcp/mgcp_protocol.h> +#include <osmocom/mgcp/mgcp.h> #include <osmocom/mgcp/mgcp_endp.h> #include <osmocom/mgcp/mgcp_trunk.h> #include <osmocom/mgcp/mgcp_conn.h> diff --git a/src/libosmo-mgcp/mgcp_endp.c b/src/libosmo-mgcp/mgcp_endp.c index 43d3e9f..242acfa 100644 --- a/src/libosmo-mgcp/mgcp_endp.c +++ b/src/libosmo-mgcp/mgcp_endp.c @@ -21,7 +21,9 @@ * */ -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp.h> +#include <osmocom/mgcp/mgcp_protocol.h> +#include <osmocom/mgcp/mgcp_conn.h> #include <osmocom/mgcp/mgcp_endp.h> #include <osmocom/mgcp/mgcp_trunk.h> diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c index 019466e..2023a68 100644 --- a/src/libosmo-mgcp/mgcp_msg.c +++ b/src/libosmo-mgcp/mgcp_msg.c @@ -24,7 +24,9 @@ #include <limits.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp.h> +#include <osmocom/mgcp/osmux.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_common.h> #include <osmocom/mgcp/mgcp_msg.h> #include <osmocom/mgcp/mgcp_conn.h> diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c index e0aa42e..712c706 100644 --- a/src/libosmo-mgcp/mgcp_network.c +++ b/src/libosmo-mgcp/mgcp_network.c @@ -37,7 +37,8 @@ #include <osmocom/netif/amr.h> #include <osmocom/mgcp/mgcp.h> #include <osmocom/mgcp/mgcp_common.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp_network.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_stat.h> #include <osmocom/mgcp/osmux.h> #include <osmocom/mgcp/mgcp_conn.h> @@ -48,6 +49,7 @@ #include <osmocom/codec/codec.h> #include <osmocom/mgcp/mgcp_e1.h> + #define RTP_SEQ_MOD (1 << 16) #define RTP_MAX_DROPOUT 3000 #define RTP_MAX_MISORDER 100 diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c index 85e33e0..93c922d 100644 --- a/src/libosmo-mgcp/mgcp_osmux.c +++ b/src/libosmo-mgcp/mgcp_osmux.c @@ -23,7 +23,7 @@ #include <osmocom/netif/amr.h> #include <osmocom/mgcp/mgcp.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/osmux.h> #include <osmocom/mgcp/mgcp_conn.h> #include <osmocom/mgcp/mgcp_endp.h> diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c index 195063a..b9a8bd3 100644 --- a/src/libosmo-mgcp/mgcp_protocol.c +++ b/src/libosmo-mgcp/mgcp_protocol.c @@ -35,7 +35,9 @@ #include <osmocom/mgcp/mgcp.h> #include <osmocom/mgcp/mgcp_common.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/osmux.h> +#include <osmocom/mgcp/mgcp_network.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_stat.h> #include <osmocom/mgcp/mgcp_msg.h> #include <osmocom/mgcp/mgcp_endp.h> diff --git a/src/libosmo-mgcp/mgcp_ratectr.c b/src/libosmo-mgcp/mgcp_ratectr.c index 34b27f5..a3b7c12 100644 --- a/src/libosmo-mgcp/mgcp_ratectr.c +++ b/src/libosmo-mgcp/mgcp_ratectr.c @@ -24,7 +24,7 @@ #include <errno.h> #include <osmocom/core/stats.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp_conn.h> #include <osmocom/mgcp/mgcp_ratectr.h> static const struct rate_ctr_desc mgcp_general_ctr_desc[] = { diff --git a/src/libosmo-mgcp/mgcp_sdp.c b/src/libosmo-mgcp/mgcp_sdp.c index 5fa6bdb..1c3c89a 100644 --- a/src/libosmo-mgcp/mgcp_sdp.c +++ b/src/libosmo-mgcp/mgcp_sdp.c @@ -22,12 +22,15 @@ #include <osmocom/core/msgb.h> #include <osmocom/mgcp/mgcp.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/osmux.h> +#include <osmocom/mgcp/mgcp_conn.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_msg.h> #include <osmocom/mgcp/mgcp_endp.h> #include <osmocom/mgcp/mgcp_trunk.h> #include <osmocom/mgcp/mgcp_codec.h> #include <osmocom/mgcp/mgcp_sdp.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <errno.h> #include <stdlib.h> diff --git a/src/libosmo-mgcp/mgcp_stat.c b/src/libosmo-mgcp/mgcp_stat.c index 3685cfe..2e74238 100644 --- a/src/libosmo-mgcp/mgcp_stat.c +++ b/src/libosmo-mgcp/mgcp_stat.c @@ -22,10 +22,12 @@ * */ -#include <osmocom/mgcp/mgcp_stat.h> -#include <osmocom/mgcp/mgcp_endp.h> #include <limits.h> #include <inttypes.h> +#include <osmocom/mgcp/mgcp_protocol.h> +#include <osmocom/mgcp/mgcp_conn.h> +#include <osmocom/mgcp/mgcp_stat.h> +#include <osmocom/mgcp/mgcp_endp.h> /* Helper function for mgcp_format_stats_rtp() to calculate packet loss */ void calc_loss(struct mgcp_conn_rtp *conn, uint32_t *expected, int *loss) diff --git a/src/libosmo-mgcp/mgcp_trunk.c b/src/libosmo-mgcp/mgcp_trunk.c index 36a5586..881d31d 100644 --- a/src/libosmo-mgcp/mgcp_trunk.c +++ b/src/libosmo-mgcp/mgcp_trunk.c @@ -21,7 +21,8 @@ * */ -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_endp.h> #include <osmocom/mgcp/mgcp_trunk.h> #include <osmocom/mgcp/mgcp_e1.h> diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c index f695c73..21ad781 100644 --- a/src/libosmo-mgcp/mgcp_vty.c +++ b/src/libosmo-mgcp/mgcp_vty.c @@ -25,7 +25,8 @@ #include <osmocom/vty/misc.h> #include <osmocom/mgcp/mgcp.h> #include <osmocom/mgcp/mgcp_common.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/osmux.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/vty.h> #include <osmocom/mgcp/mgcp_conn.h> #include <osmocom/mgcp/mgcp_endp.h> diff --git a/src/osmo-mgw/mgw_main.c b/src/osmo-mgw/mgw_main.c index 036e0c0..d4bcb3a 100644 --- a/src/osmo-mgw/mgw_main.c +++ b/src/osmo-mgw/mgw_main.c @@ -36,7 +36,7 @@ #include <sys/socket.h> #include <osmocom/mgcp/mgcp.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/vty.h> #include <osmocom/mgcp/debug.h> #include <osmocom/mgcp/mgcp_endp.h> diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c index a050a0b..5ae321f 100644 --- a/tests/mgcp/mgcp_test.c +++ b/tests/mgcp/mgcp_test.c @@ -22,14 +22,14 @@ #include <osmocom/mgcp/mgcp.h> #include <osmocom/mgcp/vty.h> #include <osmocom/mgcp/mgcp_common.h> -#include <osmocom/mgcp/mgcp_internal.h> +#include <osmocom/mgcp/mgcp_conn.h> +#include <osmocom/mgcp/mgcp_protocol.h> #include <osmocom/mgcp/mgcp_stat.h> #include <osmocom/mgcp/mgcp_msg.h> #include <osmocom/mgcp/mgcp_endp.h> #include <osmocom/mgcp/mgcp_trunk.h> #include <osmocom/mgcp/mgcp_sdp.h> #include <osmocom/mgcp/mgcp_codec.h> -#include <osmocom/mgcp/mgcp_internal.h> #include <osmocom/core/application.h> #include <osmocom/core/talloc.h> -- To view, visit https://gerrit.osmocom.org/c/osmo-mgw/+/19525 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-mgw Gerrit-Branch: master Gerrit-Change-Id: I837eaad771ed7252304db4a81c37953b70766fff Gerrit-Change-Number: 19525 Gerrit-PatchSet: 1 Gerrit-Owner: dexter <pmaier at sysmocom.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200804/3d561178/attachment.htm>