12 #include <netlink/cli/utils.h>
13 #include <netlink/cli/link.h>
15 static void obj_input(
struct nl_object *obj,
void *arg)
26 static int event_input(
struct nl_msg *msg,
void *arg)
28 if (nl_msg_parse(msg, &obj_input, NULL) < 0)
29 fprintf(stderr,
"<<EVENT>> Unknown message type\n");
35 int main(
int argc,
char *argv[])
38 struct nl_cache *link_cache;
43 enum rtnetlink_groups gr_id;
46 { RTNLGRP_LINK,
"link" },
47 { RTNLGRP_NOTIFY,
"notify" },
48 { RTNLGRP_NEIGH,
"neigh" },
50 { RTNLGRP_IPV4_IFADDR,
"ipv4-ifaddr" },
51 { RTNLGRP_IPV4_MROUTE,
"ipv4-mroute" },
52 { RTNLGRP_IPV4_ROUTE,
"ipv4-route" },
53 { RTNLGRP_IPV6_IFADDR,
"ipv6-ifaddr" },
54 { RTNLGRP_IPV6_MROUTE,
"ipv6-mroute" },
55 { RTNLGRP_IPV6_ROUTE,
"ipv6-route" },
56 { RTNLGRP_IPV6_IFINFO,
"ipv6-ifinfo" },
57 { RTNLGRP_DECnet_IFADDR,
"decnet-ifaddr" },
58 { RTNLGRP_DECnet_ROUTE,
"decnet-route" },
59 { RTNLGRP_IPV6_PREFIX,
"ipv6-prefix" },
60 { RTNLGRP_NONE, NULL }
63 sock = nl_cli_alloc_socket();
67 if (argc > 1 && !strcasecmp(argv[1],
"-h")) {
68 printf(
"Usage: nl-monitor [<groups>]\n");
70 printf(
"Known groups:");
71 for (i = 0; known_groups[i].gr_id != RTNLGRP_NONE; i++)
72 printf(
" %s", known_groups[i].gr_name);
77 nl_cli_connect(sock, NETLINK_ROUTE);
79 for (idx = 1; argc > idx; idx++) {
80 for (i = 0; known_groups[i].gr_id != RTNLGRP_NONE; i++) {
81 if (!strcmp(argv[idx], known_groups[i].gr_name)) {
83 if ((err = nl_socket_add_membership(sock, known_groups[i].gr_id)) < 0) {
91 if (known_groups[i].gr_id == RTNLGRP_NONE)
92 fprintf(stderr,
"Warning: Unknown group: %s\n", argv[idx]);
95 link_cache = nl_cli_link_alloc_cache(sock);
106 retval = select(fd+1, &rfds, NULL, NULL, NULL);