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);