Functions

Netlink socket helpers

Functions

EXPORT_SYMBOL int mnl_socket_get_fd (const struct mnl_socket *nl)
EXPORT_SYMBOL unsigned int mnl_socket_get_portid (const struct mnl_socket *nl)
EXPORT_SYMBOL struct mnl_socketmnl_socket_open (int bus)
EXPORT_SYMBOL int mnl_socket_bind (struct mnl_socket *nl, unsigned int groups, pid_t pid)
EXPORT_SYMBOL ssize_t mnl_socket_sendto (const struct mnl_socket *nl, const void *buf, size_t len)
EXPORT_SYMBOL ssize_t mnl_socket_recvfrom (const struct mnl_socket *nl, void *buf, size_t bufsiz)
EXPORT_SYMBOL int mnl_socket_close (struct mnl_socket *nl)
EXPORT_SYMBOL int mnl_socket_setsockopt (const struct mnl_socket *nl, int type, void *buf, socklen_t len)
EXPORT_SYMBOL int mnl_socket_getsockopt (const struct mnl_socket *nl, int type, void *buf, socklen_t *len)

Function Documentation

EXPORT_SYMBOL int mnl_socket_bind ( struct mnl_socket nl,
unsigned int  groups,
pid_t  pid 
)

mnl_socket_bind - bind netlink socket

Parameters:
nl netlink socket obtained via mnl_socket_open()
groups the group of message you're interested in
pid the port ID you want to use (use zero for automatic selection)

On error, this function returns -1 and errno is appropriately set. On success, 0 is returned. You can use MNL_SOCKET_AUTOPID which is 0 for automatic port ID selection.

Definition at line 139 of file socket.c.

EXPORT_SYMBOL int mnl_socket_close ( struct mnl_socket nl  ) 

mnl_socket_close - close a given netlink socket

Parameters:
nl netlink socket obtained via mnl_socket_open()

On error, this function returns -1 and errno is appropriately set. On success, it returns 0.

Definition at line 241 of file socket.c.

EXPORT_SYMBOL int mnl_socket_get_fd ( const struct mnl_socket nl  ) 

mnl_socket_get_fd - obtain file descriptor from netlink socket

Parameters:
nl netlink socket obtained via mnl_socket_open()

This function returns the file descriptor of a given netlink socket.

Definition at line 85 of file socket.c.

EXPORT_SYMBOL unsigned int mnl_socket_get_portid ( const struct mnl_socket nl  ) 

mnl_socket_get_portid - obtain Netlink PortID from netlink socket

Parameters:
nl netlink socket obtained via mnl_socket_open()

This function returns the Netlink PortID of a given netlink socket. It's a common mistake to assume that this PortID equals the process ID which is not always true. This is the case if you open more than one socket that is binded to the same Netlink subsystem from the same process.

Definition at line 99 of file socket.c.

EXPORT_SYMBOL int mnl_socket_getsockopt ( const struct mnl_socket nl,
int  type,
void *  buf,
socklen_t *  len 
)

mnl_socket_getsockopt - get a Netlink socket option

Parameters:
nl netlink socket obtained via mnl_socket_open()
type type of Netlink socket options
buf pointer to the buffer to store the value of this option
len size of the information written in the buffer

On error, this function returns -1 and errno is appropriately set.

Definition at line 288 of file socket.c.

EXPORT_SYMBOL struct mnl_socket* mnl_socket_open ( int  bus  )  [read]

mnl_socket_open - open a netlink socket

Parameters:
bus the netlink socket bus ID (see NETLINK_* constants)

On error, it returns -1 and errno is appropriately set. Otherwise, it returns a valid pointer to the mnl_socket structure.

Definition at line 111 of file socket.c.

EXPORT_SYMBOL ssize_t mnl_socket_recvfrom ( const struct mnl_socket nl,
void *  buf,
size_t  bufsiz 
)

mnl_socket_recvfrom - receive a netlink message

Parameters:
nl netlink socket obtained via mnl_socket_open()
buf buffer that you want to use to store the netlink message
bufsiz size of the buffer passed to store the netlink message

On error, it returns -1 and errno is appropriately set. If errno is set to ENOSPC, it means that the buffer that you have passed to store the netlink message is too small, so you have received a truncated message. To avoid this, you have to allocate a buffer of MNL_SOCKET_BUFFER_SIZE (which is 8KB, see linux/netlink.h for more information). Using this buffer size ensures that your buffer is big enough to store the netlink message without truncating it.

Definition at line 202 of file socket.c.

EXPORT_SYMBOL ssize_t mnl_socket_sendto ( const struct mnl_socket nl,
const void *  buf,
size_t  len 
)

mnl_socket_sendto - send a netlink message of a certain size

Parameters:
nl netlink socket obtained via mnl_socket_open()
buf buffer containing the netlink message to be sent
len number of bytes in the buffer that you want to send

On error, it returns -1 and errno is appropriately set. Otherwise, it returns the number of bytes sent.

Definition at line 178 of file socket.c.

EXPORT_SYMBOL int mnl_socket_setsockopt ( const struct mnl_socket nl,
int  type,
void *  buf,
socklen_t  len 
)

mnl_socket_setsockopt - set Netlink socket option

Parameters:
nl netlink socket obtained via mnl_socket_open()
type type of Netlink socket options
buf the buffer that contains the data about this option
len the size of the buffer passed

This function allows you to set some Netlink socket option. As of writing this (see linux/netlink.h), the existing options are:

  • #define NETLINK_ADD_MEMBERSHIP 1
  • #define NETLINK_DROP_MEMBERSHIP 2
  • #define NETLINK_PKTINFO 3
  • #define NETLINK_BROADCAST_ERROR 4
  • #define NETLINK_NO_ENOBUFS 5

In the early days, Netlink only supported 32 groups expressed in a 32-bits mask. However, since 2.6.14, Netlink may have up to 2^32 multicast groups but you have to use setsockopt() with NETLINK_ADD_MEMBERSHIP to join a given multicast group. This function internally calls setsockopt() to join a given netlink multicast group. You can still use mnl_bind() and the 32-bit mask to join a set of Netlink multicast groups.

On error, this function returns -1 and errno is appropriately set.

Definition at line 273 of file socket.c.