]> git.proxmox.com Git - mirror_iproute2.git/blobdiff - ip/rtmon.c
ll_map: Add function to remove link cache entry by index
[mirror_iproute2.git] / ip / rtmon.c
index b538a52e630be8527771ce5648c9ed7fc4d8bd3f..7373443f2f8ab18380ac21534d41ba492c217f9c 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <syslog.h>
 #include <fcntl.h>
 #include <sys/socket.h>
 #include <sys/time.h>
-#include <net/if.h>
 #include <netinet/in.h>
 #include <string.h>
 
 #include "utils.h"
 #include "libnetlink.h"
 
-int resolve_hosts = 0;
 static int init_phase = 1;
 
 static void write_stamp(FILE *fp)
 {
        char buf[128];
-       struct nlmsghdr *n1 = (void*)buf;
+       struct nlmsghdr *n1 = (void *)buf;
        struct timeval tv;
 
-       n1->nlmsg_type = 15;
+       n1->nlmsg_type = NLMSG_TSTAMP;
        n1->nlmsg_flags = 0;
        n1->nlmsg_seq = 0;
        n1->nlmsg_pid = 0;
        n1->nlmsg_len = NLMSG_LENGTH(4*2);
        gettimeofday(&tv, NULL);
-       ((__u32*)NLMSG_DATA(n1))[0] = tv.tv_sec;
-       ((__u32*)NLMSG_DATA(n1))[1] = tv.tv_usec;
-       fwrite((void*)n1, 1, NLMSG_ALIGN(n1->nlmsg_len), fp);
+       ((__u32 *)NLMSG_DATA(n1))[0] = tv.tv_sec;
+       ((__u32 *)NLMSG_DATA(n1))[1] = tv.tv_usec;
+       fwrite((void *)n1, 1, NLMSG_ALIGN(n1->nlmsg_len), fp);
 }
 
-static int dump_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
-                   void *arg)
+static int dump_msg(struct rtnl_ctrl_data *ctrl,
+                   struct nlmsghdr *n, void *arg)
 {
-       FILE *fp = (FILE*)arg;
+       FILE *fp = (FILE *)arg;
+
        if (!init_phase)
                write_stamp(fp);
-       fwrite((void*)n, 1, NLMSG_ALIGN(n->nlmsg_len), fp);
+       fwrite((void *)n, 1, NLMSG_ALIGN(n->nlmsg_len), fp);
        fflush(fp);
        return 0;
 }
 
-void usage(void)
+static int dump_msg2(struct nlmsghdr *n, void *arg)
+{
+       return dump_msg(NULL, n, arg);
+}
+
+static void usage(void)
 {
-       fprintf(stderr, "Usage: rtmon file FILE [ all | LISTofOBJECTS]\n");
+       fprintf(stderr, "Usage: rtmon [ OPTIONS ] file FILE [ all | LISTofOBJECTS ]\n");
+       fprintf(stderr, "OPTIONS := { -f[amily] { inet | inet6 | link | help } |\n"
+                       "             -4 | -6 | -0 | -V[ersion] }\n");
        fprintf(stderr, "LISTofOBJECTS := [ link ] [ address ] [ route ]\n");
        exit(-1);
 }
@@ -70,7 +75,7 @@ main(int argc, char **argv)
        FILE *fp;
        struct rtnl_handle rth;
        int family = AF_UNSPEC;
-       unsigned groups = ~0U;
+       unsigned int groups = ~0U;
        int llink = 0;
        int laddr = 0;
        int lroute = 0;
@@ -110,13 +115,13 @@ main(int argc, char **argv)
                                usage();
                        file = argv[1];
                } else if (matches(argv[1], "link") == 0) {
-                       llink=1;
+                       llink = 1;
                        groups = 0;
                } else if (matches(argv[1], "address") == 0) {
-                       laddr=1;
+                       laddr = 1;
                        groups = 0;
                } else if (matches(argv[1], "route") == 0) {
-                       lroute=1;
+                       lroute = 1;
                        groups = 0;
                } else if (strcmp(argv[1], "all") == 0) {
                        groups = ~0U;
@@ -157,21 +162,21 @@ main(int argc, char **argv)
        if (rtnl_open(&rth, groups) < 0)
                exit(1);
 
-       if (rtnl_wilddump_request(&rth, AF_UNSPEC, RTM_GETLINK) < 0) {
+       if (rtnl_linkdump_req(&rth, AF_UNSPEC) < 0) {
                perror("Cannot send dump request");
                exit(1);
        }
 
        write_stamp(fp);
 
-       if (rtnl_dump_filter(&rth, dump_msg, fp, NULL, NULL) < 0) {
+       if (rtnl_dump_filter(&rth, dump_msg2, fp) < 0) {
                fprintf(stderr, "Dump terminated\n");
                return 1;
        }
 
        init_phase = 0;
 
-       if (rtnl_listen(&rth, dump_msg, (void*)fp) < 0)
+       if (rtnl_listen(&rth, dump_msg, (void *)fp) < 0)
                exit(2);
 
        exit(0);