blob: 4ea6da72fbe08cad8c3f3039b443f89a9da44100 [file] [log] [blame]
Philipp Maier87bd9be2017-08-22 16:35:41 +02001#pragma once
2
Pau Espin Pedrol833281d2022-10-06 17:41:22 +02003#include <stdint.h>
4
Pau Espin Pedrola790f0c2020-08-31 13:29:11 +02005#include <osmocom/core/socket.h>
Neels Hofmeyrf83ec562017-09-07 19:18:40 +02006
7#include <osmocom/netif/osmux.h>
Philipp Maier87bd9be2017-08-22 16:35:41 +02008struct mgcp_conn_rtp;
Pau Espin Pedrol928a20b2022-09-23 15:38:24 +02009struct mgcp_trunk;
10struct mgcp_endpoint;
11struct mgcp_conn_rtp;
12
Pau Espin Pedrolc1ad7fd2022-10-06 10:32:07 +020013int osmux_init(struct mgcp_trunk *trunk);
Pau Espin Pedrold48a8112022-09-27 12:37:53 +020014int osmux_init_conn(struct mgcp_conn_rtp *conn);
Pau Espin Pedrol887c93e2022-10-06 12:36:03 +020015int conn_osmux_enable(struct mgcp_conn_rtp *conn);
Pau Espin Pedrol85978da2019-05-17 14:38:19 +020016void conn_osmux_disable(struct mgcp_conn_rtp *conn);
Pau Espin Pedrol833281d2022-10-06 17:41:22 +020017int conn_osmux_event_rx_crcx_mdcx(struct mgcp_conn_rtp *conn);
Pau Espin Pedrold1e94c72022-10-25 13:49:40 +020018int conn_osmux_send_rtp(struct mgcp_conn_rtp *conn, struct msgb *msg);
Pau Espin Pedrol887c93e2022-10-06 12:36:03 +020019int osmux_send_dummy(struct mgcp_conn_rtp *conn);
Pau Espin Pedrol8de58e72019-04-24 13:33:46 +020020
21void osmux_cid_pool_get(uint8_t osmux_cid);
22int osmux_cid_pool_get_next(void);
23void osmux_cid_pool_put(uint8_t osmux_cid);
24bool osmux_cid_pool_allocated(uint8_t osmux_cid);
25int osmux_cid_pool_count_used(void);
Neels Hofmeyrf83ec562017-09-07 19:18:40 +020026
27enum osmux_state {
Pau Espin Pedrol407b1f12018-10-16 16:40:11 +020028 OSMUX_STATE_DISABLED = 0, /* Osmux not being currently used by endp */
Pau Espin Pedrol887c93e2022-10-06 12:36:03 +020029 OSMUX_STATE_ACTIVATING, /* Osmux was accepted in MGCP CRCX ACK. It can now be enabled by \ref conn_osmux_enable. */
30 OSMUX_STATE_ENABLED, /* Osmux was initialized by \ref conn_osmux_enable and can process frames */
Neels Hofmeyrf83ec562017-09-07 19:18:40 +020031};
32
Pau Espin Pedrolea7aaf22022-09-22 21:07:54 +020033extern const struct value_string osmux_state_strs[];
34static inline const char *osmux_state_str(enum osmux_state val)
35{ return get_value_string(osmux_state_strs, val); }
36
Neels Hofmeyrf83ec562017-09-07 19:18:40 +020037enum osmux_usage {
38 OSMUX_USAGE_OFF = 0,
39 OSMUX_USAGE_ON = 1,
40 OSMUX_USAGE_ONLY = 2,
41};