nl-link-list.c revision 10cf5a586c149fdb7e2639000dbfae5e6f8522a5
138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger/* 238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * src/nl-link-dump.c Dump link attributes 338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * 438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * This library is free software; you can redistribute it and/or 538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * modify it under the terms of the GNU Lesser General Public 638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * License as published by the Free Software Foundation version 2.1 738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * of the License. 838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * 938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch> 1038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger */ 1138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 1238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger#if 0 1338cd311adef818a891a0d9fa778969419fe55141Stephen Hemmingerstatic void print_usage(void) 1438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger{ 1538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger printf( 1638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger "Usage: nl-link-dump <mode> [<filter>]\n" 1738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " mode := { brief | detailed | stats | xml }\n" 1838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " filter := [dev DEV] [mtu MTU] [txqlen TXQLEN] [weight WEIGHT] [link LINK]\n" 1938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " [master MASTER] [qdisc QDISC] [addr ADDR] [broadcast BRD]\n" 2038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " [{ up | down }] [{ arp | noarp }] [{ promisc | nopromisc }]\n" 2138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " [{ dynamic | nodynamic }] [{ multicast | nomulticast }]\n" 2238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " [{ trailers | notrailers }] [{ allmulticast | noallmulticast }]\n"); 2338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger exit(1); 2438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger} 2538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger#endif 2638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 2738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger#include "link-utils.h" 2838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 2938cd311adef818a891a0d9fa778969419fe55141Stephen Hemmingerstatic void print_usage(void) 3038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger{ 3138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger printf( 3238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger "Usage: nl-link-list [OPTION]... [Link]\n" 3338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger "\n" 3438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger "Options\n" 3538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " -f, --format=TYPE Output format { brief | details | stats }\n" 3638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " -h, --help Show this help\n" 3738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " -v, --version Show versioning information\n" 3838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger "\n" 3938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger "Link Options\n" 4038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " -n, --name=NAME link name\n" 4138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " -i, --index interface index\n" 4238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " --mtu=NUM MTU value\n" 4338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " --txqlen=NUM TX queue length\n" 4438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger " --weight=NUM weight\n" 4538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger ); 4638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger exit(0); 4738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger} 4838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 4938cd311adef818a891a0d9fa778969419fe55141Stephen Hemmingerint main(int argc, char *argv[]) 5038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger{ 5138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger struct nl_sock *sock; 5238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger struct nl_cache *link_cache; 53e2780880761df1ab1e8249653e9a18d19d66ae81Stephen Hemminger struct rtnl_link *link; 54e2780880761df1ab1e8249653e9a18d19d66ae81Stephen Hemminger struct nl_dump_params params = { 5538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger .dp_type = NL_DUMP_ONELINE, 5638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger .dp_fd = stdout, 5738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger }; 5838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 5938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger sock = nlt_alloc_socket(); 6038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger nlt_connect(sock, NETLINK_ROUTE); 6138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger link_cache = nlt_alloc_link_cache(sock); 6238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger link = nlt_alloc_link(); 6338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 6438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger for (;;) { 6538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger int c, optidx = 0; 6638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger enum { 6738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger ARG_FAMILY = 257, 6838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger ARG_MTU = 258, 6938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger ARG_TXQLEN, 7038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger ARG_WEIGHT, 7138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger }; 7238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger static struct option long_opts[] = { 7338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "format", 1, 0, 'f' }, 7438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "help", 0, 0, 'h' }, 7538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "version", 0, 0, 'v' }, 7638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "name", 1, 0, 'n' }, 7738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "index", 1, 0, 'i' }, 7838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "family", 1, 0, ARG_FAMILY }, 7938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "mtu", 1, 0, ARG_MTU }, 8038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "txqlen", 1, 0, ARG_TXQLEN }, 8138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { "weight", 1, 0, ARG_WEIGHT }, 8238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger { 0, 0, 0, 0 } 8338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger }; 8438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 8538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger c = getopt_long(argc, argv, "f:hvn:i:", long_opts, &optidx); 8638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger if (c == -1) 8738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger break; 8838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 8938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger switch (c) { 9038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case 'f': params.dp_type = nlt_parse_dumptype(optarg); break; 9138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case 'h': print_usage(); break; 9238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case 'v': nlt_print_version(); break; 9338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case 'n': parse_name(link, optarg); break; 9438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case 'i': parse_ifindex(link, optarg); break; 9538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case ARG_FAMILY: parse_family(link, optarg); break; 9638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case ARG_MTU: parse_mtu(link, optarg); break; 9738cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case ARG_TXQLEN: parse_txqlen(link, optarg); break; 9838cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger case ARG_WEIGHT: parse_weight(link, optarg); break; 9938cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger } 10038cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger } 10138cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 10238cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger nl_cache_dump_filter(link_cache, ¶ms, OBJ_CAST(link)); 10338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger 10438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger return 0; 10538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger} 10638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger