[openib-general] [PATCH] IB/SRP Userspace: srptools/srp_daemon - Fix connect bug and add support for user specified initiator extension
Lakshmanan, Madhu
mlakshmanan at silverstorm.com
Tue Oct 17 23:06:09 PDT 2006
The patch addresses 3 issues:
1. Fixes bug in srp_daemon for the case where if it is invoked with the
'-e' option, it fails to connect to the SRP targets because of a newline
character in the parameter string.
2. Changes the name of the constant 'MAX_TRAGET_CONFIG_STR_STRING' to
'MAX_TARGET_CONFIG_STR_STRING'.
3. Changes the behavior of the '-n' option to srp_daemon. The earlier
behavior printed the initiator extension. The new behavior allows the
user to specify an initiator extension as an argument to the '-n'
option.
Signed-off-by: Madhu Lakshmanan <mlakshmanan at silverstorm.com>
---
--- 1.1-orig/src/userspace/srptools/srp_daemon/srp_daemon.c
2006-10-17 06:32:14.000000000 -0400
+++ 1.1/src/userspace/srptools/srp_daemon/srp_daemon.c 2006-10-17
06:10:12.000000000 -0400
@@ -78,7 +78,7 @@ static char *sysfs_path = "/sys";
static void usage(const char *argv0)
{
- fprintf(stderr, "Usage: %s [-vVceo] [-d <umad device> | -i
<infiniband device> [-p <port_num>]] [-t <timoeout (ms)>] [-r <retries>]
[-R <Rescan time>]\n", argv0);
+ fprintf(stderr, "Usage: %s [-vVceo] [-d <umad device> | -i
<infiniband device> [-p <port_num>]] [-n <initiator_ext>] [-t <timoeout
(ms)>] [-r <retries>] [-R <Rescan time>]\n", argv0);
fprintf(stderr, "-v Verbose\n");
fprintf(stderr, "-V debug Verbose\n");
fprintf(stderr, "-c prints connection
Commands\n");
@@ -91,7 +91,7 @@ static void usage(const char *argv0)
fprintf(stderr, "-R <Rescan time> perform complete Rescan
every <Rescan time> seconds\n");
fprintf(stderr, "-t <timoeout> Timeout for mad response
in milisec \n");
fprintf(stderr, "-r <retries> number of send Retries
for each mad\n");
- fprintf(stderr, "-n New print - prints also
initiator extention\n");
+ fprintf(stderr, "-n <initiator_ext> New: use initiator
extension\n");
fprintf(stderr, "\nExample: srp_daemon -e -i mthca0 -p 1 -R
60\n");
}
@@ -114,7 +114,7 @@ void pr_cmd(char *target_str, int not_co
int ret;
if (config->cmd)
- printf("%s", target_str);
+ printf("%s\n", target_str);
if (config->execute && not_connected) {
int fd = open(config->add_target_file, O_WRONLY);
@@ -122,6 +122,7 @@ void pr_cmd(char *target_str, int not_co
pr_err("unable to open %s, maybe ib_srp is not
loaded\n", config->add_target_file);
return;
}
+ pr_debug("Add target str: %s\n", target_str);
ret = write(fd, target_str, strlen(target_str));
pr_debug("Adding target returned %d\n", ret);
close(fd);
@@ -174,8 +175,8 @@ static void add_non_exist_traget(char *i
char *subdir_name_ptr;
int prefix_len;
uint8_t dgid_val[16];
- const int MAX_TRAGET_CONFIG_STR_STRING = 255;
- char target_config_str[MAX_TRAGET_CONFIG_STR_STRING];
+ const int MAX_TARGET_CONFIG_STR_STRING = 255;
+ char target_config_str[MAX_TARGET_CONFIG_STR_STRING];
int len, len_left;
int not_connected = 1;
@@ -190,8 +191,7 @@ static void add_non_exist_traget(char *i
prefix_len = strlen(scsi_host_dir);
subdir_name_ptr = scsi_host_dir + prefix_len;
- subdir = (void *) 1; /* Dummy value to enter the loop */
- while (subdir) {
+ do {
subdir = readdir(dir);
if (!subdir)
@@ -237,9 +237,9 @@ static void add_non_exist_traget(char *i
return;
- }
+ } while (subdir);
- len = snprintf(target_config_str, MAX_TRAGET_CONFIG_STR_STRING,
"id_ext=%s,"
+ len = snprintf(target_config_str, MAX_TARGET_CONFIG_STR_STRING,
"id_ext=%s,"
"ioc_guid=%016llx,"
"dgid=%016llx%016llx,"
"pkey=ffff,"
@@ -249,41 +249,40 @@ static void add_non_exist_traget(char *i
(unsigned long long) subnet_prefix,
(unsigned long long) h_guid,
(unsigned long long) h_service_id);
- if (len >= MAX_TRAGET_CONFIG_STR_STRING) {
+ if (len >= MAX_TARGET_CONFIG_STR_STRING) {
pr_err("Target conifg string is too long, ignoring
target\n");
closedir(dir);
return;
}
if (ioc_prof.io_class != htons(SRP_REV16A_IB_IO_CLASS)) {
- len_left = MAX_TRAGET_CONFIG_STR_STRING - len;
+ len_left = MAX_TARGET_CONFIG_STR_STRING - len;
len += snprintf(target_config_str+len,
- MAX_TRAGET_CONFIG_STR_STRING - len,
+ MAX_TARGET_CONFIG_STR_STRING - len,
",io_class=%04hx",
ntohs(ioc_prof.io_class));
- if (len >= MAX_TRAGET_CONFIG_STR_STRING) {
+ if (len >= MAX_TARGET_CONFIG_STR_STRING) {
pr_err("Target conifg string is too long,
ignoring target\n");
closedir(dir);
return;
}
}
- if (config->print_initiator_ext) {
- len_left = MAX_TRAGET_CONFIG_STR_STRING - len;
+ if (config->initiator_ext) {
+ len_left = MAX_TARGET_CONFIG_STR_STRING - len;
len += snprintf(target_config_str+len,
- MAX_TRAGET_CONFIG_STR_STRING - len,
+ MAX_TARGET_CONFIG_STR_STRING - len,
",initiator_ext=%016llx",
- (unsigned long long) ntohll(h_guid));
+ (unsigned long long)
config->initiator_ext);
- if (len >= MAX_TRAGET_CONFIG_STR_STRING) {
+ if (len >= MAX_TARGET_CONFIG_STR_STRING) {
pr_err("Target conifg string is too long,
ignoring target\n");
closedir(dir);
return;
}
}
- target_config_str[len] = '\n';
- target_config_str[len+1] = '\0';
+ target_config_str[len] = '\0';
pr_cmd(target_config_str, not_connected);
@@ -860,10 +859,6 @@ static void print_config(struct config_t
printf(" Executes add target command : %d\n",
conf->execute);
printf(" Print also connected targets : %d\n",
conf->all);
printf(" Report current tragets and stop : %d\n",
conf->once);
- if (conf->print_initiator_ext)
- printf(" Print initiator_ext\n");
- else
- printf(" Do not print initiator_ext\n");
if (conf->recalc_time)
printf(" Performs full target rescan every %d
seconds\n", conf->recalc_time);
else
@@ -892,12 +887,12 @@ static int get_config(struct config_t *c
conf->mad_retries = 3;
conf->recalc_time = 0;
conf->add_target_file = NULL;
- conf->print_initiator_ext = 0;
+ conf->initiator_ext = 0;
while (1) {
int c;
- c = getopt(argc, argv, "caveod:i:p:t:r:R:Vhn");
+ c = getopt(argc, argv, "caveod:i:n:p:t:r:R:Vh");
if (c == -1)
break;
@@ -940,7 +935,8 @@ static int get_config(struct config_t *c
++conf->debug_verbose;
break;
case 'n':
- ++conf->print_initiator_ext;
+ conf->initiator_ext = (uint64_t)
+ strtoull(optarg, NULL,
16);
break;
case 't':
conf->timeout = atoi(optarg);
--- 1.1-orig/src/userspace/srptools/srp_daemon/srp_daemon.h
2006-10-17 06:32:14.000000000 -0400
+++ 1.1/src/userspace/srptools/srp_daemon/srp_daemon.h 2006-10-13
01:39:50.000000000 -0400
@@ -288,7 +288,7 @@ struct config_t {
int debug_verbose;
int timeout;
int recalc_time;
- int print_initiator_ext;
+ uint64_t initiator_ext;
};
extern struct config_t *config;
More information about the general
mailing list