/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
*
- * Copyright (c) 2013, 2014, Intel Corporation.
+ * Copyright (c) 2013, 2015, Intel Corporation.
*
* This file is part of Lustre, https://wiki.hpdd.intel.com/
*
#include <errno.h>
#include <getopt.h>
#include <limits.h>
-#include <netdb.h>
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include <linux/types.h>
-#include <libcfs/libcfs.h>
+
#include <libcfs/util/string.h>
#include <libcfs/util/ioctl.h>
+#include <libcfs/user-time.h>
+#include <libcfs/libcfs_debug.h>
#include <lnet/lnetctl.h>
#include <lnet/socklnd.h>
#include <lnet/lnet.h>
unsigned int libcfs_debug;
unsigned int libcfs_printk = D_CANTMASK;
-static int g_net_set;
+static bool g_net_interactive;
+static bool g_net_set;
static __u32 g_net;
#define IOC_BUF_SIZE 8192
return 0;
}
-int g_net_is_set (char *cmd)
+static int g_net_is_set(char *cmd)
{
- if (g_net_set)
- return 1;
+ if (g_net_set)
+ return 1;
- if (cmd != NULL)
- fprintf(stderr,
- "You must run the 'network' command before '%s'.\n",
- cmd);
- return 0;
+ if (cmd != NULL) {
+ char *net;
+
+ if (g_net_interactive)
+ net = "network";
+ else
+ net = "--net";
+
+ fprintf(stderr,
+ "You must run '%s <network>' command before '%s'\n",
+ cmd, net);
+ return 0;
+ }
+
+ return 0;
}
-int g_net_is_compatible (char *cmd, ...)
+static int g_net_is_compatible(char *cmd, ...)
{
- va_list ap;
- int nal;
+ va_list ap;
+ int nal;
- if (!g_net_is_set(cmd))
- return 0;
+ if (!g_net_is_set(cmd))
+ return 0;
- va_start(ap, cmd);
+ va_start(ap, cmd);
- do {
- nal = va_arg (ap, int);
+ do {
+ nal = va_arg(ap, int);
if (nal == LNET_NETTYP(g_net)) {
va_end (ap);
return 1;
"Command %s not compatible with %s NAL\n",
cmd,
libcfs_lnd2str(LNET_NETTYP(g_net)));
+
return 0;
}
int ptl_initialize(int argc, char **argv)
{
+ if (argc > 1)
+ g_net_interactive = true;
+
register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH,
LNET_DEV_MAJOR, LNET_DEV_MINOR);
return 0;
int jt_ptl_network(int argc, char **argv)
{
- struct libcfs_ioctl_data data;
- __u32 net = LNET_NIDNET(LNET_NID_ANY);
- int rc;
+ struct libcfs_ioctl_data data;
+ __u32 net = LNET_NIDNET(LNET_NID_ANY);
+ int rc;
- if (argc < 2) {
- fprintf(stderr, "usage: %s <net>|up|down\n", argv[0]);
- return 0;
- }
-
- if (!strcmp(argv[1], "unconfigure") ||
- !strcmp(argv[1], "down")) {
- LIBCFS_IOC_INIT(data);
- rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_UNCONFIGURE, &data);
+ if (argc != 2) {
+ fprintf(stderr, "usage: %s <net>|up|down\n", argv[0]);
+ return -1;
+ }
- if (rc == 0) {
- printf ("LNET ready to unload\n");
- return 0;
- }
+ if (!strcmp(argv[1], "unconfigure") || !strcmp(argv[1], "down")) {
+ LIBCFS_IOC_INIT(data);
+ rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_UNCONFIGURE, &data);
- if (errno == EBUSY)
- fprintf(stderr, "LNET busy\n");
- else
- fprintf(stderr, "LNET unconfigure error %d: %s\n",
- errno, strerror(errno));
- return -1;
- }
+ if (rc == 0) {
+ printf("LNET ready to unload\n");
+ return 0;
+ }
- if (!strcmp(argv[1], "configure") ||
- !strcmp(argv[1], "up")) {
- LIBCFS_IOC_INIT(data);
- rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_CONFIGURE, &data);
+ if (errno == EBUSY)
+ fprintf(stderr, "LNET busy\n");
+ else
+ fprintf(stderr, "LNET unconfigure error %d: %s\n",
+ errno, strerror(errno));
+ return -1;
+ } else if (!strcmp(argv[1], "configure") || !strcmp(argv[1], "up")) {
+ LIBCFS_IOC_INIT(data);
+ rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_CONFIGURE, &data);
- if (rc == 0) {
- printf ("LNET configured\n");
- return 0;
- }
+ if (rc == 0) {
+ printf("LNET configured\n");
+ return 0;
+ }
- fprintf(stderr, "LNET configure error %d: %s\n",
- errno, strerror(errno));
- return -1;
- }
+ fprintf(stderr, "LNET configure error %d: %s\n",
+ errno, strerror(errno));
+ return -1;
+ }
- net = libcfs_str2net(argv[1]);
- if (net == LNET_NIDNET(LNET_NID_ANY)) {
- fprintf(stderr, "Can't parse net %s\n", argv[1]);
- return -1;
- }
+ net = libcfs_str2net(argv[1]);
+ if (net == LNET_NIDNET(LNET_NID_ANY)) {
+ fprintf(stderr, "Can't parse net %s\n", argv[1]);
+ return -1;
+ }
- if (LNET_NETTYP(net) == CIBLND ||
- LNET_NETTYP(net) == OPENIBLND ||
- LNET_NETTYP(net) == IIBLND ||
- LNET_NETTYP(net) == VIBLND) {
- fprintf(stderr, "Net %s obsoleted\n", libcfs_lnd2str(net));
- return -1;
- }
+ if (LNET_NETTYP(net) == QSWLND || LNET_NETTYP(net) == GMLND ||
+ LNET_NETTYP(net) == PTLLND || LNET_NETTYP(net) == CIBLND ||
+ LNET_NETTYP(net) == OPENIBLND || LNET_NETTYP(net) == IIBLND ||
+ LNET_NETTYP(net) == RALND || LNET_NETTYP(net) == VIBLND ||
+ LNET_NETTYP(net) == MXLND) {
+ fprintf(stderr, "Net %s obsoleted\n", libcfs_lnd2str(net));
+ return -1;
+ }
- g_net_set = 1;
- g_net = net;
- return 0;
+ g_net_set = true;
+ g_net = net;
+ return 0;
}
int
return 0;
}
-int
-jt_ptl_add_peer (int argc, char **argv)
+int jt_ptl_add_peer(int argc, char **argv)
{
- struct libcfs_ioctl_data data;
- lnet_nid_t nid;
- __u32 ip = 0;
- int port = 0;
- int rc;
+ struct libcfs_ioctl_data data;
+ lnet_nid_t nid;
+ __u32 ip = 0;
+ int port = 0;
+ int rc;
if (!g_net_is_compatible(argv[0], SOCKLND, GNILND, 0))
- return -1;
+ return -1;
- if (argc != 4) {
- fprintf (stderr, "usage(tcp,ra,gni): %s nid ipaddr port\n",
- argv[0]);
- return 0;
- }
+ if (argc != 4) {
+ fprintf(stderr, "usage(tcp,gni): %s nid ipaddr port\n",
+ argv[0]);
+ return 0;
+ }
nid = libcfs_str2nid(argv[1]);
if (nid == LNET_NID_ANY) {
{
struct lnet_ioctl_config_data data;
lnet_nid_t gateway_nid;
- unsigned int hops = 1;
+ __u32 hops = LNET_UNDEFINED_HOPS;
unsigned int priority = 0;
char *end;
int rc;
}
if (argc > 2) {
- hops = strtoul(argv[2], &end, 0);
- if (hops == 0 || hops >= 256 || (end != NULL && *end != 0)) {
+ hops = strtol(argv[2], &end, 0);
+ if (hops == 0 || hops >= 256 ||
+ (end != NULL && *end != 0)) {
fprintf(stderr, "Can't parse hopcount \"%s\"\n",
argv[2]);
return -1;
return (1000.0);
}
-int jt_ptl_memhog(int argc, char **argv)
-{
- static int gfp = 0; /* sticky! */
-
- struct libcfs_ioctl_data data;
- int rc;
- int count;
- char *end;
-
- if (argc < 2) {
- fprintf(stderr, "usage: %s <npages> [<GFP flags>]\n", argv[0]);
- return 0;
- }
-
- count = strtol(argv[1], &end, 0);
- if (count < 0 || *end != 0) {
- fprintf(stderr, "Can't parse page count '%s'\n", argv[1]);
- return -1;
- }
-
- if (argc >= 3) {
- rc = strtol(argv[2], &end, 0);
- if (*end != 0) {
- fprintf(stderr, "Can't parse gfp flags '%s'\n", argv[2]);
- return -1;
- }
- gfp = rc;
- }
-
- LIBCFS_IOC_INIT(data);
- data.ioc_count = count;
- data.ioc_flags = gfp;
- rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_MEMHOG, &data);
-
- if (rc != 0) {
- fprintf(stderr, "memhog %d failed: %s\n", count, strerror(errno));
- return -1;
- }
-
- printf("memhog %d OK\n", count);
- return 0;
-}
-
int jt_ptl_testprotocompat(int argc, char **argv)
{
struct libcfs_ioctl_data data;