Checkign in new iproute2
[iproute2.git] / ip / ipmonitor.c
index cdaeb6f..df0fd91 100644 (file)
@@ -38,6 +38,9 @@ int accept_msg(const struct sockaddr_nl *who,
 {
        FILE *fp = (FILE*)arg;
 
+       if (timestamp)
+               print_timestamp(fp);
+
        if (n->nlmsg_type == RTM_NEWROUTE || n->nlmsg_type == RTM_DELROUTE) {
                print_route(who, n, arg);
                return 0;
@@ -51,6 +54,10 @@ int accept_msg(const struct sockaddr_nl *who,
                print_addrinfo(who, n, arg);
                return 0;
        }
+       if (n->nlmsg_type == RTM_NEWADDRLABEL || n->nlmsg_type == RTM_DELADDRLABEL) {
+               print_addrlabel(who, n, arg);
+               return 0;
+       }
        if (n->nlmsg_type == RTM_NEWNEIGH || n->nlmsg_type == RTM_DELNEIGH) {
                print_neigh(who, n, arg);
                return 0;
@@ -59,6 +66,10 @@ int accept_msg(const struct sockaddr_nl *who,
                print_prefix(who, n, arg);
                return 0;
        }
+       if (n->nlmsg_type == RTM_NEWRULE || n->nlmsg_type == RTM_DELRULE) {
+               print_rule(who, n, arg);
+               return 0;
+       }
        if (n->nlmsg_type == 15) {
                char *tstr;
                time_t secs = ((__u32*)NLMSG_DATA(n))[0];
@@ -85,7 +96,6 @@ int accept_msg(const struct sockaddr_nl *who,
 
 int do_ipmonitor(int argc, char **argv)
 {
-       struct rtnl_handle rth;
        char *file = NULL;
        unsigned groups = ~RTMGRP_TC;
        int llink=0;
@@ -93,6 +103,7 @@ int do_ipmonitor(int argc, char **argv)
        int lroute=0;
        int lprefix=0;
 
+       rtnl_close(&rth);
        ipaddr_reset_filter(1);
        iproute_reset_filter();
        ipneigh_reset_filter();
@@ -125,22 +136,22 @@ int do_ipmonitor(int argc, char **argv)
        }
 
        if (llink)
-               groups |= RTMGRP_LINK;
+               groups |= nl_mgrp(RTNLGRP_LINK);
        if (laddr) {
                if (!preferred_family || preferred_family == AF_INET)
-                       groups |= RTMGRP_IPV4_IFADDR;
+                       groups |= nl_mgrp(RTNLGRP_IPV4_IFADDR);
                if (!preferred_family || preferred_family == AF_INET6)
-                       groups |= RTMGRP_IPV6_IFADDR;
+                       groups |= nl_mgrp(RTNLGRP_IPV6_IFADDR);
        }
        if (lroute) {
                if (!preferred_family || preferred_family == AF_INET)
-                       groups |= RTMGRP_IPV4_ROUTE;
+                       groups |= nl_mgrp(RTNLGRP_IPV4_ROUTE);
                if (!preferred_family || preferred_family == AF_INET6)
-                       groups |= RTMGRP_IPV6_ROUTE;
+                       groups |= nl_mgrp(RTNLGRP_IPV6_ROUTE);
        }
        if (lprefix) {
                if (!preferred_family || preferred_family == AF_INET6)
-                       groups |= RTMGRP_IPV6_PREFIX;
+                       groups |= nl_mgrp(RTNLGRP_IPV6_PREFIX);
        }
 
        if (file) {
@@ -150,16 +161,15 @@ int do_ipmonitor(int argc, char **argv)
                        perror("Cannot fopen");
                        exit(-1);
                }
-               return rtnl_from_file(fp, accept_msg, (void*)stdout);
+               return rtnl_from_file(fp, accept_msg, stdout);
        }
 
        if (rtnl_open(&rth, groups) < 0)
                exit(1);
-
        ll_init_map(&rth);
 
-       if (rtnl_listen(&rth, accept_msg, (void*)stdout) < 0)
+       if (rtnl_listen(&rth, accept_msg, stdout) < 0)
                exit(2);
 
-       exit(0);
+       return 0;
 }