8#include <libmnl/libmnl.h>
10#include <linux/if_link.h>
11#include <linux/rtnetlink.h>
13int main(
int argc,
char *argv[])
15 struct mnl_socket *nl;
16 char buf[MNL_SOCKET_BUFFER_SIZE];
18 struct ifinfomsg *ifm;
20 unsigned int seq, portid, change = 0, flags = 0;
23 printf(
"Usage: %s [ifname] [up|down]\n", argv[0]);
27 if (strncasecmp(argv[2],
"up", strlen(
"up")) == 0) {
30 }
else if (strncasecmp(argv[2],
"down", strlen(
"down")) == 0) {
34 fprintf(stderr,
"%s is not `up' nor `down'\n", argv[2]);
39 nlh->nlmsg_type = RTM_NEWLINK;
40 nlh->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
41 nlh->nlmsg_seq = seq = time(NULL);
43 ifm->ifi_family = AF_UNSPEC;
44 ifm->ifi_change = change;
45 ifm->ifi_flags = flags;
51 perror(
"mnl_socket_open");
56 perror(
"mnl_socket_bind");
62 sizeof(
struct ifinfomsg));
65 perror(
"mnl_socket_sendto");
71 perror(
"mnl_socket_recvfrom");
75 ret =
mnl_cb_run(buf, ret, seq, portid, NULL, NULL);
void mnl_attr_put_str(struct nlmsghdr *nlh, uint16_t type, const char *data)
int mnl_cb_run(const void *buf, size_t numbytes, unsigned int seq, unsigned int portid, mnl_cb_t cb_data, void *data)
struct nlmsghdr * mnl_nlmsg_put_header(void *buf)
void mnl_nlmsg_fprintf(FILE *fd, const void *data, size_t datalen, size_t extra_header_size)
void * mnl_nlmsg_put_extra_header(struct nlmsghdr *nlh, size_t size)
int mnl_socket_close(struct mnl_socket *nl)
unsigned int mnl_socket_get_portid(const struct mnl_socket *nl)
struct mnl_socket * mnl_socket_open(int bus)
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)
ssize_t mnl_socket_sendto(const struct mnl_socket *nl, const void *buf, size_t len)