Hey Sasha,
I was looking into adding a new command to ibsim, but since the original
cmd-parsing function only checks for the first char of the inputted
command, it limits the ability to add a reasonable-sounding new command
name. The patch changes the function to check the entire command name.
Al
--
Albert Chu
[EMAIL PROTECTED]
925-422-5311
Computer Scientist
High Performance Systems Division
Lawrence Livermore National Laboratory
>From 5871b81d1ebdf86f9a9fcf79c8d8a558fd2600b1 Mon Sep 17 00:00:00 2001
From: Albert Chu <[EMAIL PROTECTED]>
Date: Wed, 13 Aug 2008 13:53:14 -0700
Subject: [PATCH] parse sim cmds via full name
Signed-off-by: Albert Chu <[EMAIL PROTECTED]>
---
ibsim/sim_cmd.c | 105 +++++++++++++++++++++----------------------------------
1 files changed, 40 insertions(+), 65 deletions(-)
diff --git a/ibsim/sim_cmd.c b/ibsim/sim_cmd.c
index 1f6ba88..a35d0f4 100644
--- a/ibsim/sim_cmd.c
+++ b/ibsim/sim_cmd.c
@@ -757,91 +757,66 @@ int netstarted = 0;
int do_cmd(char *buf, FILE *f)
{
+ char cmdbuf[4096];
char *line;
int r = 0;
+ int i;
for (line = buf; *line && isspace(*line); line++) ;
- switch (*line) {
- case '!':
+ /* special cases */
+ if (*line == '!')
r = sim_cmd_file(f, line);
- break;
- case 'd':
- case 'D':
+ else if (*line == '#' || *line == '\n' || *line == '\0')
+ goto out;
+
+ memset(cmdbuf, '\0', sizeof(cmdbuf));
+ for (i = 0;
+ i < 4095 && line[i] && (isalpha(line[i]) || line[i] == '?');
+ i++)
+ cmdbuf[i] = line[i];
+
+ if (!strcasecmp(cmdbuf, "Dump"))
r = dump_net(f, line);
- break;
- case 'r':
- case 'R':
+ else if (!strcasecmp(cmdbuf, "Route"))
r = dump_route(f, line);
- break;
- case 'l':
- case 'L':
+ else if (!strcasecmp(cmdbuf, "Link"))
r = do_link(f, line);
- break;
- case 'B':
- case 'b':
- r = do_change_baselid(f, line);
- break;
- case 'u':
- case 'U':
+ else if (!strcasecmp(cmdbuf, "Unlink"))
r = do_unlink(f, line, 0);
- break;
- case 'G':
- case 'g':
+ else if (!strcasecmp(cmdbuf, "Clear"))
+ r = do_unlink(f, line, 1);
+ else if (!strcasecmp(cmdbuf, "Guid"))
r = do_set_guid(f, line);
- break;
- case 'e':
- case 'E':
+ else if (!strcasecmp(cmdbuf, "Error"))
r = do_seterror(f, line);
- break;
- case 'c':
- case 'C':
- r = do_unlink(f, line, 1);
- break;
- case 'q':
- case 'Q':
- fprintf(f, "Exiting network simulator.\n");
- free_core();
- exit(0);
- break;
- case 'h':
- case 'H':
- case '?':
- r = dump_help(f);
- break;
- case 'V':
- case 'v':
- r = change_verbose(f, line);
- break;
- case 'S':
- case 's':
+ else if (!strcasecmp(cmdbuf, "Baselid"))
+ r = do_change_baselid(f, line);
+ else if (!strcasecmp(cmdbuf, "Start")) {
if (!netstarted) {
DEBUG("starting...");
netstarted = 1;
return 0;
}
- break;
- case 'W':
- case 'w':
+ }
+ else if (!strcasecmp(cmdbuf, "Verbose"))
+ r = change_verbose(f, line);
+ else if (!strcasecmp(cmdbuf, "Wait"))
r = do_wait(f, line);
- break;
- case 'A':
- case 'a':
+ else if (!strcasecmp(cmdbuf, "Attached"))
r = list_connections(f);
- break;
- case 'X':
- case 'x':
+ else if (!strcasecmp(cmdbuf, "X"))
r = do_disconnect_client(f, strtol(line + 2, 0, 0));
- break;
- case '#':
- fprintf(f, line);
- // fall through
- case '\n':
- case 0:
- break;
- default:
- fprintf(f, "op %c unknown - skipped\n", line[0]);
+ else if (!strcasecmp(cmdbuf, "Help")
+ || !strcasecmp(cmdbuf, "?"))
+ r = dump_help(f);
+ else if (!strcasecmp(cmdbuf, "Quit")) {
+ fprintf(f, "Exiting network simulator.\n");
+ free_core();
+ exit(0);
}
-
+ else
+ fprintf(f, "operation %s unknown - skipped\n", cmdbuf);
+out:
return r;
}
--
1.5.4.5
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general