Details
-
Improvement
-
Resolution: Fixed
-
Minor
-
None
-
9223372036854775807
Description
In order to configure IPv6 interfaces for Lustre, there needs to be new LCFG_ADD_UUIDv6, LCFG_DEL_UUIDv6, and possibly LCFG_ADD_CONNv6 and LCFG_DEL_CONNv6 configuration log records added to the system. Even with LU-10359 and LU-10360, mount.lustre will pass down an IPv6 address NID (in ASCII format) resolved in userspace to the kernel via the "mgsnode=<nid>[:<nid>]" mount option, and generate a synthetic configuration record(s) in lustre_start_mgc->do_node(LCFG_ADD_UUID) to establish the initial MGC connection.
Later on, whether the config logs have LCFG_ADD_UUIDv6 records, or the target NIDs are passed via Imperative Recovery Target Status Table, the same do_node(LCFG_ADD_UUID) command will generate a configuration record to configure the interfaces.
Rather than storing the IPv6 NIDs in the lcfg_nid field, since this is tied to the on-disk format of the lustre_cfg records and needs to be declared as an lnet_nid4_t, the LCFG_ADD_UUIDv6 record should store the NID in ASCII format in lcfg_buflens[1] and use libcfs_str2nid() in the kernel to convert it to a binary lnet_nid_t (presumably lnet_nid6_t at this point) to pass down to class_add_uuid().
The class_add_uuid() function should be changed to take lnet_nid_t as an argument (as should anywhere else that is currently using __u64 for storing a NID).