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, &params, OBJ_CAST(link));
10338cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger
10438cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger	return 0;
10538cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger}
10638cd311adef818a891a0d9fa778969419fe55141Stephen Hemminger