mirror of
https://github.com/Waujito/youtubeUnblock.git
synced 2024-12-23 23:05:10 +00:00
64 lines
1.2 KiB
C
64 lines
1.2 KiB
C
|
/* This example is placed in the public domain. */
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include <time.h>
|
||
|
|
||
|
#include <libmnl/libmnl.h>
|
||
|
#include <linux/genetlink.h>
|
||
|
|
||
|
static int group;
|
||
|
|
||
|
static int data_cb(const struct nlmsghdr *nlh, void *data)
|
||
|
{
|
||
|
printf("received event type=%d from genetlink group %d\n",
|
||
|
nlh->nlmsg_type, group);
|
||
|
return MNL_CB_OK;
|
||
|
}
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
struct mnl_socket *nl;
|
||
|
char buf[MNL_SOCKET_BUFFER_SIZE];
|
||
|
int ret;
|
||
|
|
||
|
if (argc != 2) {
|
||
|
printf("%s [group]\n", argv[0]);
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
group = atoi(argv[1]);
|
||
|
|
||
|
nl = mnl_socket_open(NETLINK_GENERIC);
|
||
|
if (nl == NULL) {
|
||
|
perror("mnl_socket_open");
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
|
||
|
if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) {
|
||
|
perror("mnl_socket_bind");
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
|
||
|
if (mnl_socket_setsockopt(nl, NETLINK_ADD_MEMBERSHIP, &group,
|
||
|
sizeof(int)) < 0) {
|
||
|
perror("mnl_socket_setsockopt");
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
|
||
|
ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
|
||
|
while (ret > 0) {
|
||
|
ret = mnl_cb_run(buf, ret, 0, 0, data_cb, NULL);
|
||
|
if (ret <= 0)
|
||
|
break;
|
||
|
ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
|
||
|
}
|
||
|
if (ret == -1) {
|
||
|
perror("error");
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
|
||
|
mnl_socket_close(nl);
|
||
|
|
||
|
return 0;
|
||
|
}
|