Data Structures | Functions

Netlink message batch helpers
[Netlink message helpers]

Collaboration diagram for Netlink message batch helpers:

Data Structures

struct  mnl_nlmsg_batch

Functions

EXPORT_SYMBOL struct
mnl_nlmsg_batch
mnl_nlmsg_batch_start (void *buf, size_t limit)
EXPORT_SYMBOL void mnl_nlmsg_batch_stop (struct mnl_nlmsg_batch *b)
EXPORT_SYMBOL bool mnl_nlmsg_batch_next (struct mnl_nlmsg_batch *b)
EXPORT_SYMBOL void mnl_nlmsg_batch_reset (struct mnl_nlmsg_batch *b)
EXPORT_SYMBOL size_t mnl_nlmsg_batch_size (struct mnl_nlmsg_batch *b)
EXPORT_SYMBOL void * mnl_nlmsg_batch_head (struct mnl_nlmsg_batch *b)
EXPORT_SYMBOL void * mnl_nlmsg_batch_current (struct mnl_nlmsg_batch *b)
EXPORT_SYMBOL bool mnl_nlmsg_batch_is_empty (struct mnl_nlmsg_batch *b)

Detailed Description

This library provides helpers to batch several messages into one single datagram. These helpers do not perform strict memory boundary checkings.

The following figure represents a Netlink message batch:

|<-------------- MNL_SOCKET_BUFFER_SIZE ------------->| |<-------------------- batch ------------------>| | |-----------|-----------|-----------|-----------|-----------| |<- nlmsg ->|<- nlmsg ->|<- nlmsg ->|<- nlmsg ->|<- nlmsg ->| |-----------|-----------|-----------|-----------|-----------| ^ ^ | | message N message N+1

To start the batch, you have to call mnl_nlmsg_batch_start() and you can use mnl_nlmsg_batch_stop() to release it.

You have to invoke mnl_nlmsg_batch_next() to get room for a new message in the batch. If this function returns NULL, it means that the last message that was added (message N+1 in the figure above) does not fit the batch. Thus, you have to send the batch (which includes until message N) and, then, you have to call mnl_nlmsg_batch_reset() to re-initialize the batch (this moves message N+1 to the head of the buffer). For that reason, the buffer that you have to use to store the batch must be double of MNL_SOCKET_BUFFER_SIZE to ensure that the last message (message N+1) that did not fit into the batch is written inside valid memory boundaries.


Function Documentation

EXPORT_SYMBOL void* mnl_nlmsg_batch_current ( struct mnl_nlmsg_batch b  ) 

mnl_nlmsg_batch_current - returns current position in the batch

Parameters:
b pointer to batch

This function returns a pointer to the current position in the buffer that is used to store the batch.

Definition at line 541 of file nlmsg.c.

EXPORT_SYMBOL void* mnl_nlmsg_batch_head ( struct mnl_nlmsg_batch b  ) 

mnl_nlmsg_batch_head - get head of this batch

Parameters:
b pointer to batch

This function returns a pointer to the head of the batch, which is the beginning of the buffer that is used.

Definition at line 528 of file nlmsg.c.

EXPORT_SYMBOL bool mnl_nlmsg_batch_is_empty ( struct mnl_nlmsg_batch b  ) 

mnl_nlmsg_batch_is_empty - check if there is any message in the batch

Parameters:
b pointer to batch

This function returns true if the batch is empty.

Definition at line 553 of file nlmsg.c.

EXPORT_SYMBOL bool mnl_nlmsg_batch_next ( struct mnl_nlmsg_batch b  ) 

mnl_nlmsg_batch_next - get room for the next message in the batch

Parameters:
b pointer to batch

This function returns a pointer to the beginning of the new Netlink message in the batch. It returns false if the last message did not fit into the batch.

You have to put at least one message in the batch before calling this function, otherwise your application is likely to crash.

Definition at line 472 of file nlmsg.c.

EXPORT_SYMBOL void mnl_nlmsg_batch_reset ( struct mnl_nlmsg_batch b  ) 

mnl_nlmsg_batch_reset - reset the batch

Parameters:
b pointer to batch

This function allows to reset a batch, so you can reuse it to create a new one. This function moves the last message which does not fit the batch to the head of the buffer, if any.

Definition at line 494 of file nlmsg.c.

EXPORT_SYMBOL size_t mnl_nlmsg_batch_size ( struct mnl_nlmsg_batch b  ) 

mnl_nlmsg_batch_size - get current size of the batch

Parameters:
b pointer to batch

This function returns the current size of the batch.

Definition at line 515 of file nlmsg.c.

EXPORT_SYMBOL struct mnl_nlmsg_batch* mnl_nlmsg_batch_start ( void *  buf,
size_t  limit 
) [read]

mnl_nlmsg_batch_start - initialize a batch

Parameters:
buf pointer to the buffer that will store this batch
limit maximum size of the batch (should be MNL_SOCKET_BUFFER_SIZE).

The buffer that you pass must be double of MNL_SOCKET_BUFFER_SIZE. The limit must be half of the buffer size, otherwise expect funny memory corruptions 8-).

You can allocate the buffer that you use to store the batch in the stack or the heap, no restrictions in this regard. This function returns NULL on error.

Definition at line 431 of file nlmsg.c.

EXPORT_SYMBOL void mnl_nlmsg_batch_stop ( struct mnl_nlmsg_batch b  ) 

mnl_nlmsg_batch_stop - release a batch

Parameters:
b pointer to batch

This function returns the amount of data that is part of this batch.

Definition at line 455 of file nlmsg.c.