X-Git-Url: http://git.onelab.eu/?p=iproute2.git;a=blobdiff_plain;f=ip%2Fipmonitor.c;fp=ip%2Fipmonitor.c;h=0000000000000000000000000000000000000000;hp=50b63279144d1340fa67d1adc96c307667d2d9a8;hb=3331a68859fd71047bb1f309048960b48eab2d83;hpb=2bd4a72f2100be7ad7d9518cb1d49bb2a5b71994 diff --git a/ip/ipmonitor.c b/ip/ipmonitor.c deleted file mode 100644 index 50b6327..0000000 --- a/ip/ipmonitor.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * ipmonitor.c "ip monitor". - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Authors: Alexey Kuznetsov, - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "ip_common.h" - -static void usage(void) __attribute__((noreturn)); - -static void usage(void) -{ - fprintf(stderr, "Usage: ip monitor [ all | LISTofOBJECTS ]\n"); - exit(-1); -} - - -int accept_msg(const struct sockaddr_nl *who, - struct nlmsghdr *n, void *arg) -{ - 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; - } - if (n->nlmsg_type == RTM_NEWLINK || n->nlmsg_type == RTM_DELLINK) { - ll_remember_index(who, n, NULL); - print_linkinfo(who, n, arg); - return 0; - } - if (n->nlmsg_type == RTM_NEWADDR || n->nlmsg_type == RTM_DELADDR) { - print_addrinfo(who, n, arg); - return 0; - } - if (n->nlmsg_type == RTM_NEWNEIGH || n->nlmsg_type == RTM_DELNEIGH) { - print_neigh(who, n, arg); - return 0; - } - if (n->nlmsg_type == RTM_NEWPREFIX) { - print_prefix(who, n, arg); - return 0; - } - if (n->nlmsg_type == 15) { - char *tstr; - time_t secs = ((__u32*)NLMSG_DATA(n))[0]; - long usecs = ((__u32*)NLMSG_DATA(n))[1]; - tstr = asctime(localtime(&secs)); - tstr[strlen(tstr)-1] = 0; - fprintf(fp, "Timestamp: %s %lu us\n", tstr, usecs); - return 0; - } - if (n->nlmsg_type == RTM_NEWQDISC || - n->nlmsg_type == RTM_DELQDISC || - n->nlmsg_type == RTM_NEWTCLASS || - n->nlmsg_type == RTM_DELTCLASS || - n->nlmsg_type == RTM_NEWTFILTER || - n->nlmsg_type == RTM_DELTFILTER) - return 0; - if (n->nlmsg_type != NLMSG_ERROR && n->nlmsg_type != NLMSG_NOOP && - n->nlmsg_type != NLMSG_DONE) { - fprintf(fp, "Unknown message: %08x %08x %08x\n", - n->nlmsg_len, n->nlmsg_type, n->nlmsg_flags); - } - return 0; -} - -int do_ipmonitor(int argc, char **argv) -{ - char *file = NULL; - unsigned groups = ~RTMGRP_TC; - int llink=0; - int laddr=0; - int lroute=0; - int lprefix=0; - - rtnl_close(&rth); - ipaddr_reset_filter(1); - iproute_reset_filter(); - ipneigh_reset_filter(); - - while (argc > 0) { - if (matches(*argv, "file") == 0) { - NEXT_ARG(); - file = *argv; - } else if (matches(*argv, "link") == 0) { - llink=1; - groups = 0; - } else if (matches(*argv, "address") == 0) { - laddr=1; - groups = 0; - } else if (matches(*argv, "route") == 0) { - lroute=1; - groups = 0; - } else if (matches(*argv, "prefix") == 0) { - lprefix=1; - groups = 0; - } else if (strcmp(*argv, "all") == 0) { - groups = ~RTMGRP_TC; - } else if (matches(*argv, "help") == 0) { - usage(); - } else { - fprintf(stderr, "Argument \"%s\" is unknown, try \"ip monitor help\".\n", *argv); - exit(-1); - } - argc--; argv++; - } - - if (llink) - groups |= RTMGRP_LINK; - if (laddr) { - if (!preferred_family || preferred_family == AF_INET) - groups |= RTMGRP_IPV4_IFADDR; - if (!preferred_family || preferred_family == AF_INET6) - groups |= RTMGRP_IPV6_IFADDR; - } - if (lroute) { - if (!preferred_family || preferred_family == AF_INET) - groups |= RTMGRP_IPV4_ROUTE; - if (!preferred_family || preferred_family == AF_INET6) - groups |= RTMGRP_IPV6_ROUTE; - } - if (lprefix) { - if (!preferred_family || preferred_family == AF_INET6) - groups |= RTMGRP_IPV6_PREFIX; - } - - if (file) { - FILE *fp; - fp = fopen(file, "r"); - if (fp == NULL) { - perror("Cannot fopen"); - exit(-1); - } - 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, stdout) < 0) - exit(2); - - return 0; -}