int do_netns(int argc, char **argv) { if (argc < 1) return netns_list(0, NULL); if ((matches(*argv, "list") == 0) || (matches(*argv, "show") == 0) || (matches(*argv, "lst") == 0)) return netns_list(argc-1, argv+1); if (matches(*argv, "help") == 0) return usage(); if (matches(*argv, "add") == 0) return netns_add(argc-1, argv+1); if (matches(*argv, "delete") == 0) return netns_delete(argc-1, argv+1); if (matches(*argv, "identify") == 0) return netns_identify(argc-1, argv+1); if (matches(*argv, "pids") == 0) return netns_pids(argc-1, argv+1); if (matches(*argv, "exec") == 0) return netns_exec(argc-1, argv+1); if (matches(*argv, "monitor") == 0) return netns_monitor(argc-1, argv+1); fprintf(stderr, "Command \"%s\" is unknown, try \"ip netns help\".\n", *argv); return EXIT_FAILURE; }
int main(int argc, char **argv) { struct netns_entry *root; int netns_ok, err; arg_register_batch(options, ARRAY_SIZE(options)); register_frontends(); register_handlers(); if ((err = arg_parse(argc, argv))) exit(err); if (!check_caps()) { fprintf(stderr, "Must be run under root (or with enough capabilities).\n"); exit(1); } netns_ok = netns_switch_root(); if (netns_ok > 0) { fprintf(stderr, "Cannot change to the root name space: %s\n", strerror(netns_ok)); exit(1); } global_handler_init(); if ((err = netns_list(&root, netns_ok == 0))) { fprintf(stderr, "ERROR: %s\n", strerror(err)); exit(1); } if ((err = frontend_output(root))) { fprintf(stderr, "Invalid output format specified.\n"); exit(1); } global_handler_cleanup(root); netns_list_free(root); return 0; }