4 #include <osmocom/core/endian.h>
5 #include <osmocom/core/timer.h>
6 #include <osmocom/core/msgb.h>
16 #define OSMUX_DEFAULT_PORT 1984
31 #define OSMUX_FT_SIGNAL 0
32 #define OSMUX_FT_VOICE_AMR 1
33 #define OSMUX_FT_DUMMY 2
36 #if OSMO_IS_LITTLE_ENDIAN
42 #elif OSMO_IS_BIG_ENDIAN
44 uint8_t rtp_m:1, ft:2, ctr:3, amr_f:1, amr_q:1;
47 #define OSMUX_CID_MAX 255
49 #if OSMO_IS_LITTLE_ENDIAN
52 #elif OSMO_IS_BIG_ENDIAN
54 uint8_t amr_ft:4, amr_cmr:4;
57 } __attribute__((packed));
67 uint32_t input_rtp_msgs;
68 uint32_t output_osmux_msgs;
69 uint64_t input_rtp_bytes;
70 uint64_t output_osmux_bytes;
73 void (*deliver)(
struct msgb *msg,
void *data);
78 #define OSMUX_MAX_CONCURRENT_CALLS 8
80 typedef struct msgb *(*rtp_msgb_alloc_cb_t)(
void *rtp_msgb_alloc_priv_data,
81 unsigned int msg_len);
85 uint32_t rtp_timestamp;
87 uint8_t rtp_payload_type;
88 uint8_t osmux_seq_ack;
89 struct osmo_timer_list timer;
90 struct llist_head list;
91 void (*tx_cb)(
struct msgb *msg,
void *data);
93 rtp_msgb_alloc_cb_t rtp_msgb_alloc_cb;
94 void *rtp_msgb_alloc_cb_data;
97 static inline uint8_t *osmux_get_payload(
struct osmux_hdr *osmuxh)
99 return (uint8_t *)osmuxh +
sizeof(
struct osmux_hdr);
105 #define OSMUX_BATCH_DEFAULT_MAX 1472
108 void osmux_xfrm_input_init(
struct osmux_in_handle *h) OSMO_DEPRECATED(
"Use osmux_xfrm_input_alloc() instead");
109 void osmux_xfrm_input_fini(
struct osmux_in_handle *h) OSMO_DEPRECATED(
"Use talloc_free() instead");
110 void osmux_xfrm_input_set_name(
struct osmux_in_handle *h,
const char *name);
111 int osmux_xfrm_input_set_batch_factor(
struct osmux_in_handle *h, uint8_t batch_factor);
112 void osmux_xfrm_input_set_batch_size(
struct osmux_in_handle *h, uint16_t batch_size);
113 void osmux_xfrm_input_set_initial_seqnum(
struct osmux_in_handle *h, uint8_t osmux_seqnum);
114 void osmux_xfrm_input_set_deliver_cb(
struct osmux_in_handle *h,
void (*deliver_cb)(
struct msgb *msg,
void *data),
void *data);
117 int osmux_xfrm_input_open_circuit(
struct osmux_in_handle *h,
int ccid,
int dummy);
118 void osmux_xfrm_input_close_circuit(
struct osmux_in_handle *h,
int ccid);
124 void osmux_xfrm_output_init(
struct osmux_out_handle *h, uint32_t rtp_ssrc) OSMO_DEPRECATED(
"Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead");
125 void osmux_xfrm_output_init2(
struct osmux_out_handle *h, uint32_t rtp_ssrc, uint8_t rtp_payload_type) OSMO_DEPRECATED(
"Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead");
132 struct osmux_hdr *osmux_xfrm_output_pull(
struct msgb *msg);