Message buffers

## Files

file | msgb.h
file | msgb.c

## Data Structures

struct | msgb
| Osmocom message buffer. More...

## Macros

#define | MSGB_DEBUG
#define | MSGB_ABORT(msg, fmt, args ...)
#define | msgb_l1(m) ((void *)(m->l1h))
| obtain L1 header of msgb More...
#define | msgb_l2(m) ((void *)(m->l2h))
| obtain L2 header of msgb More...
#define | msgb_l3(m) ((void *)(m->l3h))
| obtain L3 header of msgb More...
#define | msgb_sms(m) ((void *)(m->l4h))
| obtain SMS header of msgb More...

## Functions

struct msgb * | msgb_alloc (uint16_t size, const char *name)
| Allocate a new message buffer. More...
void | msgb_free (struct msgb *m)
| Release given message buffer. More...
void | msgb_enqueue (struct llist_head *queue, struct msgb *msg)
| Enqueue message buffer to tail of a queue. More...
struct msgb * | msgb_dequeue (struct llist_head *queue)
| Dequeue message buffer from head of queue. More...
void | msgb_reset (struct msgb *msg)
| Re-set all message buffer pointers. More...
uint16_t | msgb_length (const struct msgb *msg)
| get length of message buffer More...
const char * | msgb_hexdump (const struct msgb *msg)
| Return a (static) buffer containing a hexdump of the msg. More...
int | msgb_resize_area (struct msgb *msg, uint8_t *area, int old_size, int new_size)
| Resize an area within an msgb. More...
struct msgb * | msgb_copy (const struct msgb *msg, const char *name)
| Copy an msgb. More...
static int | msgb_test_invariant (const struct msgb *msg)
| Check a message buffer for consistency. More...
static void | msgb_queue_free (struct llist_head *queue)
| Free all msgbs from a queue built with msgb_enqueue(). More...
static unsigned int | msgb_l1len (const struct msgb *msgb)
| determine length of L1 message More...
static unsigned int | msgb_l2len (const struct msgb *msgb)
| determine length of L2 message More...
static unsigned int | msgb_l3len (const struct msgb *msgb)
| determine length of L3 message More...
static unsigned int | msgb_headlen (const struct msgb *msgb)
| determine the length of the header More...
static int | msgb_tailroom (const struct msgb *msgb)
| determine how much tail room is left in msgb More...
static int | msgb_headroom (const struct msgb *msgb)
| determine the amount of headroom in msgb More...
static unsigned char * | msgb_put (struct msgb *msgb, unsigned int len)
| append data to end of message buffer More...
static void | msgb_put_u8 (struct msgb *msgb, uint8_t word)
| append a uint8 value to the end of the message More...
static void | msgb_put_u16 (struct msgb *msgb, uint16_t word)
| append a uint16 value to the end of the message More...
static void | msgb_put_u32 (struct msgb *msgb, uint32_t word)
| append a uint32 value to the end of the message More...
static unsigned char * | msgb_get (struct msgb *msgb, unsigned int len)
| remove data from end of message More...
static uint8_t | msgb_get_u8 (struct msgb *msgb)
| remove uint8 from end of message More...
static uint16_t | msgb_get_u16 (struct msgb *msgb)
| remove uint16 from end of message More...
static uint32_t | msgb_get_u32 (struct msgb *msgb)
| remove uint32 from end of message More...
static unsigned char * | msgb_push (struct msgb *msgb, unsigned int len)
| prepend (push) some data to start of message More...
static void | msgb_push_u8 (struct msgb *msg, uint8_t word)
| prepend a uint8 value to the head of the message More...
static void | msgb_push_u16 (struct msgb *msg, uint16_t word)
| prepend a uint16 value to the head of the message More...
static void | msgb_push_u32 (struct msgb *msg, uint32_t word)
| prepend a uint32 value to the head of the message More...
static unsigned char * | msgb_pull (struct msgb *msgb, unsigned int len)
| remove (pull) a header from the front of the message buffer More...
static unsigned char * | msgb_pull_to_l3 (struct msgb *msg)
| remove (pull) all headers in front of l3h from the message buffer. More...
static unsigned char * | msgb_pull_to_l2 (struct msgb *msg)
| remove (pull) all headers in front of l2h from the message buffer. More...
static uint8_t | msgb_pull_u8 (struct msgb *msgb)
| remove uint8 from front of message More...
static uint16_t | msgb_pull_u16 (struct msgb *msgb)
| remove uint16 from front of message More...
static uint32_t | msgb_pull_u32 (struct msgb *msgb)
| remove uint32 from front of message More...
static void | msgb_reserve (struct msgb *msg, int len)
| Increase headroom of empty msgb, reducing the tailroom. More...
static int | msgb_trim (struct msgb *msg, int len)
| Trim the msgb to a given absolute length. More...
static int | msgb_l3trim (struct msgb *msg, int l3len)
| Trim the msgb to a given layer3 length. More...
static struct msgb * | msgb_alloc_headroom (int size, int headroom, const char *name)
| Allocate message buffer with specified headroom. More...
uint8_t * | msgb_data (const struct msgb *msg)
| get pointer to data section of message buffer More...
void * | msgb_talloc_ctx_init (void *root_ctx, unsigned int pool_size)
| Initialize a msgb talloc context for msgb_alloc. More...
void | msgb_set_talloc_ctx (void *ctx)
| Set the talloc context for msgb_alloc Deprecated, use msgb_talloc_ctx_init() instead. More...
int | msgb_printf (struct msgb *msgb, const char *format,...)
| Print a string to the end of message buffer. More...
static const char * | msgb_hexdump_l2 (const struct msgb *msg)
static const char * | msgb_hexdump_l3 (const struct msgb *msg)

## Variables

void * | tall_msgb_ctx = NULL

## Detailed Description

libosmocore message buffers, inspired by Linux kernel skbuff

Inspired by the 'struct skbuff' of the Linux kernel, we implement a 'struct msgb' which we use for handling network packets aka messages aka PDUs.

A msgb consists of

- a header with some metadata, such as
  - a linked list header for message queues or the like
  - pointers to the headers of various protocol layers inside the packet
- a data section consisting of
  - headroom, i.e. space in front of the message, to allow for additional headers being pushed in front of the current data
  - the currently occupied data for the message
  - tailroom, i.e. space at the end of the message, to allow more data to be added after the end of the current data

We have plenty of utility functions around the msgb:

- allocation / release
- enqueue / dequeue from/to message queues
- prepending (pushing) and appending (putting) data
- copying / resizing
- hex-dumping to a string for debug purposes

## Macro Definition Documentation

## MSGB_ABORT

#define MSGB_ABORT | ( |  | msg,
|  |  | fmt,
|  |  | args ...
| ) |  |

Value:
do { \
osmo_panic("msgb(%p): " fmt, msg, ## args); \
} while(0)

## MSGB_DEBUG

#define MSGB_DEBUG

## msgb_l1

#define msgb_l1 | ( |  | m | ) | ((void *)(m->l1h))

obtain L1 header of msgb

## msgb_l2

#define msgb_l2 | ( |  | m | ) | ((void *)(m->l2h))

obtain L2 header of msgb

## msgb_l3

#define msgb_l3 | ( |  | m | ) | ((void *)(m->l3h))

obtain L3 header of msgb

## msgb_sms

#define msgb_sms | ( |  | m | ) | ((void *)(m->l4h))

obtain SMS header of msgb

## Function Documentation

## msgb_alloc()

struct msgb * msgb_alloc | ( | uint16_t | size,
|  | const char * | name
| ) |  |

Allocate a new message buffer.

Parameters

  [in] | size | Length in octets, including headroom
  [in] | name | Human-readable name to be associated with msgb

Returns
  dynamically-allocated Message buffers

This function allocates a 'struct msgb' as well as the underlying memory buffer for the actual message data (size specified by size) using the talloc memory context previously set by msgb_set_talloc_ctx

References _data, data, data_len, DLGLOBAL, head, len, LOGL_FATAL, LOGP, name, tail, and tall_msgb_ctx.

Referenced by _gsmtap_raw_output(), gsmtap_makemsg_ex(), msgb_alloc_headroom(), and msgb_copy().

## msgb_alloc_headroom()

static struct msgb* msgb_alloc_headroom | ( | int | size,
|  | int | headroom,
|  | const char * | name
| ) |  |

inline static

Allocate message buffer with specified headroom.

Parameters

  [in] | size | size in bytes, including headroom
  [in] | headroom | headroom in bytes
  [in] | name | human-readable name

Returns
  allocated message buffer with specified headroom

This function is a convenience wrapper around msgb_alloc followed by msgb_reserve in order to create a new Message buffers with user-specified amount of headroom.

References msgb_alloc(), msgb_reserve(), name, and osmo_static_assert.

Referenced by osmo_sercomm_alloc_msgb().

## msgb_copy()

struct msgb * msgb_copy | ( | const struct msgb * | msg,
|  | const char * | name
| ) |  |

Copy an msgb.

This function allocates a new msgb, copies the data buffer of msg, and adjusts the pointers (incl l1h-l4h) accordingly. The cb part is not copied.

Parameters

  [in] | msg | The old msgb object
  [in] | name | Human-readable name to be associated with msgb

References _data, data, data_len, head, l1h, l2h, l3h, l4h, len, msgb_alloc(), name, and tail.

## msgb_data()

uint8_t * msgb_data | ( | const struct msgb * | msg | ) |

get pointer to data section of message buffer

Parameters

  [in] | msg | message buffer

Returns
  pointer to data section of message buffer

References data.

## msgb_dequeue()

struct msgb * msgb_dequeue | ( | struct llist_head * | queue | ) |

Dequeue message buffer from head of queue.

Parameters

  [in] | queue | linked list header of queue

Returns
  message buffer (if any) or NULL if queue empty

The function will remove the first message buffer from the queue implemented by llist_head queue.

References llist_del(), llist_empty(), llist_entry, and llist_head::next.

Referenced by msgb_queue_free(), osmo_sercomm_drv_pull(), osmo_wqueue_bfd_cb(), and osmo_wqueue_clear().

## msgb_enqueue()

void msgb_enqueue | ( | struct llist_head * | queue,
|  | struct msgb * | msg
| ) |  |

Enqueue message buffer to tail of a queue.

Parameters

  [in] | queue | linked list header of queue
  [in] | msg | message buffer to be added to the queue

The function will append the specified message buffer msg to the queue implemented by llist_head queue

References list, and llist_add_tail().

Referenced by osmo_sercomm_sendmsg(), and osmo_wqueue_enqueue().

## msgb_free()

void msgb_free | ( | struct msgb * | m | ) |

Release given message buffer.

Parameters

  [in] | m | Message buffer to be freed

Referenced by _gsmtap_raw_output(), dispatch_rx_msg(), gsmtap_send_ex(), gsmtap_sendmsg(), msgb_queue_free(), osmo_sercomm_drv_pull(), osmo_sercomm_drv_rx_char(), osmo_wqueue_bfd_cb(), and osmo_wqueue_clear().

## msgb_get()

static unsigned char* msgb_get | ( | struct msgb * | msgb,
|  | unsigned int | len
| ) |  |

inline static

remove data from end of message

Parameters

  [in] | msgb | message buffer
  [in] | len | number of bytes to remove from end

References len, MSGB_ABORT, msgb_length(), and tail.

Referenced by msgb_get_u16(), msgb_get_u32(), and msgb_get_u8().

## msgb_get_u16()

static uint16_t msgb_get_u16 | ( | struct msgb * | msgb | ) |

inline static

remove uint16 from end of message

Parameters

  [in] | msgb | message buffer

Returns
  16bit value taken from end of msgb

References msgb_get(), and osmo_load16be().

## msgb_get_u32()

static uint32_t msgb_get_u32 | ( | struct msgb * | msgb | ) |

inline static

remove uint32 from end of message

Parameters

  [in] | msgb | message buffer

Returns
  32bit value taken from end of msgb

References msgb_get(), and osmo_load32be().

## msgb_get_u8()

static uint8_t msgb_get_u8 | ( | struct msgb * | msgb | ) |

inline static

remove uint8 from end of message

Parameters

  [in] | msgb | message buffer

Returns
  8bit value taken from end of msgb

References msgb_get().

## msgb_headlen()

static unsigned int msgb_headlen | ( | const struct msgb * | msgb | ) |

inline static

determine the length of the header

Parameters

  [in] | msgb | message buffer

Returns
  number of bytes between start of buffer and start of msg

This function computes the length difference between the underlying data buffer and the used section of the msgb.

References data_len, and len.

## msgb_headroom()

static int msgb_headroom | ( | const struct msgb * | msgb | ) |

inline static

determine the amount of headroom in msgb

Parameters

  [in] | msgb | message buffer

Returns
  number of bytes left ahead of message start in msgb

This function computes the amount of bytes left in the underlying data buffer before the start of the actual message.

References data, and head.

Referenced by msgb_push().

## msgb_hexdump()

const char * msgb_hexdump | ( | const struct msgb * | msg | ) |

Return a (static) buffer containing a hexdump of the msg.

Parameters

  [in] | msg | message buffer

Returns
  a pointer to a static char array

References ARRAY_SIZE, data, data_len, head, l1h, l2h, l3h, l4h, osmo_hexdump(), and tail.

## msgb_hexdump_l2()

static const char* msgb_hexdump_l2 | ( | const struct msgb * | msg | ) |

inline static

References msgb_l2, msgb_l2len(), and osmo_hexdump().

## msgb_hexdump_l3()

static const char* msgb_hexdump_l3 | ( | const struct msgb * | msg | ) |

inline static

References msgb_l3, msgb_l3len(), and osmo_hexdump().

## msgb_l1len()

static unsigned int msgb_l1len | ( | const struct msgb * | msgb | ) |

inline static

determine length of L1 message

Parameters

  [in] | msgb | message buffer

Returns
  size of L1 message in bytes

This function computes the number of bytes between the tail of the message and the layer 1 header.

References msgb_l1, and tail.

## msgb_l2len()

static unsigned int msgb_l2len | ( | const struct msgb * | msgb | ) |

inline static

determine length of L2 message

Parameters

  [in] | msgb | message buffer

Returns
  size of L2 message in bytes

This function computes the number of bytes between the tail of the message and the layer 2 header.

References msgb_l2, and tail.

Referenced by msgb_hexdump_l2().

## msgb_l3len()

static unsigned int msgb_l3len | ( | const struct msgb * | msgb | ) |

inline static

determine length of L3 message

Parameters

  [in] | msgb | message buffer

Returns
  size of L3 message in bytes

This function computes the number of bytes between the tail of the message and the layer 3 header.

References msgb_l3, and tail.

Referenced by msgb_hexdump_l3().

## msgb_l3trim()

static int msgb_l3trim | ( | struct msgb * | msg,
|  | int | l3len
| ) |  |

inline static

Trim the msgb to a given layer3 length.

Parameters

  [in] | msg | message buffer
  [in] | l3len | new layer3 length

Returns
  0 in case of success, negative in case of error

References data, l3h, and msgb_trim().

## msgb_length()

uint16_t msgb_length | ( | const struct msgb * | msg | ) |

get length of message buffer

Parameters

  [in] | msg | message buffer

Returns
  length of data section in message buffer

References len.

Referenced by msgb_get(), msgb_pull(), and osmo_stats_reporter_statsd_send().

## msgb_printf()

int msgb_printf | ( | struct msgb * | msgb,
|  | const char * | format,
|  |  | ...
| ) |  |

Print a string to the end of message buffer.

Parameters

  [in] | msg | message buffer

Returns
  0 on success, -EINVAL on error

The resulting string is printed to the msgb without a trailing nul character. A nul following the data tail may be written as an implementation detail, but a trailing nul is never part of the msgb data in terms of msgb_length().

Note: the tailroom must always be one byte longer than the string to be written. The msgb is filled only up to tailroom=1. This is an implementation detail that allows leaving a nul character behind the valid data.

In case of error, the msgb remains unchanged, though data may have been written to the (unused) memory after the tail pointer.

References msgb_put(), msgb_tailroom(), OSMO_ASSERT, and tail.

## msgb_pull()

static unsigned char* msgb_pull | ( | struct msgb * | msgb,
|  | unsigned int | len
| ) |  |

inline static

remove (pull) a header from the front of the message buffer

Parameters

  [in] | msgb | message buffer
  [in] | len | number of octets to be pulled

Returns
  pointer to new start of msgb

This function moves the data pointer of the Message buffers further back in the message, thereby shrinking the size of the message by len bytes.

References data, len, MSGB_ABORT, and msgb_length().

Referenced by msgb_pull_to_l2(), msgb_pull_to_l3(), msgb_pull_u16(), msgb_pull_u32(), and msgb_pull_u8().

## msgb_pull_to_l2()

static unsigned char* msgb_pull_to_l2 | ( | struct msgb * | msg | ) |

inline static

remove (pull) all headers in front of l2h from the message buffer.

Parameters

  [in] | msgb | message buffer with a valid l2h

Returns
  pointer to new start of msgb (l2h)

This function moves the data pointer of the Message buffers further back in the message, thereby shrinking the size of the message. l1h will be cleared.

References data, l1h, l2h, and msgb_pull().

## msgb_pull_to_l3()

static unsigned char* msgb_pull_to_l3 | ( | struct msgb * | msg | ) |

inline static

remove (pull) all headers in front of l3h from the message buffer.

Parameters

  [in] | msgb | message buffer with a valid l3h

Returns
  pointer to new start of msgb (l3h)

This function moves the data pointer of the Message buffers further back in the message, thereby shrinking the size of the message. l1h and l2h will be cleared.

References data, l1h, l2h, l3h, and msgb_pull().

## msgb_pull_u16()

static uint16_t msgb_pull_u16 | ( | struct msgb * | msgb | ) |

inline static

remove uint16 from front of message

Parameters

  [in] | msgb | message buffer

Returns
  16bit value taken from end of msgb

References msgb_pull(), and osmo_load16be().

## msgb_pull_u32()

static uint32_t msgb_pull_u32 | ( | struct msgb * | msgb | ) |

inline static

remove uint32 from front of message

Parameters

  [in] | msgb | message buffer

Returns
  32bit value taken from end of msgb

References msgb_pull(), and osmo_load32be().

## msgb_pull_u8()

static uint8_t msgb_pull_u8 | ( | struct msgb * | msgb | ) |

inline static

remove uint8 from front of message

Parameters

  [in] | msgb | message buffer

Returns
  8bit value taken from end of msgb

References msgb_pull().

## msgb_push()

static unsigned char* msgb_push | ( | struct msgb * | msgb,
|  | unsigned int | len
| ) |  |

inline static

prepend (push) some data to start of message

Parameters

  [in] | msgb | message buffer
  [in] | len | number of bytes to pre-pend

Returns
  pointer to newly added portion at start of msgb

This function moves the data pointer of the Message buffers further to the front (by len bytes), thereby enlarging the message by len bytes.

The return value is a pointer to the newly added section in the beginning of the message. It can be used to fill/copy data into it.

References data, len, MSGB_ABORT, and msgb_headroom().

Referenced by msgb_push_u16(), msgb_push_u32(), msgb_push_u8(), and osmo_sercomm_sendmsg().

## msgb_push_u16()

static void msgb_push_u16 | ( | struct msgb * | msg,
|  | uint16_t | word
| ) |  |

inline static

prepend a uint16 value to the head of the message

Parameters

  [in] | msgb | message buffer
  [in] | word | unsigned 16bit byte to be prepended

References msgb_push(), and osmo_store16be().

## msgb_push_u32()

static void msgb_push_u32 | ( | struct msgb * | msg,
|  | uint32_t | word
| ) |  |

inline static

prepend a uint32 value to the head of the message

Parameters

  [in] | msgb | message buffer
  [in] | word | unsigned 32bit byte to be prepended

References msgb_push(), and osmo_store32be().

## msgb_push_u8()

static void msgb_push_u8 | ( | struct msgb * | msg,
|  | uint8_t | word
| ) |  |

inline static

prepend a uint8 value to the head of the message

Parameters

  [in] | msgb | message buffer
  [in] | word | unsigned 8bit byte to be prepended

References msgb_push().

## msgb_put()

static unsigned char* msgb_put | ( | struct msgb * | msgb,
|  | unsigned int | len
| ) |  |

inline static

append data to end of message buffer

Parameters

  [in] | msgb | message buffer
  [in] | len | number of bytes to append to message

Returns
  pointer to start of newly-appended data

This function will move the tail pointer of the message buffer len bytes further, thus enlarging the message by len bytes.

The return value is a pointer to start of the newly added section at the end of the message and can be used for actually filling/copying data into it.

References len, MSGB_ABORT, msgb_tailroom(), and tail.

Referenced by _gsmtap_raw_output(), gsmtap_makemsg_ex(), msgb_printf(), msgb_put_u16(), msgb_put_u32(), msgb_put_u8(), osmo_sercomm_drv_rx_char(), and osmo_stats_reporter_statsd_send().

## msgb_put_u16()

static void msgb_put_u16 | ( | struct msgb * | msgb,
|  | uint16_t | word
| ) |  |

inline static

append a uint16 value to the end of the message

Parameters

  [in] | msgb | message buffer
  [in] | word | unsigned 16bit byte to be appended

References msgb_put(), and osmo_store16be().

## msgb_put_u32()

static void msgb_put_u32 | ( | struct msgb * | msgb,
|  | uint32_t | word
| ) |  |

inline static

append a uint32 value to the end of the message

Parameters

  [in] | msgb | message buffer
  [in] | word | unsigned 32bit byte to be appended

References msgb_put(), and osmo_store32be().

## msgb_put_u8()

static void msgb_put_u8 | ( | struct msgb * | msgb,
|  | uint8_t | word
| ) |  |

inline static

append a uint8 value to the end of the message

Parameters

  [in] | msgb | message buffer
  [in] | word | unsigned 8bit byte to be appended

References msgb_put().

Referenced by osmo_stats_reporter_statsd_send().

## msgb_queue_free()

static void msgb_queue_free | ( | struct llist_head * | queue | ) |

inline static

Free all msgbs from a queue built with msgb_enqueue().

Parameters

  [in] | queue | list head of a msgb queue.

References msgb_dequeue(), and msgb_free().

## msgb_reserve()

static void msgb_reserve | ( | struct msgb * | msg,
|  | int | len
| ) |  |

inline static

Increase headroom of empty msgb, reducing the tailroom.

Parameters

  [in] | msg | message buffer
  [in] | len | amount of extra octets to be reserved as headroom

This function reserves some memory at the beginning of the underlying data buffer. The idea is to reserve space in case further headers have to be pushed to the Message buffers during further processing.

Calling this function leads to undefined reusults if it is called on a non-empty Message buffers.

References data, len, and tail.

Referenced by msgb_alloc_headroom().

## msgb_reset()

void msgb_reset | ( | struct msgb * | msg | ) |

Re-set all message buffer pointers.

Parameters

  [in] | msg | message buffer that is to be resetted

This will re-set the various internal pointers into the underlying message buffer, i.e. remove all headroom and treat the msgb as completely empty. It also initializes the control buffer to zero.

References _data, cb, data, head, l2h, l3h, l4h, lchan, len, tail, and trx.

## msgb_resize_area()

int msgb_resize_area | ( | struct msgb * | msg,
|  | uint8_t * | area,
|  | int | old_size,
|  | int | new_size
| ) |  |

Resize an area within an msgb.

This resizes a sub area of the msgb data and adjusts the pointers (incl l1h-l4h) accordingly. The cb part is not updated. If the area is extended, the contents of the extension is undefined. The complete sub area must be a part of [data,tail].

Parameters

  [in,out] | msg | The msgb object
  [in] | area | A pointer to the sub-area
  [in] | old_size | The old size of the sub-area
  [in] | new_size | The new size of the sub-area

Returns
  0 on success, -1 if there is not enough space to extend the area

References data, l1h, l2h, l3h, l4h, len, MSGB_ABORT, msgb_trim(), and tail.

## msgb_set_talloc_ctx()

void msgb_set_talloc_ctx | ( | void * | ctx | ) |

Set the talloc context for msgb_alloc Deprecated, use msgb_talloc_ctx_init() instead.

Parameters

  [in] | ctx | talloc context to be used as root for msgb allocations

References tall_msgb_ctx.

## msgb_tailroom()

static int msgb_tailroom | ( | const struct msgb * | msgb | ) |

inline static

determine how much tail room is left in msgb

Parameters

  [in] | msgb | message buffer

Returns
  number of bytes remaining at end of msgb

This function computes the amount of octets left in the underlying data buffer after the end of the message.

References data_len, head, and tail.

Referenced by _gsmtap_raw_output(), msgb_printf(), msgb_put(), osmo_sercomm_drv_rx_char(), and osmo_stats_reporter_statsd_send().

## msgb_talloc_ctx_init()

void * msgb_talloc_ctx_init | ( | void * | root_ctx,
|  | unsigned int | pool_size
| ) |  |

Initialize a msgb talloc context for msgb_alloc.

Create a talloc context called "msgb". If pool_size is 0, create a named const as msgb talloc context. If pool_size is nonzero, create a talloc pool, possibly for faster msgb allocations (see talloc_pool()).

Parameters

  [in] | root_ctx | talloc context used as parent for the new "msgb" ctx.
  [in] | pool_size | if nonzero, create a talloc pool of this size.

Returns
  the new msgb talloc context, e.g. for reporting

References tall_msgb_ctx.

## msgb_test_invariant()

static int msgb_test_invariant | ( | const struct msgb * | msg | ) |

inline static

Check a message buffer for consistency.

Parameters

  [in] | msg | message buffer

Returns
  0 (false) if inconsistent, != 0 (true) otherwise

References data, data_len, head, l1h, l2h, l3h, l4h, len, and tail.

## msgb_trim()

static int msgb_trim | ( | struct msgb * | msg,
|  | int | len
| ) |  |

inline static

Trim the msgb to a given absolute length.

Parameters

  [in] | msg | message buffer
  [in] | len | new total length of buffer

Returns
  0 in case of success, negative in case of error

References data, data_len, len, MSGB_ABORT, and tail.

Referenced by msgb_l3trim(), msgb_resize_area(), and osmo_stats_reporter_statsd_send().

## Variable Documentation

## tall_msgb_ctx

void* tall_msgb_ctx = NULL

Referenced by msgb_alloc(), msgb_set_talloc_ctx(), and msgb_talloc_ctx_init().