libosmocore 0.9.6-23.20170220git32ee5af8.fc42
Osmocom core library
|
Files | |
file | msgb.h |
Osmocom message buffers The Osmocom message buffers are modelled after the 'struct skb' inside the Linux kernel network stack. As they exist in userspace, they are much simplified. However, terminology such as headroom, tailroom, push/pull/put etc. remains the same. | |
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) |
obtain L1 header of msgb | |
#define | msgb_l2(m) |
obtain L2 header of msgb | |
#define | msgb_l3(m) |
obtain L3 header of msgb | |
#define | msgb_sms(m) |
obtain SMS header of msgb | |
Functions | |
struct msgb * | msgb_alloc (uint16_t size, const char *name) |
Allocate a new message buffer. | |
void | msgb_free (struct msgb *m) |
Release given message buffer. | |
void | msgb_enqueue (struct llist_head *queue, struct msgb *msg) |
Enqueue message buffer to tail of a queue. | |
struct msgb * | msgb_dequeue (struct llist_head *queue) |
Dequeue message buffer from head of queue. | |
void | msgb_reset (struct msgb *msg) |
Re-set all message buffer pointers. | |
uint16_t | msgb_length (const struct msgb *msg) |
get length of message buffer | |
const char * | msgb_hexdump (const struct msgb *msg) |
Return a (static) buffer containing a hexdump of the msg. | |
int | msgb_resize_area (struct msgb *msg, uint8_t *area, int old_size, int new_size) |
Resize an area within an msgb. | |
struct msgb * | msgb_copy (const struct msgb *msg, const char *name) |
Copy an msgb. | |
static int | msgb_test_invariant (const struct msgb *msg) |
Check a message buffer for consistency. | |
static unsigned int | msgb_l1len (const struct msgb *msgb) |
determine length of L1 message | |
static unsigned int | msgb_l2len (const struct msgb *msgb) |
determine length of L2 message | |
static unsigned int | msgb_l3len (const struct msgb *msgb) |
determine length of L3 message | |
static unsigned int | msgb_headlen (const struct msgb *msgb) |
determine the length of the header | |
static int | msgb_tailroom (const struct msgb *msgb) |
determine how much tail room is left in msgb | |
static int | msgb_headroom (const struct msgb *msgb) |
determine the amount of headroom in msgb | |
static unsigned char * | msgb_put (struct msgb *msgb, unsigned int len) |
append data to end of message buffer | |
static void | msgb_put_u8 (struct msgb *msgb, uint8_t word) |
append a uint8 value to the end of the message | |
static void | msgb_put_u16 (struct msgb *msgb, uint16_t word) |
append a uint16 value to the end of the message | |
static void | msgb_put_u32 (struct msgb *msgb, uint32_t word) |
append a uint32 value to the end of the message | |
static unsigned char * | msgb_get (struct msgb *msgb, unsigned int len) |
remove data from end of message | |
static uint8_t | msgb_get_u8 (struct msgb *msgb) |
remove uint8 from end of message | |
static uint16_t | msgb_get_u16 (struct msgb *msgb) |
remove uint16 from end of message | |
static uint32_t | msgb_get_u32 (struct msgb *msgb) |
remove uint32 from end of message | |
static unsigned char * | msgb_push (struct msgb *msgb, unsigned int len) |
prepend (push) some data to start of message | |
static void | msgb_push_u8 (struct msgb *msg, uint8_t word) |
prepend a uint8 value to the head of the message | |
static void | msgb_push_u16 (struct msgb *msg, uint16_t word) |
prepend a uint16 value to the head of the message | |
static void | msgb_push_u32 (struct msgb *msg, uint32_t word) |
prepend a uint32 value to the head of the message | |
static unsigned char * | msgb_pull (struct msgb *msgb, unsigned int len) |
remove (pull) a header from the front of the message buffer | |
static unsigned char * | msgb_pull_to_l3 (struct msgb *msg) |
remove (pull) all headers in front of l3h from the message buffer. | |
static uint8_t | msgb_pull_u8 (struct msgb *msgb) |
remove uint8 from front of message | |
static uint16_t | msgb_pull_u16 (struct msgb *msgb) |
remove uint16 from front of message | |
static uint32_t | msgb_pull_u32 (struct msgb *msgb) |
remove uint32 from front of message | |
static void | msgb_reserve (struct msgb *msg, int len) |
Increase headroom of empty msgb, reducing the tailroom. | |
static int | msgb_trim (struct msgb *msg, int len) |
Trim the msgb to a given absolute length. | |
static int | msgb_l3trim (struct msgb *msg, int l3len) |
Trim the msgb to a given layer3 length. | |
static struct msgb * | msgb_alloc_headroom (int size, int headroom, const char *name) |
Allocate message buffer with specified headroom. | |
uint8_t * | msgb_data (const struct msgb *msg) |
get pointer to data section of message buffer | |
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()). | |
void | msgb_set_talloc_ctx (void *ctx) |
Set the talloc context for msgb_alloc Deprecated, use msgb_talloc_ctx_init() instead. | |
Variables | |
void * | tall_msgb_ctx = NULL |
#define MSGB_ABORT | ( | msg, | |
fmt, | |||
args ... ) |
#define msgb_l1 | ( | m | ) |
#define msgb_l2 | ( | m | ) |
#define msgb_l3 | ( | m | ) |
#define msgb_sms | ( | m | ) |
obtain SMS header of msgb
|
extern |
Allocate a new message buffer.
[in] | size | Length in octets, including headroom |
[in] | name | Human-readable name to be associated with msgb |
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, head, len, and tail.
Referenced by gsmtap_makemsg_ex(), msgb_alloc_headroom(), and msgb_copy().
|
inlinestatic |
Allocate message buffer with specified headroom.
[in] | size | size in bytes, including headroom |
[in] | headroom | headroom in bytes |
[in] | name | human-readable name |
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(), and msgb_reserve().
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.
[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(), and tail.
uint8_t * msgb_data | ( | const struct msgb * | msg | ) |
get pointer to data section of message buffer
[in] | msg | message buffer |
References data.
|
extern |
Dequeue message buffer from head of queue.
[in] | queue | linked list header of queue |
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 osmo_wqueue_bfd_cb(), and osmo_wqueue_clear().
|
extern |
Enqueue message buffer to tail of a queue.
[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_wqueue_enqueue().
|
extern |
Release given message buffer.
[in] | m | Message buffer to be free'd |
Referenced by gsmtap_sendmsg(), osmo_wqueue_bfd_cb(), and osmo_wqueue_clear().
|
inlinestatic |
remove data from end of message
[in] | msgb | message buffer |
[in] | len | number of bytes to remove from end |
References len, msgb_length(), and tail.
Referenced by msgb_get_u16(), msgb_get_u32(), and msgb_get_u8().
|
inlinestatic |
remove uint16 from end of message
[in] | msgb | message buffer |
References msgb_get().
|
inlinestatic |
remove uint32 from end of message
[in] | msgb | message buffer |
References msgb_get().
|
inlinestatic |
remove uint8 from end of message
[in] | msgb | message buffer |
References msgb_get().
|
inlinestatic |
|
inlinestatic |
determine the amount of headroom in msgb
[in] | msgb | message buffer |
This function computes the amount of bytes left in the underlying data buffer before the start of the actual message.
Referenced by msgb_push().
|
extern |
Return a (static) buffer containing a hexdump of the msg.
[in] | msg | message buffer |
References ARRAY_SIZE, data, data_len, head, l1h, l2h, l3h, l4h, osmo_hexdump(), and tail.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Trim the msgb to a given layer3 length.
[in] | msg | message buffer |
[in] | l3len | new layer3 length |
References data, l3h, and msgb_trim().
uint16_t msgb_length | ( | const struct msgb * | msg | ) |
get length of message buffer
[in] | msg | message buffer |
References len.
Referenced by msgb_get().
|
inlinestatic |
remove (pull) a header from the front of the message buffer
[in] | msgb | message buffer |
[in] | len | number of octets to be pulled |
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.
Referenced by msgb_pull_to_l3(), msgb_pull_u16(), msgb_pull_u32(), and msgb_pull_u8().
|
inlinestatic |
remove (pull) all headers in front of l3h from the message buffer.
[in] | msgb | message buffer with a valid 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().
|
inlinestatic |
remove uint16 from front of message
[in] | msgb | message buffer |
References msgb_pull().
|
inlinestatic |
remove uint32 from front of message
[in] | msgb | message buffer |
References msgb_pull().
|
inlinestatic |
remove uint8 from front of message
[in] | msgb | message buffer |
References msgb_pull().
|
inlinestatic |
prepend (push) some data to start of message
[in] | msgb | message buffer |
[in] | len | number of bytes to pre-pend |
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, and msgb_headroom().
Referenced by msgb_push_u16(), msgb_push_u32(), and msgb_push_u8().
|
inlinestatic |
prepend a uint16 value to the head of the message
[in] | msgb | message buffer |
[in] | word | unsigned 16bit byte to be prepended |
References msgb_push().
|
inlinestatic |
prepend a uint32 value to the head of the message
[in] | msgb | message buffer |
[in] | word | unsigned 32bit byte to be prepended |
References msgb_push().
|
inlinestatic |
prepend a uint8 value to the head of the message
[in] | msgb | message buffer |
[in] | word | unsigned 8bit byte to be prepended |
References msgb_push().
|
inlinestatic |
append data to end of message buffer
[in] | msgb | message buffer |
[in] | len | number of bytes to append to message |
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_tailroom(), and tail.
Referenced by gsmtap_makemsg_ex(), msgb_put_u16(), msgb_put_u32(), and msgb_put_u8().
|
inlinestatic |
append a uint16 value to the end of the message
[in] | msgb | message buffer |
[in] | word | unsigned 16bit byte to be appended |
References msgb_put().
|
inlinestatic |
append a uint32 value to the end of the message
[in] | msgb | message buffer |
[in] | word | unsigned 32bit byte to be appended |
References msgb_put().
|
inlinestatic |
append a uint8 value to the end of the message
[in] | msgb | message buffer |
[in] | word | unsigned 8bit byte to be appended |
References msgb_put().
|
inlinestatic |
Increase headroom of empty msgb, reducing the tailroom.
[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().
|
extern |
Re-set all message buffer pointers.
[in] | msg | message buffer that is to be resetted |
This will re-set the various internal pointers into the underlying message buffer, i.e. remvoe 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, and tail.
|
extern |
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].
[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 |
References data, l1h, l2h, l3h, l4h, len, msgb_trim(), and tail.
void msgb_set_talloc_ctx | ( | void * | ctx | ) |
Set the talloc context for msgb_alloc Deprecated, use msgb_talloc_ctx_init() instead.
[in] | ctx | talloc context to be used as root for msgb allocations |
|
inlinestatic |
determine how much tail room is left in msgb
[in] | msgb | message buffer |
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 msgb_put().
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()).
[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. |
|
inlinestatic |
|
inlinestatic |
Trim the msgb to a given absolute length.
[in] | msg | message buffer |
[in] | len | new total length of buffer |
References data, data_len, len, and tail.
Referenced by msgb_l3trim(), and msgb_resize_area().