void print_unit(Output& out, const Unit* unit) { out.fmtln("# {} starts here", unit->filepath()->data()); out.nl(); print_unit_metadata(out, unit); for (auto* func : unit->funcs()) print_func(out, func); for (auto& cls : unit->preclasses()) print_cls(out, cls.get()); out.fmtln("# {} ends here", unit->filepath()->data()); }
int main(int argc, char *argv[]) { struct nl_cache *link_cache; int dev = 0; params.dp_fd = stdout; sock = nlt_alloc_socket(); nlt_connect(sock, NETLINK_ROUTE); link_cache = nlt_alloc_link_cache(sock); cls = nlt_alloc_cls(); for (;;) { int c, optidx = 0; enum { ARG_PROTO = 257, ARG_PRIO = 258, ARG_ID, }; static struct option long_opts[] = { { "format", 1, 0, 'f' }, { "help", 0, 0, 'h' }, { "version", 0, 0, 'v' }, { "dev", 1, 0, 'd' }, { "parent", 1, 0, 'p' }, { "proto", 1, 0, ARG_PROTO }, { "prio", 1, 0, ARG_PRIO }, { "id", 1, 0, ARG_ID }, { 0, 0, 0, 0 } }; c = getopt_long(argc, argv, "+f:qhva:d:", long_opts, &optidx); if (c == -1) break; switch (c) { case '?': exit(NLE_INVAL); case 'f': params.dp_type = nlt_parse_dumptype(optarg); break; case 'h': print_usage(); break; case 'v': nlt_print_version(); break; case 'd': dev = 1; parse_dev(cls, link_cache, optarg); break; case 'p': parse_parent(cls, optarg); break; case ARG_PRIO: parse_prio(cls, optarg); break; case ARG_ID: parse_handle(cls, optarg); break; case ARG_PROTO: parse_proto(cls, optarg); break; } } if (!dev) nl_cache_foreach(link_cache, print_cls, NULL); else print_cls(NULL, NULL); return 0; }