X-Git-Url: http://git.onelab.eu/?p=iproute2.git;a=blobdiff_plain;f=ip%2Frtmon.c;fp=ip%2Frtmon.c;h=0000000000000000000000000000000000000000;hp=5ce7731784d8f084efe163825ac1043e5eea5540;hb=3331a68859fd71047bb1f309048960b48eab2d83;hpb=2bd4a72f2100be7ad7d9518cb1d49bb2a5b71994 diff --git a/ip/rtmon.c b/ip/rtmon.c deleted file mode 100644 index 5ce7731..0000000 --- a/ip/rtmon.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * rtmon.c RTnetlink listener. - * - * 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 "SNAPSHOT.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 timeval tv; - - n1->nlmsg_type = 15; - 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); -} - -static int dump_msg(const struct sockaddr_nl *who, struct nlmsghdr *n, - void *arg) -{ - FILE *fp = (FILE*)arg; - if (!init_phase) - write_stamp(fp); - fwrite((void*)n, 1, NLMSG_ALIGN(n->nlmsg_len), fp); - fflush(fp); - return 0; -} - -void usage(void) -{ - fprintf(stderr, "Usage: rtmon file FILE [ all | LISTofOBJECTS]\n"); - fprintf(stderr, "LISTofOBJECTS := [ link ] [ address ] [ route ]\n"); - exit(-1); -} - -int -main(int argc, char **argv) -{ - FILE *fp; - struct rtnl_handle rth; - int family = AF_UNSPEC; - unsigned groups = ~0U; - int llink = 0; - int laddr = 0; - int lroute = 0; - char *file = NULL; - - while (argc > 1) { - if (matches(argv[1], "-family") == 0) { - argc--; - argv++; - if (argc <= 1) - usage(); - if (strcmp(argv[1], "inet") == 0) - family = AF_INET; - else if (strcmp(argv[1], "inet6") == 0) - family = AF_INET6; - else if (strcmp(argv[1], "link") == 0) - family = AF_INET6; - else if (strcmp(argv[1], "help") == 0) - usage(); - else { - fprintf(stderr, "Protocol ID \"%s\" is unknown, try \"rtmon help\".\n", argv[1]); - exit(-1); - } - } else if (strcmp(argv[1], "-4") == 0) { - family = AF_INET; - } else if (strcmp(argv[1], "-6") == 0) { - family = AF_INET6; - } else if (strcmp(argv[1], "-0") == 0) { - family = AF_PACKET; - } else if (matches(argv[1], "-Version") == 0) { - printf("rtmon utility, iproute2-ss%s\n", SNAPSHOT); - exit(0); - } else if (matches(argv[1], "file") == 0) { - argc--; - argv++; - if (argc <= 1) - usage(); - file = argv[1]; - } else if (matches(argv[1], "link") == 0) { - llink=1; - groups = 0; - } else if (matches(argv[1], "address") == 0) { - laddr=1; - groups = 0; - } else if (matches(argv[1], "route") == 0) { - lroute=1; - groups = 0; - } else if (strcmp(argv[1], "all") == 0) { - groups = ~0U; - } else if (matches(argv[1], "help") == 0) { - usage(); - } else { - fprintf(stderr, "Argument \"%s\" is unknown, try \"rtmon help\".\n", argv[1]); - exit(-1); - } - argc--; argv++; - } - - if (file == NULL) { - fprintf(stderr, "Not enough information: argument \"file\" is required\n"); - exit(-1); - } - if (llink) - groups |= RTMGRP_LINK; - if (laddr) { - if (!family || family == AF_INET) - groups |= RTMGRP_IPV4_IFADDR; - if (!family || family == AF_INET6) - groups |= RTMGRP_IPV6_IFADDR; - } - if (lroute) { - if (!family || family == AF_INET) - groups |= RTMGRP_IPV4_ROUTE; - if (!family || family == AF_INET6) - groups |= RTMGRP_IPV6_ROUTE; - } - - fp = fopen(file, "w"); - if (fp == NULL) { - perror("Cannot fopen"); - exit(-1); - } - - if (rtnl_open(&rth, groups) < 0) - exit(1); - - if (rtnl_wilddump_request(&rth, AF_UNSPEC, RTM_GETLINK) < 0) { - perror("Cannot send dump request"); - exit(1); - } - - write_stamp(fp); - - if (rtnl_dump_filter(&rth, dump_msg, fp, NULL, NULL) < 0) { - fprintf(stderr, "Dump terminated\n"); - return 1; - } - - init_phase = 0; - - if (rtnl_listen(&rth, dump_msg, (void*)fp) < 0) - exit(2); - - exit(0); -}