libosmo-netif  0.1.1.37.df0ad
Osmocom network interface library
osmux.c File Reference

Osmocom multiplex protocol helpers. More...

#include <stdio.h>
#include <string.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/timer_compat.h>
#include <osmocom/core/select.h>
#include <osmocom/core/talloc.h>
#include <osmocom/core/logging.h>
#include <osmocom/netif/amr.h>
#include <osmocom/netif/rtp.h>
#include <osmocom/netif/osmux.h>
#include <arpa/inet.h>

Data Structures

struct  osmux_batch
 
struct  osmux_circuit
 
struct  osmux_input_state
 
struct  osmux_tx_handle
 

Macros

#define DELTA_RTP_MSG   20000
 
#define DELTA_RTP_TIMESTAMP   160
 
#define SNPRINTF_BUFFER_SIZE(ret, remain, offset)
 

Functions

static uint32_t osmux_get_payload_len (struct osmux_hdr *osmuxh)
 
static uint32_t osmux_ft_dummy_size (uint8_t amr_ft, uint8_t batch_factor)
 
struct osmux_hdrosmux_xfrm_output_pull (struct msgb *msg)
 
static struct msgb * osmux_rebuild_rtp (struct osmux_out_handle *h, struct osmux_hdr *osmuxh, void *payload, int payload_len, bool first_pkt)
 
int osmux_xfrm_output (struct osmux_hdr *osmuxh, struct osmux_out_handle *h, struct llist_head *list) OSMO_DEPRECATED("Use osmux_xfrm_output_sched() instead")
 
static void osmux_xfrm_output_trigger (void *data)
 
int osmux_xfrm_output_sched (struct osmux_out_handle *h, struct osmux_hdr *osmuxh)
 Generate RTP packets from osmux frame AMR payload set and schedule them for transmission at appropiate time. More...
 
void osmux_xfrm_output_flush (struct osmux_out_handle *h)
 Flush all scheduled RTP packets still pending to be transmitted. More...
 
static int osmux_batch_enqueue (struct msgb *msg, struct osmux_circuit *circuit, uint8_t batch_factor)
 
static void osmux_batch_dequeue (struct msgb *msg, struct osmux_circuit *circuit)
 
static void osmux_circuit_del_msgs (struct osmux_batch *batch, struct osmux_circuit *circuit)
 
static int osmux_batch_put (struct osmux_batch *batch, struct osmux_input_state *state)
 
static int osmux_xfrm_encode_amr (struct osmux_batch *batch, struct osmux_input_state *state)
 
static void osmux_encode_dummy (struct osmux_batch *batch, uint8_t batch_factor, struct osmux_input_state *state)
 
static struct msgb * osmux_build_batch (struct osmux_batch *batch, uint32_t batch_size, uint8_t batch_factor)
 
void osmux_xfrm_input_deliver (struct osmux_in_handle *h)
 
static void osmux_batch_timer_expired (void *data)
 
static int osmux_rtp_amr_payload_len (struct msgb *msg, struct rtp_hdr *rtph)
 
static void osmux_replay_lost_packets (struct osmux_circuit *circuit, struct rtp_hdr *cur_rtph, int batch_factor)
 
static struct osmux_circuitosmux_batch_find_circuit (struct osmux_batch *batch, int ccid)
 
static struct osmux_circuitosmux_batch_add_circuit (struct osmux_batch *batch, int ccid, int dummy, uint8_t batch_factor)
 
static void osmux_batch_del_circuit (struct osmux_batch *batch, struct osmux_circuit *circuit)
 
static int osmux_batch_add (struct osmux_batch *batch, uint32_t batch_factor, struct msgb *msg, struct rtp_hdr *rtph, int ccid)
 
int osmux_xfrm_input (struct osmux_in_handle *h, struct msgb *msg, int ccid)
 
void osmux_xfrm_input_init (struct osmux_in_handle *h)
 
void osmux_xfrm_output_set_tx_cb (struct osmux_out_handle *h, void(*tx_cb)(struct msgb *msg, void *data), void *data)
 Set transmission callback to call when a generated RTP packet is to be transmitted. More...
 
int osmux_xfrm_input_open_circuit (struct osmux_in_handle *h, int ccid, int dummy)
 
void osmux_xfrm_input_close_circuit (struct osmux_in_handle *h, int ccid)
 
void osmux_xfrm_input_fini (struct osmux_in_handle *h)
 
static void osmux_tx_cb (void *data)
 
static void osmux_tx (struct msgb *msg, struct timeval *when, void(*tx_cb)(struct msgb *msg, void *data), void *data)
 
void osmux_tx_sched (struct llist_head *list, void(*tx_cb)(struct msgb *msg, void *data), void *data) OSMO_DEPRECATED("Use osmux_xfrm_output_set_tx_cb() instead")
 
void osmux_xfrm_output_init (struct osmux_out_handle *h, uint32_t rtp_ssrc)
 
static int osmux_snprintf_header (char *buf, size_t size, struct osmux_hdr *osmuxh)
 
static int osmux_snprintf_payload (char *buf, size_t size, const uint8_t *payload, int payload_len)
 
int osmux_snprintf (char *buf, size_t size, struct msgb *msg)
 

Variables

static void * osmux_ctx
 

Detailed Description

Osmocom multiplex protocol helpers.