On Thu, Sep 2, 2010 at 1:33 PM, Hal Rosenstock <[email protected]> wrote: > On Thu, Sep 2, 2010 at 3:37 AM, Eli Dorfman (Voltaire) > <[email protected]> wrote: >> >> Search for the pattern '[0-9]*x[SDQ]DR' >> Validate that width value is valid. > > If this is done (to ibsim), is the previous patch for ibnetdiscover -f > still needed ?
I assume that it is redundant unless user names its devices with same pattern "[0-9]*x[SDQ]DR". I can give priority to the 's=' and 'w=' options and skip parsing of the above pattern. Eli > > -- Hal > >> Signed-off-by: Eli Dorfman <[email protected]> >> --- >> ibsim/sim_net.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 48 insertions(+), 0 deletions(-) >> >> diff --git a/ibsim/sim_net.c b/ibsim/sim_net.c >> index 13c3b8c..278c065 100644 >> --- a/ibsim/sim_net.c >> +++ b/ibsim/sim_net.c >> @@ -611,6 +611,7 @@ static int parse_port(char *line, Node * node, int type, >> int maxports) >> int portnum, isalias = 0; >> Port *port; >> char *s; >> + char *p; >> >> if (line[0] == '@') { >> isalias = 1; >> @@ -671,6 +672,7 @@ static int parse_port(char *line, Node * node, int type, >> int maxports) >> } >> parse_opt: >> line = s; >> + p = s; >> while (s && (s = strchr(s + 1, '='))) { >> char *opt = s; >> while (opt && !isalpha(*opt)) >> @@ -685,6 +687,52 @@ static int parse_port(char *line, Node * node, int >> type, int maxports) >> IBWARN("cannot parse lid, lmc"); >> return -1; >> } >> + >> + /* parse width speed from '[0-9]*x[SDQ]DR' pattern */ >> + /* also checking for valid width value */ >> + char wstr[3]; >> + char sstr[3]; >> + s = p; >> + while (s && (s = strchr(s + 1, 'x'))) { >> + int width; >> + p = s - 1; >> + while (p && !isdigit(*p)) >> + p--; >> + width = atoi(p); >> + switch (width) { >> + case 1: strcpy(wstr, "1"); >> + break; >> + case 4: strcpy(wstr, "2"); >> + break; >> + case 8: strcpy(wstr, "4"); >> + break; >> + case 12: strcpy(wstr, "8"); >> + break; >> + default: wstr[0] = sstr[0] = 0; >> + continue; >> + } >> + p = p + 2; >> + if (!strncmp("SDR", p, 3)) >> + strcpy(sstr, "1"); >> + else if (!strncmp("DDR", p, 3)) >> + strcpy(sstr, "2"); >> + else if (!strncmp("QDR", p, 3)) >> + strcpy(sstr, "4"); >> + else { >> + wstr[0] = sstr[0] = 0; >> + continue; >> + } >> + } >> + >> + if (parse_port_opt(port, "w", wstr) < 0) { >> + IBWARN("bad port option"); >> + return -1; >> + } >> + >> + if (parse_port_opt(port, "s", sstr) < 0) { >> + IBWARN("bad port option"); >> + return -1; >> + } >> return 1; >> } >> >> -- >> 1.7.2.1 >> >> -- >> 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 >> >
