10 #include <libmnl/libmnl.h>
11 #include <sys/types.h>
12 #include <sys/socket.h>
71 struct sockaddr_nl addr;
102 return nl->addr.nl_pid;
121 nl->fd = socket(AF_NETLINK, SOCK_RAW, bus);
146 nl->addr.nl_family = AF_NETLINK;
147 nl->addr.nl_groups = groups;
148 nl->addr.nl_pid = pid;
150 ret = bind(nl->fd, (
struct sockaddr *) &nl->addr, sizeof (nl->addr));
154 addr_len =
sizeof(nl->addr);
155 ret = getsockname(nl->fd, (
struct sockaddr *) &nl->addr, &addr_len);
159 if (addr_len !=
sizeof(nl->addr)) {
163 if (nl->addr.nl_family != AF_NETLINK) {
183 static const struct sockaddr_nl snl = {
184 .nl_family = AF_NETLINK
186 return sendto(nl->fd, buf, len, 0,
187 (
struct sockaddr *) &snl,
sizeof(snl));
209 struct sockaddr_nl addr;
214 struct msghdr msg = {
216 .msg_namelen =
sizeof(
struct sockaddr_nl),
223 ret = recvmsg(nl->fd, &msg, 0);
227 if (msg.msg_flags & MSG_TRUNC) {
231 if (msg.msg_namelen !=
sizeof(
struct sockaddr_nl)) {
248 int ret = close(nl->fd);
280 void *buf, socklen_t len)
282 return setsockopt(nl->fd, SOL_NETLINK, type, buf, len);
296 void *buf, socklen_t *len)
298 return getsockopt(nl->fd, SOL_NETLINK, type, buf, len);
struct mnl_socket * mnl_socket_open(int bus)
unsigned int mnl_socket_get_portid(const struct mnl_socket *nl)
ssize_t mnl_socket_recvfrom(const struct mnl_socket *nl, void *buf, size_t bufsiz)
int mnl_socket_bind(struct mnl_socket *nl, unsigned int groups, pid_t pid)
int mnl_socket_close(struct mnl_socket *nl)
int mnl_socket_getsockopt(const struct mnl_socket *nl, int type, void *buf, socklen_t *len)
ssize_t mnl_socket_sendto(const struct mnl_socket *nl, const void *buf, size_t len)
int mnl_socket_get_fd(const struct mnl_socket *nl)
int mnl_socket_setsockopt(const struct mnl_socket *nl, int type, void *buf, socklen_t len)