* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, 2016, Intel Corporation.
+ * Copyright (c) 2012, 2017, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <stdio.h>
#include <string.h>
#include <libcfs/util/parser.h>
-#include <lnet/lnetctl.h>
+#include <linux/lnet/lnetctl.h>
#include "obdctl.h"
-#include <lustre_ver.h>
+#include <linux/lustre/lustre_ver.h>
+#include <lustre/lustreapi.h>
static int lctl_list_commands(int argc, char **argv);
"usage: which_nid NID [NID...]"},
{"replace_nids", jt_replace_nids, 0,
"replace primary NIDs for a device\n"
- "usage: replace_nids <device> <nid1>[,nid2,nid3]"},
+ "usage: replace_nids <device> <nid1>[,nid2,nid3:nid4,nid5:nid6]"},
{"interface_list", jt_ptl_print_interfaces, 0,
"print network interface entries\n"
"usage: interface_list"},
"usage: net_drop_add <-s | --source NID>\n"
" <-d | --dest NID>\n"
" <<-r | --rate DROP_RATE> |\n"
- " <-i | --interval SECONDS>>\n"
+ " <-i | --interval SECONDS>>\n"
" [<-p | --portal> PORTAL...]\n"
- " [<-m | --message> <PUT|ACK|GET|REPLY>...]\n"},
+ " [<-m | --message> <PUT|ACK|GET|REPLY>...]\n"
+ " [< -e | --health_error]\n"},
{"net_drop_del", jt_ptl_drop_del, 0, "remove LNet drop rule\n"
"usage: net_drop_del <[-a | --all] |\n"
" <-s | --source NID>\n"
{"set_timeout", jt_lcfg_set_timeout, 0,
"usage: conf_param obd_timeout=<secs>\n"},
#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 0, 53, 0)
- {"conf_param", jt_lcfg_mgsparam, 0,"set a permanent config parameter.\n"
+ {"conf_param", jt_lcfg_confparam, 0,
+ "set a permanent config parameter.\n"
"This command must be run on the MGS node\n"
"usage: conf_param [-d] <target.keyword=val>\n"
- " -d Remove the permanent setting."},
+ " -d Delete the permanent setting from the configuration."},
#endif
{"local_param", jt_lcfg_param, 0, "set a temporary, local param\n"
"usage: local_param <target.keyword=val>\n"},
" (Especially useful when using patterns.)\n"
" -R Get parameters recursively from the specified entry.\n"},
{"set_param", jt_lcfg_setparam, 0, "set the Lustre or LNET parameter\n"
- "usage: set_param [-n] [-P] [-d]"
+ "usage: set_param [-n] [-P] [-d] [-F]"
"<param_path1=value1 param_path2=value2 ...>\n"
"Set the value of the Lustre or LNET parameter at the specified path.\n"
" -n Disable printing of the key name when printing values.\n"
" -P Set the parameter permanently, filesystem-wide.\n"
- " -d Remove the permanent setting (only with -P option).\n"},
+ " -d Remove the permanent setting (only with -P option).\n"
+ " -F Read permanent configuration from a YAML file.\n"},
{"list_param", jt_lcfg_listparam, 0,
"list the Lustre or LNET parameter name\n"
"usage: list_param [-F|-R|-D] <param_path1 param_path2 ...>\n"
"list pools and pools members\n"
"usage: pool_list <fsname>[.<poolname>] | <pathname>"},
+#ifdef HAVE_SERVER_SUPPORT
/* Barrier commands */
{"=== Barrier ==", NULL, 0, "barrier management"},
{"barrier_freeze", jt_barrier_freeze, 0,
"usage: barrier_thaw <fsname>"},
{"barrier_stat", jt_barrier_stat, 0,
"query write barrier status on MDTs\n"
- "usage: barrier_stat <fsname>"},
+ "usage: barrier_stat [--state|-s] [--timeout|-t] <fsname>"},
{"barrier_rescan", jt_barrier_rescan, 0,
"rescan the system to filter out inactive MDT(s) for barrier\n"
"usage: barrier_rescan <fsname> [timeout (in seconds)]"},
+ /* Snapshot commands */
+ {"=== Snapshot ==", NULL, 0, "Snapshot management"},
+ {"snapshot_create", jt_snapshot_create, 0,
+ "create the snapshot\n"
+ "usage: snapshot_create [-b | --barrier [on | off]]\n"
+ " [-c | --comment comment]\n"
+ " <-F | --fsname fsname>\n"
+ " [-h | --help] <-n | --name ssname>\n"
+ " [-r | --rsh remote_shell]\n"
+ " [-t | --timeout timeout]"},
+ {"snapshot_destroy", jt_snapshot_destroy, 0,
+ "destroy the snapshot\n"
+ "usage: snapshot_destroy [-f | --force]\n"
+ " <-F | --fsname fsname> [-h | --help]\n"
+ " <-n | --name ssname>\n"
+ " [-r | --rsh remote_shell]"},
+ {"snapshot_modify", jt_snapshot_modify, 0,
+ "modify the snapshot\n"
+ "usage: snapshot_modify [-c | --comment comment]\n"
+ " <-F | --fsname fsname> [-h | --help]\n"
+ " <-n | --name ssname> [-N | --new new_ssname]\n"
+ " [-r | --rsh remote_shell]"},
+ {"snapshot_list", jt_snapshot_list, 0,
+ "query the snapshot(s)\n"
+ "usage: snapshot_list [-d | --detail]\n"
+ " <-F | --fsname fsname> [-h | --help]\n"
+ " [-n | --name ssname] [-r | --rsh remote_shell]"},
+ {"snapshot_mount", jt_snapshot_mount, 0,
+ "mount the snapshot\n"
+ "usage: snapshot_mount <-F | --fsname fsname> [-h | --help]\n"
+ " <-n | --name ssname>\n"
+ " [-r | --rsh remote_shell]"},
+ {"snapshot_umount", jt_snapshot_umount, 0,
+ "umount the snapshot\n"
+ "usage: snapshot_umount <-F | --fsname fsname> [-h | --help]\n"
+ " <-n | --name ssname>\n"
+ " [-r | --rsh remote_shell]"},
+#endif /* HAVE_SERVER_SUPPORT */
/* Nodemap commands */
{"=== Nodemap ===", NULL, 0, "nodemap management"},
{"nodemap_activate", jt_nodemap_activate, 0,
{"nodemap_set_fileset", jt_nodemap_set_fileset, 0,
"set a fileset on a nodemap\n"
"usage: nodemap_set_fileset <fileset>"},
+ {"nodemap_set_sepol", jt_nodemap_set_sepol, 0,
+ "set SELinux policy info on a nodemap\n"
+ "usage: nodemap_set_sepol <SELinux policy info>"},
{"nodemap_test_nid", jt_nodemap_test_nid, 0,
"usage: nodemap_test_nid <nid>"},
{"nodemap_test_id", jt_nodemap_test_id, 0,
"usage: setup <args...>"},
{"cleanup", jt_obd_cleanup, 0, "cleanup previously setup device\n"
"usage: cleanup [force | failover]"},
+ {"clear_conf", jt_lcfg_clear, 0,
+ "drop unused config logs for a device or filesystem\n"
+ "usage: clear_conf <device|fsname>"},
{"fork_lcfg", jt_lcfg_fork, 0,
"copy configuration files for named filesystem with given name\n"
"usage: fork_lcfg <fsname> <newname>"},
"get the version of an object on servers\n"
"usage: getobjversion <fid>\n"
" getobjversion -i <id> -g <group>"},
-
+#ifdef HAVE_SERVER_SUPPORT
/* LFSCK commands */
{"==== LFSCK ====", NULL, 0, "LFSCK"},
{"lfsck_start", jt_lfsck_start, 0, "start LFSCK\n"
"usage: lfsck_query [-M | --device MDT_device] [-h | --help]\n"
" [-t | --type lfsck_type[,lfsck_type...]]\n"
" [-w | --wait]"},
-
+#endif /* HAVE_SERVER_SUPPORT */
{"==== obsolete (DANGEROUS) ====", NULL, 0, "obsolete (DANGEROUS)"},
/* some test scripts still use these */
{"cfg_device", jt_obd_device, 0,
Parser_init("lctl > ", cmdlist);
if (argc > 1) {
+ llapi_set_command_name(argv[1]);
rc = Parser_execarg(argc - 1, argv + 1, cmdlist);
+ llapi_clear_command_name();
} else {
rc = Parser_commands();
}