X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Flnet%2Fconfig.c;h=deca792adabf456dcdc0b5fb78cd367165d53170;hp=b18c103ccd2b5277b7c9116e83faf4ab01bbd7cd;hb=4443604ca437aaafe2a0dc700c1ceb8b131ba126;hpb=eea69eda85687af3f5589e34aa3acbe04d776132;ds=sidebyside diff --git a/lnet/lnet/config.c b/lnet/lnet/config.c index b18c103..deca792 100644 --- a/lnet/lnet/config.c +++ b/lnet/lnet/config.c @@ -614,6 +614,37 @@ lnet_parse_hops (char *str, unsigned int *hops) *hops > 0 && *hops < 256); } +#define LNET_PRIORITY_SEPARATOR (':') + +int +lnet_parse_priority(char *str, unsigned int *priority, char **token) +{ + int nob; + char *sep; + int len; + + sep = strchr(str, LNET_PRIORITY_SEPARATOR); + if (sep == NULL) { + *priority = 0; + return 0; + } + len = strlen(sep + 1); + + if ((sscanf((sep+1), "%u%n", priority, &nob) < 1) || (len != nob)) { + /* Update the caller's token pointer so it treats the found + priority as the token to report in the error message. */ + *token += sep - str + 1; + return -1; + } + + CDEBUG(D_NET, "gateway %s, priority %d, nob %d\n", str, *priority, nob); + + /* + * Change priority separator to \0 to be able to parse NID + */ + *sep = '\0'; + return 0; +} int lnet_parse_route (char *str, int *im_a_router) @@ -635,6 +666,7 @@ lnet_parse_route (char *str, int *im_a_router) int myrc = -1; unsigned int hops; int got_hops = 0; + unsigned int priority = 0; CFS_INIT_LIST_HEAD(&gateways); CFS_INIT_LIST_HEAD(&nets); @@ -702,6 +734,11 @@ lnet_parse_route (char *str, int *im_a_router) LNET_NETTYP(net) == LOLND) goto token_error; } else { + rc = lnet_parse_priority(ltb->ltb_text, + &priority, &token); + if (rc < 0) + goto token_error; + nid = libcfs_str2nid(ltb->ltb_text); if (nid == LNET_NID_ANY || LNET_NETTYP(LNET_NIDNET(nid)) == LOLND) @@ -724,14 +761,14 @@ lnet_parse_route (char *str, int *im_a_router) cfs_list_for_each (tmp2, &gateways) { ltb = cfs_list_entry(tmp2, lnet_text_buf_t, ltb_list); nid = libcfs_str2nid(ltb->ltb_text); - LASSERT (nid != LNET_NID_ANY); + LASSERT(nid != LNET_NID_ANY); if (lnet_islocalnid(nid)) { *im_a_router = 1; continue; } - rc = lnet_add_route (net, hops, nid); + rc = lnet_add_route(net, hops, nid, priority); if (rc != 0) { CERROR("Can't create route " "to %s via %s\n",