add new command 'reload' in order to reload net topology file
Signed-off-by: Doron Shoham <[email protected]>
---
ibsim/ibsim.c | 21 ++++++++++++++++++---
ibsim/sim_cmd.c | 6 ++++++
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/ibsim/ibsim.c b/ibsim/ibsim.c
index e720f0d..98be195 100644
--- a/ibsim/ibsim.c
+++ b/ibsim/ibsim.c
@@ -73,6 +73,8 @@ extern int ignoreduplicate;
int ibdebug;
int parsedebug;
int simverb;
+FILE *infile, *outfile;
+char *netfile;
static Client clients[IBSIM_MAX_CLIENTS];
static int simctl = -1;
@@ -82,6 +84,13 @@ static int listen_to_port = IBSIM_DEFAULT_SERVER_PORT;
static int remote_mode = 0;
static char* socket_basename;
+extern int netnodes, netswitches, netports, netaliases;
+extern Node *nodes;
+extern Switch *switches;
+extern Port *ports;
+extern Port **lids;
+extern char (*aliases)[NODEIDLEN + NODEPREFIX + 1]; // aliases map format:
"%...@%s"
+
static size_t make_name(union name_t *name, uint32_t addr, unsigned short port,
const char *fmt, ...)
{
@@ -553,8 +562,15 @@ int sim_cmd_file(FILE * f, char *s)
return 0;
}
-static int sim_init_net(char *netconf, FILE * out)
+int sim_init_net(char *netconf, FILE * out)
{
+ netnodes = netswitches = netports = netaliases = 0;
+ memset(nodes, 0, maxnetnodes*sizeof(*nodes));
+ memset(switches, 0, maxnetswitches*sizeof(*switches));
+ memset(ports, 0, maxnetports*sizeof(*ports));
+ memset(lids, 0, maxlinearcap*sizeof(*lids));
+ memset(aliases, 0, maxnetaliases*sizeof(*aliases));
+
DEBUG("reading %s", netconf);
if (read_netconf(netconf, out) < 0)
return -1;
@@ -716,8 +732,7 @@ int main(int argc, char **argv)
{
extern int alloc_core(void);
extern void free_core(void);
- char *outfname = 0, *netfile;
- FILE *infile, *outfile;
+ char *outfname = 0;
int status;
static char const str_opts[] = "rf:dpvIsN:S:P:L:M:l:Vhu";
diff --git a/ibsim/sim_cmd.c b/ibsim/sim_cmd.c
index 6d3a893..51a407c 100644
--- a/ibsim/sim_cmd.c
+++ b/ibsim/sim_cmd.c
@@ -49,12 +49,15 @@
#define DEBUG if (simverb > 1 || ibdebug) IBWARN
extern void free_core(void);
+extern int sim_init_net(char *, FILE *);
extern Node *nodes;
extern Switch *switches;
extern Port *ports;
extern Port **lids;
extern int netnodes, netports, netswitches;
+extern char *netfile;
+extern FILE *outfile;
#define NAMELEN NODEIDLEN
@@ -822,6 +825,7 @@ static int dump_help(FILE * f)
);
fprintf(f,
"\tBaselid \"nodeid\"[port] <lid> [lmc] : change port's lid
(lmc)\n");
+ fprintf(f, "\tReload : reload net topology file\n");
fprintf(f, "\tVerbose [newlevel] - show/set simulator verbosity\n");
fprintf(f, "\t\t\t0 - silent\n");
fprintf(f, "\t\t\t1 - debug verbose\n");
@@ -907,6 +911,8 @@ int do_cmd(char *buf, FILE *f)
*/
else if (!strncasecmp(line, "ReLink", cmd_len))
r = do_relink(f, line);
+ else if (!strncasecmp(line, "Reload", cmd_len))
+ r = sim_init_net(netfile, outfile);
else if (*line != '\n' && *line != '\0')
fprintf(f, "command \'%s\' unknown - skipped\n", line);
--
1.5.5
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html