Whamcloud - gitweb
LU-10391 lustre: introduce class_parse_nid() 89/50089/8
authorMr NeilBrown <neilb@suse.de>
Tue, 10 May 2022 03:29:49 +0000 (13:29 +1000)
committerOleg Drokin <green@whamcloud.com>
Tue, 11 Apr 2023 20:02:51 +0000 (20:02 +0000)
class_parse_nid() and class_parse_nid_quiet() can be used to parse
struct lnet_nid including nids with ipv6 addresses.

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I82b85f183e91b7b639f58afe5b6c4f90a6b8564c
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/50089
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: jsimmons <jsimmons@infradead.org>
Reviewed-by: Frank Sehr <fsehr@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/include/obd_class.h
lustre/obdclass/obd_config.c

index e59bcc4..add1d7c 100644 (file)
@@ -176,6 +176,8 @@ int class_get_next_param(char **params, char *copy);
 int class_match_param(char *buf, const char *key, char **valp);
 int class_parse_nid4(char *buf, lnet_nid_t *nid4, char **endh);
 int class_parse_nid4_quiet(char *buf, lnet_nid_t *nid4, char **endh);
+int class_parse_nid(char *buf, struct lnet_nid *nid, char **endh);
+int class_parse_nid_quiet(char *buf, struct lnet_nid *nid, char **endh);
 int class_parse_net(char *buf, u32 *net, char **endh);
 int class_match_nid(char *buf, char *key, lnet_nid_t nid);
 int class_match_net(char *buf, char *key, u32 net);
index 555176f..779354c 100644 (file)
@@ -421,6 +421,18 @@ static int parse_nid4(char *buf, void *value, int quiet)
        return -EINVAL;
 }
 
+static int parse_nid(char *buf, void *value, int quiet)
+{
+       struct lnet_nid *nid = value;
+
+       if (libcfs_strnid(nid, buf) == 0)
+               return 0;
+
+       if (!quiet)
+               LCONSOLE_ERROR_MSG(0x159, "Can't parse NID '%s'\n", buf);
+       return -EINVAL;
+}
+
 static int parse_net(char *buf, void *value)
 {
        __u32 *net = (__u32 *)value;
@@ -432,6 +444,7 @@ static int parse_net(char *buf, void *value)
 
 enum {
        CLASS_PARSE_NID4 = 1,
+       CLASS_PARSE_NID,
        CLASS_PARSE_NET,
 };
 
@@ -468,6 +481,9 @@ static int class_parse_value(char *buf, int opc, void *value, char **endh,
        case CLASS_PARSE_NID4:
                rc = parse_nid4(buf, value, quiet);
                break;
+       case CLASS_PARSE_NID:
+               rc = parse_nid(buf, value, quiet);
+               break;
        case CLASS_PARSE_NET:
                rc = parse_net(buf, value);
                break;
@@ -492,6 +508,18 @@ int class_parse_nid4_quiet(char *buf, lnet_nid_t *nid4, char **endh)
 }
 EXPORT_SYMBOL(class_parse_nid4_quiet);
 
+int class_parse_nid(char *buf, struct lnet_nid *nid, char **endh)
+{
+       return class_parse_value(buf, CLASS_PARSE_NID, (void *)nid, endh, 0);
+}
+EXPORT_SYMBOL(class_parse_nid);
+
+int class_parse_nid_quiet(char *buf, struct lnet_nid *nid, char **endh)
+{
+       return class_parse_value(buf, CLASS_PARSE_NID, (void *)nid, endh, 1);
+}
+EXPORT_SYMBOL(class_parse_nid_quiet);
+
 int class_parse_net(char *buf, __u32 *net, char **endh)
 {
        return class_parse_value(buf, CLASS_PARSE_NET, (void *)net, endh, 0);