summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.github/workflows/build.yml16
-rw-r--r--.github/workflows/coverage.yml2
-rw-r--r--.github/workflows/docs.yaml2
-rw-r--r--.github/workflows/release-python.yml2
-rw-r--r--doc/config-schema.json6
-rw-r--r--doc/config-schema.json.in6
-rw-r--r--doc/man/nbft_control.22
-rw-r--r--doc/man/nbft_control_flags.22
-rw-r--r--doc/man/nbft_desc_type.22
-rw-r--r--doc/man/nbft_discovery.22
-rw-r--r--doc/man/nbft_discovery_flags.22
-rw-r--r--doc/man/nbft_header.22
-rw-r--r--doc/man/nbft_heap_obj.22
-rw-r--r--doc/man/nbft_hfi.22
-rw-r--r--doc/man/nbft_hfi_flags.22
-rw-r--r--doc/man/nbft_hfi_info_tcp.22
-rw-r--r--doc/man/nbft_hfi_info_tcp_flags.22
-rw-r--r--doc/man/nbft_host.22
-rw-r--r--doc/man/nbft_host_flags.22
-rw-r--r--doc/man/nbft_info.22
-rw-r--r--doc/man/nbft_info_discovery.22
-rw-r--r--doc/man/nbft_info_hfi.22
-rw-r--r--doc/man/nbft_info_hfi_info_tcp.22
-rw-r--r--doc/man/nbft_info_host.22
-rw-r--r--doc/man/nbft_info_nid_type.22
-rw-r--r--doc/man/nbft_info_primary_admin_host_flag.22
-rw-r--r--doc/man/nbft_info_security.22
-rw-r--r--doc/man/nbft_info_subsystem_ns.22
-rw-r--r--doc/man/nbft_security.22
-rw-r--r--doc/man/nbft_security_flags.22
-rw-r--r--doc/man/nbft_security_secret_type.22
-rw-r--r--doc/man/nbft_ssns.22
-rw-r--r--doc/man/nbft_ssns_ext_info.22
-rw-r--r--doc/man/nbft_ssns_ext_info_flags.22
-rw-r--r--doc/man/nbft_ssns_flags.22
-rw-r--r--doc/man/nbft_ssns_trflags.22
-rw-r--r--doc/man/nbft_trtype.22
-rw-r--r--doc/man/nvme_acq.22
-rw-r--r--doc/man/nvme_admin_opcode.22
-rw-r--r--doc/man/nvme_admin_passthru.22
-rw-r--r--doc/man/nvme_admin_passthru64.22
-rw-r--r--doc/man/nvme_ae_info_css_nvm.22
-rw-r--r--doc/man/nvme_ae_info_error.22
-rw-r--r--doc/man/nvme_ae_info_notice.22
-rw-r--r--doc/man/nvme_ae_info_smart.22
-rw-r--r--doc/man/nvme_ae_type.22
-rw-r--r--doc/man/nvme_aggregate_endurance_group_event.22
-rw-r--r--doc/man/nvme_aggregate_predictable_lat_event.22
-rw-r--r--doc/man/nvme_ana_group_desc.22
-rw-r--r--doc/man/nvme_ana_log.22
-rw-r--r--doc/man/nvme_ana_state.22
-rw-r--r--doc/man/nvme_apst_entry.22
-rw-r--r--doc/man/nvme_aqa.22
-rw-r--r--doc/man/nvme_asq.22
-rw-r--r--doc/man/nvme_boot_partition.22
-rw-r--r--doc/man/nvme_boot_partition_info.22
-rw-r--r--doc/man/nvme_bpinfo.22
-rw-r--r--doc/man/nvme_bpmbl.22
-rw-r--r--doc/man/nvme_bprsel.22
-rw-r--r--doc/man/nvme_cap.22
-rw-r--r--doc/man/nvme_capacity_config_desc.22
-rw-r--r--doc/man/nvme_capacity_mgmt.22
-rw-r--r--doc/man/nvme_cc.22
-rw-r--r--doc/man/nvme_change_ns_event.22
-rw-r--r--doc/man/nvme_channel_config_desc.22
-rw-r--r--doc/man/nvme_cmb_size.22
-rw-r--r--doc/man/nvme_cmbebs.22
-rw-r--r--doc/man/nvme_cmbloc.22
-rw-r--r--doc/man/nvme_cmbmsc.22
-rw-r--r--doc/man/nvme_cmbsts.22
-rw-r--r--doc/man/nvme_cmbswtp.22
-rw-r--r--doc/man/nvme_cmbsz.22
-rw-r--r--doc/man/nvme_cmd_effects.28
-rw-r--r--doc/man/nvme_cmd_effects_log.22
-rw-r--r--doc/man/nvme_cmd_format_mset.22
-rw-r--r--doc/man/nvme_cmd_format_pi.22
-rw-r--r--doc/man/nvme_cmd_format_pil.22
-rw-r--r--doc/man/nvme_cmd_format_ses.22
-rw-r--r--doc/man/nvme_cmd_get_log_lid.256
-rw-r--r--doc/man/nvme_cmd_get_log_telemetry_host_lsp.22
-rw-r--r--doc/man/nvme_cmic.22
-rw-r--r--doc/man/nvme_compare.22
-rw-r--r--doc/man/nvme_connect_err.28
-rw-r--r--doc/man/nvme_constants.22
-rw-r--r--doc/man/nvme_copy.22
-rw-r--r--doc/man/nvme_copy_range.22
-rw-r--r--doc/man/nvme_copy_range_f1.22
-rw-r--r--doc/man/nvme_copy_range_f2.22
-rw-r--r--doc/man/nvme_copy_range_f3.22
-rw-r--r--doc/man/nvme_copy_range_sopt.22
-rw-r--r--doc/man/nvme_create_ctrl.22
-rw-r--r--doc/man/nvme_create_root.22
-rw-r--r--doc/man/nvme_crto.22
-rw-r--r--doc/man/nvme_csi.22
-rw-r--r--doc/man/nvme_csts.22
-rw-r--r--doc/man/nvme_ctrl_config_match.22
-rw-r--r--doc/man/nvme_ctrl_find.22
-rw-r--r--doc/man/nvme_ctrl_first_ns.22
-rw-r--r--doc/man/nvme_ctrl_first_path.22
-rw-r--r--doc/man/nvme_ctrl_for_each_ns.22
-rw-r--r--doc/man/nvme_ctrl_for_each_ns_safe.22
-rw-r--r--doc/man/nvme_ctrl_for_each_path.22
-rw-r--r--doc/man/nvme_ctrl_for_each_path_safe.22
-rw-r--r--doc/man/nvme_ctrl_get_address.22
-rw-r--r--doc/man/nvme_ctrl_get_config.22
-rw-r--r--doc/man/nvme_ctrl_get_dhchap_host_key.22
-rw-r--r--doc/man/nvme_ctrl_get_dhchap_key.22
-rw-r--r--doc/man/nvme_ctrl_get_fd.22
-rw-r--r--doc/man/nvme_ctrl_get_firmware.22
-rw-r--r--doc/man/nvme_ctrl_get_host_iface.22
-rw-r--r--doc/man/nvme_ctrl_get_host_traddr.22
-rw-r--r--doc/man/nvme_ctrl_get_keyring.211
-rw-r--r--doc/man/nvme_ctrl_get_model.22
-rw-r--r--doc/man/nvme_ctrl_get_name.22
-rw-r--r--doc/man/nvme_ctrl_get_numa_node.22
-rw-r--r--doc/man/nvme_ctrl_get_phy_slot.22
-rw-r--r--doc/man/nvme_ctrl_get_queue_count.22
-rw-r--r--doc/man/nvme_ctrl_get_serial.22
-rw-r--r--doc/man/nvme_ctrl_get_sqsize.22
-rw-r--r--doc/man/nvme_ctrl_get_src_addr.22
-rw-r--r--doc/man/nvme_ctrl_get_state.22
-rw-r--r--doc/man/nvme_ctrl_get_subsysnqn.22
-rw-r--r--doc/man/nvme_ctrl_get_subsystem.22
-rw-r--r--doc/man/nvme_ctrl_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_ctrl_get_tls_key.211
-rw-r--r--doc/man/nvme_ctrl_get_tls_key_identity.211
-rw-r--r--doc/man/nvme_ctrl_get_traddr.22
-rw-r--r--doc/man/nvme_ctrl_get_transport.22
-rw-r--r--doc/man/nvme_ctrl_get_trsvcid.22
-rw-r--r--doc/man/nvme_ctrl_identify.22
-rw-r--r--doc/man/nvme_ctrl_is_discovered.22
-rw-r--r--doc/man/nvme_ctrl_is_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrl_is_persistent.22
-rw-r--r--doc/man/nvme_ctrl_is_unique_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrl_list.22
-rw-r--r--doc/man/nvme_ctrl_metadata_type.22
-rw-r--r--doc/man/nvme_ctrl_next_ns.22
-rw-r--r--doc/man/nvme_ctrl_next_path.22
-rw-r--r--doc/man/nvme_ctrl_release_fd.22
-rw-r--r--doc/man/nvme_ctrl_reset.22
-rw-r--r--doc/man/nvme_ctrl_set_dhchap_host_key.22
-rw-r--r--doc/man/nvme_ctrl_set_dhchap_key.22
-rw-r--r--doc/man/nvme_ctrl_set_discovered.22
-rw-r--r--doc/man/nvme_ctrl_set_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrl_set_keyring.212
-rw-r--r--doc/man/nvme_ctrl_set_persistent.22
-rw-r--r--doc/man/nvme_ctrl_set_tls_key.212
-rw-r--r--doc/man/nvme_ctrl_set_tls_key_identity.212
-rw-r--r--doc/man/nvme_ctrl_set_unique_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrls_filter.22
-rw-r--r--doc/man/nvme_data_tfr.22
-rw-r--r--doc/man/nvme_default_host.22
-rw-r--r--doc/man/nvme_describe_key_serial.22
-rw-r--r--doc/man/nvme_dev_self_test.22
-rw-r--r--doc/man/nvme_directive_dtype.22
-rw-r--r--doc/man/nvme_directive_receive_doper.22
-rw-r--r--doc/man/nvme_directive_recv.22
-rw-r--r--doc/man/nvme_directive_recv_identify_parameters.22
-rw-r--r--doc/man/nvme_directive_recv_stream_allocate.22
-rw-r--r--doc/man/nvme_directive_recv_stream_parameters.22
-rw-r--r--doc/man/nvme_directive_recv_stream_status.22
-rw-r--r--doc/man/nvme_directive_send.22
-rw-r--r--doc/man/nvme_directive_send_doper.22
-rw-r--r--doc/man/nvme_directive_send_id_endir.22
-rw-r--r--doc/man/nvme_directive_send_identify_endir.22
-rw-r--r--doc/man/nvme_directive_send_stream_release_identifier.22
-rw-r--r--doc/man/nvme_directive_send_stream_release_resource.22
-rw-r--r--doc/man/nvme_directive_types.22
-rw-r--r--doc/man/nvme_disconnect_ctrl.22
-rw-r--r--doc/man/nvme_dsm.22
-rw-r--r--doc/man/nvme_dsm_attributes.22
-rw-r--r--doc/man/nvme_dsm_range.22
-rw-r--r--doc/man/nvme_dst_stc.22
-rw-r--r--doc/man/nvme_dump_config.22
-rw-r--r--doc/man/nvme_dump_tree.22
-rw-r--r--doc/man/nvme_eg_critical_warning_flags.22
-rw-r--r--doc/man/nvme_eg_event_aggregate_log.22
-rw-r--r--doc/man/nvme_end_grp_chan_desc.22
-rw-r--r--doc/man/nvme_end_grp_config_desc.22
-rw-r--r--doc/man/nvme_endurance_group_log.22
-rw-r--r--doc/man/nvme_eom_lane_desc.22
-rw-r--r--doc/man/nvme_eom_optional_data.22
-rw-r--r--doc/man/nvme_eom_optional_data_present.22
-rw-r--r--doc/man/nvme_errno_to_string.22
-rw-r--r--doc/man/nvme_error_log_page.22
-rw-r--r--doc/man/nvme_export_tls_key.22
-rw-r--r--doc/man/nvme_export_tls_key_versioned.226
-rw-r--r--doc/man/nvme_fabrics_config.26
-rw-r--r--doc/man/nvme_fabrics_uri.22
-rw-r--r--doc/man/nvme_fctype.22
-rw-r--r--doc/man/nvme_fdp_config_desc.22
-rw-r--r--doc/man/nvme_fdp_config_fdpa.22
-rw-r--r--doc/man/nvme_fdp_config_log.22
-rw-r--r--doc/man/nvme_fdp_event.22
-rw-r--r--doc/man/nvme_fdp_event_flags.22
-rw-r--r--doc/man/nvme_fdp_event_realloc.22
-rw-r--r--doc/man/nvme_fdp_event_realloc_flags.22
-rw-r--r--doc/man/nvme_fdp_event_type.22
-rw-r--r--doc/man/nvme_fdp_events_log.22
-rw-r--r--doc/man/nvme_fdp_reclaim_unit_handle_status.22
-rw-r--r--doc/man/nvme_fdp_reclaim_unit_handle_update.22
-rw-r--r--doc/man/nvme_fdp_ruh_desc.22
-rw-r--r--doc/man/nvme_fdp_ruh_status.22
-rw-r--r--doc/man/nvme_fdp_ruh_status_desc.22
-rw-r--r--doc/man/nvme_fdp_ruh_type.22
-rw-r--r--doc/man/nvme_fdp_ruha.22
-rw-r--r--doc/man/nvme_fdp_ruhu_desc.22
-rw-r--r--doc/man/nvme_fdp_ruhu_log.22
-rw-r--r--doc/man/nvme_fdp_stats_log.22
-rw-r--r--doc/man/nvme_fdp_supported_event_attributes.22
-rw-r--r--doc/man/nvme_fdp_supported_event_desc.22
-rw-r--r--doc/man/nvme_feat.22
-rw-r--r--doc/man/nvme_feat_auto_pst.22
-rw-r--r--doc/man/nvme_feat_fdp_events_cdw11.22
-rw-r--r--doc/man/nvme_feat_host_behavior.22
-rw-r--r--doc/man/nvme_feat_nswpcfg_state.22
-rw-r--r--doc/man/nvme_feat_plm_window_select.22
-rw-r--r--doc/man/nvme_feat_resv_notify_flags.22
-rw-r--r--doc/man/nvme_feat_tmpthresh_thsel.22
-rw-r--r--doc/man/nvme_features_async_event_config_flags.22
-rw-r--r--doc/man/nvme_features_id.22
-rw-r--r--doc/man/nvme_fid_supported_effects.22
-rw-r--r--doc/man/nvme_fid_supported_effects_log.22
-rw-r--r--doc/man/nvme_firmware_slot.22
-rw-r--r--doc/man/nvme_first_host.22
-rw-r--r--doc/man/nvme_first_subsystem.22
-rw-r--r--doc/man/nvme_flbas.22
-rw-r--r--doc/man/nvme_flush.22
-rw-r--r--doc/man/nvme_for_each_host.22
-rw-r--r--doc/man/nvme_for_each_host_safe.22
-rw-r--r--doc/man/nvme_for_each_subsystem.22
-rw-r--r--doc/man/nvme_for_each_subsystem_safe.22
-rw-r--r--doc/man/nvme_format_nvm.22
-rw-r--r--doc/man/nvme_format_nvm_compln_event.22
-rw-r--r--doc/man/nvme_format_nvm_start_event.22
-rw-r--r--doc/man/nvme_free_ctrl.22
-rw-r--r--doc/man/nvme_free_host.22
-rw-r--r--doc/man/nvme_free_ns.22
-rw-r--r--doc/man/nvme_free_subsystem.22
-rw-r--r--doc/man/nvme_free_tree.22
-rw-r--r--doc/man/nvme_free_uri.22
-rw-r--r--doc/man/nvme_fw_commit.22
-rw-r--r--doc/man/nvme_fw_commit_ca.22
-rw-r--r--doc/man/nvme_fw_commit_event.22
-rw-r--r--doc/man/nvme_fw_download.22
-rw-r--r--doc/man/nvme_fw_download_seq.22
-rw-r--r--doc/man/nvme_gen_dhchap_key.22
-rw-r--r--doc/man/nvme_generate_tls_key_identity.22
-rw-r--r--doc/man/nvme_get_ana_log_atomic.22
-rw-r--r--doc/man/nvme_get_ana_log_len.22
-rw-r--r--doc/man/nvme_get_ana_log_len_from_id_ctrl.22
-rw-r--r--doc/man/nvme_get_attr.22
-rw-r--r--doc/man/nvme_get_ctrl_attr.22
-rw-r--r--doc/man/nvme_get_ctrl_telemetry.22
-rw-r--r--doc/man/nvme_get_directive_receive_length.22
-rw-r--r--doc/man/nvme_get_discovery_args.22
-rw-r--r--doc/man/nvme_get_feature_length.22
-rw-r--r--doc/man/nvme_get_feature_length2.22
-rw-r--r--doc/man/nvme_get_features.22
-rw-r--r--doc/man/nvme_get_features_arbitration.22
-rw-r--r--doc/man/nvme_get_features_async_event.22
-rw-r--r--doc/man/nvme_get_features_auto_pst.22
-rw-r--r--doc/man/nvme_get_features_data.22
-rw-r--r--doc/man/nvme_get_features_endurance_event_cfg.22
-rw-r--r--doc/man/nvme_get_features_err_recovery.22
-rw-r--r--doc/man/nvme_get_features_err_recovery2.22
-rw-r--r--doc/man/nvme_get_features_hctm.22
-rw-r--r--doc/man/nvme_get_features_host_behavior.22
-rw-r--r--doc/man/nvme_get_features_host_id.22
-rw-r--r--doc/man/nvme_get_features_host_mem_buf.22
-rw-r--r--doc/man/nvme_get_features_host_mem_buf2.22
-rw-r--r--doc/man/nvme_get_features_iocs_profile.22
-rw-r--r--doc/man/nvme_get_features_irq_coalesce.22
-rw-r--r--doc/man/nvme_get_features_irq_config.22
-rw-r--r--doc/man/nvme_get_features_kato.22
-rw-r--r--doc/man/nvme_get_features_lba_range.22
-rw-r--r--doc/man/nvme_get_features_lba_range2.22
-rw-r--r--doc/man/nvme_get_features_lba_sts_interval.22
-rw-r--r--doc/man/nvme_get_features_nopsc.22
-rw-r--r--doc/man/nvme_get_features_num_queues.22
-rw-r--r--doc/man/nvme_get_features_plm_config.22
-rw-r--r--doc/man/nvme_get_features_plm_window.22
-rw-r--r--doc/man/nvme_get_features_power_mgmt.22
-rw-r--r--doc/man/nvme_get_features_resv_mask.22
-rw-r--r--doc/man/nvme_get_features_resv_mask2.22
-rw-r--r--doc/man/nvme_get_features_resv_persist.22
-rw-r--r--doc/man/nvme_get_features_resv_persist2.22
-rw-r--r--doc/man/nvme_get_features_rrl.22
-rw-r--r--doc/man/nvme_get_features_sanitize.22
-rw-r--r--doc/man/nvme_get_features_sel.22
-rw-r--r--doc/man/nvme_get_features_simple.22
-rw-r--r--doc/man/nvme_get_features_sw_progress.22
-rw-r--r--doc/man/nvme_get_features_temp_thresh.22
-rw-r--r--doc/man/nvme_get_features_timestamp.22
-rw-r--r--doc/man/nvme_get_features_volatile_wc.22
-rw-r--r--doc/man/nvme_get_features_write_atomic.22
-rw-r--r--doc/man/nvme_get_features_write_protect.22
-rw-r--r--doc/man/nvme_get_host_telemetry.22
-rw-r--r--doc/man/nvme_get_lba_status.22
-rw-r--r--doc/man/nvme_get_lba_status_log.22
-rw-r--r--doc/man/nvme_get_log.22
-rw-r--r--doc/man/nvme_get_log_ana.22
-rw-r--r--doc/man/nvme_get_log_ana_groups.22
-rw-r--r--doc/man/nvme_get_log_boot_partition.22
-rw-r--r--doc/man/nvme_get_log_changed_ns_list.22
-rw-r--r--doc/man/nvme_get_log_cmd_effects.22
-rw-r--r--doc/man/nvme_get_log_create_telemetry_host.22
-rw-r--r--doc/man/nvme_get_log_device_self_test.22
-rw-r--r--doc/man/nvme_get_log_discovery.22
-rw-r--r--doc/man/nvme_get_log_endurance_group.22
-rw-r--r--doc/man/nvme_get_log_endurance_grp_evt.22
-rw-r--r--doc/man/nvme_get_log_error.22
-rw-r--r--doc/man/nvme_get_log_fdp_configurations.22
-rw-r--r--doc/man/nvme_get_log_fdp_events.22
-rw-r--r--doc/man/nvme_get_log_fdp_stats.22
-rw-r--r--doc/man/nvme_get_log_fid_supported_effects.22
-rw-r--r--doc/man/nvme_get_log_fw_slot.22
-rw-r--r--doc/man/nvme_get_log_lba_status.22
-rw-r--r--doc/man/nvme_get_log_lockdown.218
-rw-r--r--doc/man/nvme_get_log_media_unit_stat.22
-rw-r--r--doc/man/nvme_get_log_mi_cmd_supported_effects.22
-rw-r--r--doc/man/nvme_get_log_page.22
-rw-r--r--doc/man/nvme_get_log_persistent_event.22
-rw-r--r--doc/man/nvme_get_log_phy_rx_eom.22
-rw-r--r--doc/man/nvme_get_log_predictable_lat_event.22
-rw-r--r--doc/man/nvme_get_log_predictable_lat_nvmset.22
-rw-r--r--doc/man/nvme_get_log_reclaim_unit_handle_usage.22
-rw-r--r--doc/man/nvme_get_log_reservation.22
-rw-r--r--doc/man/nvme_get_log_sanitize.22
-rw-r--r--doc/man/nvme_get_log_smart.22
-rw-r--r--doc/man/nvme_get_log_support_cap_config_list.22
-rw-r--r--doc/man/nvme_get_log_supported_log_pages.22
-rw-r--r--doc/man/nvme_get_log_telemetry_ctrl.22
-rw-r--r--doc/man/nvme_get_log_telemetry_host.22
-rw-r--r--doc/man/nvme_get_log_zns_changed_zones.22
-rw-r--r--doc/man/nvme_get_logging_level.22
-rw-r--r--doc/man/nvme_get_logical_block_size.22
-rw-r--r--doc/man/nvme_get_new_host_telemetry.22
-rw-r--r--doc/man/nvme_get_ns_attr.22
-rw-r--r--doc/man/nvme_get_nsid.22
-rw-r--r--doc/man/nvme_get_path_attr.22
-rw-r--r--doc/man/nvme_get_property.22
-rw-r--r--doc/man/nvme_get_subsys_attr.22
-rw-r--r--doc/man/nvme_get_telemetry_log.22
-rw-r--r--doc/man/nvme_get_telemetry_max.22
-rw-r--r--doc/man/nvme_hmac_alg.22
-rw-r--r--doc/man/nvme_host_behavior_support.22
-rw-r--r--doc/man/nvme_host_get_dhchap_key.22
-rw-r--r--doc/man/nvme_host_get_hostid.22
-rw-r--r--doc/man/nvme_host_get_hostnqn.22
-rw-r--r--doc/man/nvme_host_get_hostsymname.22
-rw-r--r--doc/man/nvme_host_get_root.22
-rw-r--r--doc/man/nvme_host_is_pdc_enabled.22
-rw-r--r--doc/man/nvme_host_mem_buf_attrs.22
-rw-r--r--doc/man/nvme_host_metadata.22
-rw-r--r--doc/man/nvme_host_release_fds.22
-rw-r--r--doc/man/nvme_host_set_dhchap_key.22
-rw-r--r--doc/man/nvme_host_set_hostsymname.22
-rw-r--r--doc/man/nvme_host_set_pdc_enabled.22
-rw-r--r--doc/man/nvme_id_ctrl.281
-rw-r--r--doc/man/nvme_id_ctrl_anacap.22
-rw-r--r--doc/man/nvme_id_ctrl_apsta.22
-rw-r--r--doc/man/nvme_id_ctrl_avscc.22
-rw-r--r--doc/man/nvme_id_ctrl_cmic.22
-rw-r--r--doc/man/nvme_id_ctrl_cntrltype.22
-rw-r--r--doc/man/nvme_id_ctrl_cqes.22
-rw-r--r--doc/man/nvme_id_ctrl_ctratt.22
-rw-r--r--doc/man/nvme_id_ctrl_dctype.22
-rw-r--r--doc/man/nvme_id_ctrl_dsto.22
-rw-r--r--doc/man/nvme_id_ctrl_fcatt.22
-rw-r--r--doc/man/nvme_id_ctrl_fna.250
-rw-r--r--doc/man/nvme_id_ctrl_frmw.22
-rw-r--r--doc/man/nvme_id_ctrl_fuses.22
-rw-r--r--doc/man/nvme_id_ctrl_hctm.22
-rw-r--r--doc/man/nvme_id_ctrl_lpa.22
-rw-r--r--doc/man/nvme_id_ctrl_mec.22
-rw-r--r--doc/man/nvme_id_ctrl_nvm.214
-rw-r--r--doc/man/nvme_id_ctrl_nvmsr.22
-rw-r--r--doc/man/nvme_id_ctrl_nvscc.22
-rw-r--r--doc/man/nvme_id_ctrl_nwpc.22
-rw-r--r--doc/man/nvme_id_ctrl_oacs.22
-rw-r--r--doc/man/nvme_id_ctrl_oaes.2179
-rw-r--r--doc/man/nvme_id_ctrl_ofcs.22
-rw-r--r--doc/man/nvme_id_ctrl_oncs.22
-rw-r--r--doc/man/nvme_id_ctrl_rpmbs.22
-rw-r--r--doc/man/nvme_id_ctrl_sanicap.22
-rw-r--r--doc/man/nvme_id_ctrl_sgls.22
-rw-r--r--doc/man/nvme_id_ctrl_sqes.22
-rw-r--r--doc/man/nvme_id_ctrl_vwc.22
-rw-r--r--doc/man/nvme_id_ctrl_vwci.22
-rw-r--r--doc/man/nvme_id_directives.22
-rw-r--r--doc/man/nvme_id_domain_attr.22
-rw-r--r--doc/man/nvme_id_domain_list.22
-rw-r--r--doc/man/nvme_id_endurance_group_list.22
-rw-r--r--doc/man/nvme_id_independent_id_ns.22
-rw-r--r--doc/man/nvme_id_iocs.22
-rw-r--r--doc/man/nvme_id_ns.22
-rw-r--r--doc/man/nvme_id_ns_attr.22
-rw-r--r--doc/man/nvme_id_ns_dlfeat.22
-rw-r--r--doc/man/nvme_id_ns_dpc.22
-rw-r--r--doc/man/nvme_id_ns_dps.22
-rw-r--r--doc/man/nvme_id_ns_flbas.22
-rw-r--r--doc/man/nvme_id_ns_granularity_desc.22
-rw-r--r--doc/man/nvme_id_ns_granularity_list.22
-rw-r--r--doc/man/nvme_id_ns_mc.22
-rw-r--r--doc/man/nvme_id_ns_nmic.22
-rw-r--r--doc/man/nvme_id_ns_rescap.22
-rw-r--r--doc/man/nvme_id_nsfeat.22
-rw-r--r--doc/man/nvme_id_nvmset_list.22
-rw-r--r--doc/man/nvme_id_psd.22
-rw-r--r--doc/man/nvme_id_uuid.22
-rw-r--r--doc/man/nvme_id_uuid_list.22
-rw-r--r--doc/man/nvme_id_uuid_list_entry.22
-rw-r--r--doc/man/nvme_identify.22
-rw-r--r--doc/man/nvme_identify_active_ns_list.22
-rw-r--r--doc/man/nvme_identify_active_ns_list_csi.22
-rw-r--r--doc/man/nvme_identify_allocated_ns.22
-rw-r--r--doc/man/nvme_identify_allocated_ns_list.22
-rw-r--r--doc/man/nvme_identify_allocated_ns_list_csi.22
-rw-r--r--doc/man/nvme_identify_cns.210
-rw-r--r--doc/man/nvme_identify_ctrl.22
-rw-r--r--doc/man/nvme_identify_ctrl_csi.22
-rw-r--r--doc/man/nvme_identify_ctrl_list.22
-rw-r--r--doc/man/nvme_identify_domain_list.22
-rw-r--r--doc/man/nvme_identify_endurance_group_list.22
-rw-r--r--doc/man/nvme_identify_independent_identify_ns.22
-rw-r--r--doc/man/nvme_identify_iocs.22
-rw-r--r--doc/man/nvme_identify_iocs_ns_csi_user_data_format.22
-rw-r--r--doc/man/nvme_identify_ns.22
-rw-r--r--doc/man/nvme_identify_ns_csi.22
-rw-r--r--doc/man/nvme_identify_ns_csi_user_data_format.22
-rw-r--r--doc/man/nvme_identify_ns_descs.22
-rw-r--r--doc/man/nvme_identify_ns_granularity.22
-rw-r--r--doc/man/nvme_identify_nsid_ctrl_list.22
-rw-r--r--doc/man/nvme_identify_nvmset_list.22
-rw-r--r--doc/man/nvme_identify_primary_ctrl.22
-rw-r--r--doc/man/nvme_identify_secondary_ctrl_list.22
-rw-r--r--doc/man/nvme_identify_uuid.22
-rw-r--r--doc/man/nvme_import_tls_key.22
-rw-r--r--doc/man/nvme_import_tls_key_versioned.225
-rw-r--r--doc/man/nvme_init_copy_range.22
-rw-r--r--doc/man/nvme_init_copy_range_f1.22
-rw-r--r--doc/man/nvme_init_copy_range_f2.22
-rw-r--r--doc/man/nvme_init_copy_range_f3.22
-rw-r--r--doc/man/nvme_init_ctrl.22
-rw-r--r--doc/man/nvme_init_ctrl_list.22
-rw-r--r--doc/man/nvme_init_default_logging.22
-rw-r--r--doc/man/nvme_init_dsm_range.22
-rw-r--r--doc/man/nvme_init_logging.22
-rw-r--r--doc/man/nvme_insert_tls_key.22
-rw-r--r--doc/man/nvme_insert_tls_key_versioned.22
-rw-r--r--doc/man/nvme_io.22
-rw-r--r--doc/man/nvme_io_control_flags.22
-rw-r--r--doc/man/nvme_io_dsm_flags.22
-rw-r--r--doc/man/nvme_io_mgmt_recv.22
-rw-r--r--doc/man/nvme_io_mgmt_recv_mo.22
-rw-r--r--doc/man/nvme_io_mgmt_send.22
-rw-r--r--doc/man/nvme_io_mgmt_send_mo.22
-rw-r--r--doc/man/nvme_io_opcode.22
-rw-r--r--doc/man/nvme_io_passthru.22
-rw-r--r--doc/man/nvme_io_passthru64.22
-rw-r--r--doc/man/nvme_is_64bit_reg.22
-rw-r--r--doc/man/nvme_kv_opcode.266
-rw-r--r--doc/man/nvme_lba_range_type.22
-rw-r--r--doc/man/nvme_lba_range_type_entry.22
-rw-r--r--doc/man/nvme_lba_rd.22
-rw-r--r--doc/man/nvme_lba_status.22
-rw-r--r--doc/man/nvme_lba_status_atype.22
-rw-r--r--doc/man/nvme_lba_status_cmpc.228
-rw-r--r--doc/man/nvme_lba_status_desc.22
-rw-r--r--doc/man/nvme_lba_status_log.22
-rw-r--r--doc/man/nvme_lbaf.22
-rw-r--r--doc/man/nvme_lbaf_rp.22
-rw-r--r--doc/man/nvme_lbart.22
-rw-r--r--doc/man/nvme_lbas_ns_element.22
-rw-r--r--doc/man/nvme_lockdown.22
-rw-r--r--doc/man/nvme_lockdown_log.227
-rw-r--r--doc/man/nvme_lockdown_log_contents.224
-rw-r--r--doc/man/nvme_lockdown_log_scope.230
-rw-r--r--doc/man/nvme_lockdown_scope_contents.230
-rw-r--r--doc/man/nvme_log_ana_lsp.22
-rw-r--r--doc/man/nvme_log_phy_rx_eom_action.22
-rw-r--r--doc/man/nvme_log_phy_rx_eom_quality.22
-rw-r--r--doc/man/nvme_lookup_ctrl.22
-rw-r--r--doc/man/nvme_lookup_host.22
-rw-r--r--doc/man/nvme_lookup_key.22
-rw-r--r--doc/man/nvme_lookup_keyring.22
-rw-r--r--doc/man/nvme_lookup_subsystem.22
-rw-r--r--doc/man/nvme_media_unit_config_desc.22
-rw-r--r--doc/man/nvme_media_unit_stat_desc.22
-rw-r--r--doc/man/nvme_media_unit_stat_log.22
-rw-r--r--doc/man/nvme_metadata_element_desc.22
-rw-r--r--doc/man/nvme_mi_admin_admin_passthru.22
-rw-r--r--doc/man/nvme_mi_admin_format_nvm.22
-rw-r--r--doc/man/nvme_mi_admin_fw_commit.22
-rw-r--r--doc/man/nvme_mi_admin_fw_download.22
-rw-r--r--doc/man/nvme_mi_admin_get_ana_log_atomic.22
-rw-r--r--doc/man/nvme_mi_admin_get_features_data.22
-rw-r--r--doc/man/nvme_mi_admin_get_log.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_ana.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_ana_groups.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_boot_partition.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_changed_ns_list.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_cmd_effects.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_create_telemetry_host.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_device_self_test.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_discovery.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_endurance_group.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_endurance_grp_evt.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_error.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_fid_supported_effects.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_fw_slot.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_lba_status.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_lockdown.218
-rw-r--r--doc/man/nvme_mi_admin_get_log_media_unit_stat.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_page.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_persistent_event.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_phy_rx_eom.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_predictable_lat_event.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_reservation.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_sanitize.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_simple.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_smart.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_support_cap_config_list.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_supported_log_pages.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_telemetry_ctrl.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_telemetry_host.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_zns_changed_zones.22
-rw-r--r--doc/man/nvme_mi_admin_get_nsid_log.22
-rw-r--r--doc/man/nvme_mi_admin_identify.22
-rw-r--r--doc/man/nvme_mi_admin_identify_active_ns_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_allocated_ns.22
-rw-r--r--doc/man/nvme_mi_admin_identify_allocated_ns_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_cns_nsid.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ctrl.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ns.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ns_descs.22
-rw-r--r--doc/man/nvme_mi_admin_identify_nsid_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_partial.22
-rw-r--r--doc/man/nvme_mi_admin_identify_primary_ctrl.22
-rw-r--r--doc/man/nvme_mi_admin_identify_secondary_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_admin_ns_attach.22
-rw-r--r--doc/man/nvme_mi_admin_ns_attach_ctrls.22
-rw-r--r--doc/man/nvme_mi_admin_ns_detach_ctrls.22
-rw-r--r--doc/man/nvme_mi_admin_req_hdr.22
-rw-r--r--doc/man/nvme_mi_admin_resp_hdr.22
-rw-r--r--doc/man/nvme_mi_admin_sanitize_nvm.22
-rw-r--r--doc/man/nvme_mi_admin_security_recv.22
-rw-r--r--doc/man/nvme_mi_admin_security_send.22
-rw-r--r--doc/man/nvme_mi_admin_xfer.22
-rw-r--r--doc/man/nvme_mi_ccs.22
-rw-r--r--doc/man/nvme_mi_close.22
-rw-r--r--doc/man/nvme_mi_close_ctrl.22
-rw-r--r--doc/man/nvme_mi_cmd_supported_effects.22
-rw-r--r--doc/man/nvme_mi_cmd_supported_effects_log.22
-rw-r--r--doc/man/nvme_mi_config_id.22
-rw-r--r--doc/man/nvme_mi_config_smbus_freq.22
-rw-r--r--doc/man/nvme_mi_control.225
-rw-r--r--doc/man/nvme_mi_control_opcode.236
-rw-r--r--doc/man/nvme_mi_control_req.227
-rw-r--r--doc/man/nvme_mi_create_root.22
-rw-r--r--doc/man/nvme_mi_csts.22
-rw-r--r--doc/man/nvme_mi_ctrl_health_status.22
-rw-r--r--doc/man/nvme_mi_ctrl_id.22
-rw-r--r--doc/man/nvme_mi_cwarn.22
-rw-r--r--doc/man/nvme_mi_dtyp.22
-rw-r--r--doc/man/nvme_mi_elem.22
-rw-r--r--doc/man/nvme_mi_free_root.22
-rw-r--r--doc/man/nvme_mi_init_ctrl.22
-rw-r--r--doc/man/nvme_mi_message_type.22
-rw-r--r--doc/man/nvme_mi_mi_opcode.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_ctrl.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_port.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_subsys.22
-rw-r--r--doc/man/nvme_mi_mi_req_hdr.22
-rw-r--r--doc/man/nvme_mi_mi_resp_hdr.22
-rw-r--r--doc/man/nvme_mi_mi_subsystem_health_status_poll.22
-rw-r--r--doc/man/nvme_mi_msg_hdr.22
-rw-r--r--doc/man/nvme_mi_msg_resp.22
-rw-r--r--doc/man/nvme_mi_nvm_ss_health_status.22
-rw-r--r--doc/man/nvme_mi_open_mctp.22
-rw-r--r--doc/man/nvme_mi_osc.22
-rw-r--r--doc/man/nvme_mi_port_pcie.22
-rw-r--r--doc/man/nvme_mi_port_smb.22
-rw-r--r--doc/man/nvme_mi_read_ctrl_info.22
-rw-r--r--doc/man/nvme_mi_read_nvm_ss_info.22
-rw-r--r--doc/man/nvme_mi_read_port_info.22
-rw-r--r--doc/man/nvme_mi_read_sc_list.22
-rw-r--r--doc/man/nvme_mi_resp_status.22
-rw-r--r--doc/man/nvme_mi_set_probe_enabled.22
-rw-r--r--doc/man/nvme_mi_status_to_string.22
-rw-r--r--doc/man/nvme_mi_vpd_hdr.22
-rw-r--r--doc/man/nvme_mi_vpd_mr_common.22
-rw-r--r--doc/man/nvme_mi_vpd_mra.22
-rw-r--r--doc/man/nvme_mi_vpd_ppmra.22
-rw-r--r--doc/man/nvme_mi_vpd_telem.22
-rw-r--r--doc/man/nvme_mi_vpd_tra.22
-rw-r--r--doc/man/nvme_namespace_attach_ctrls.22
-rw-r--r--doc/man/nvme_namespace_detach_ctrls.22
-rw-r--r--doc/man/nvme_namespace_filter.22
-rw-r--r--doc/man/nvme_namespace_first_path.22
-rw-r--r--doc/man/nvme_namespace_for_each_path.22
-rw-r--r--doc/man/nvme_namespace_for_each_path_safe.22
-rw-r--r--doc/man/nvme_namespace_next_path.22
-rw-r--r--doc/man/nvme_nbft_free.22
-rw-r--r--doc/man/nvme_nbft_read.22
-rw-r--r--doc/man/nvme_nd_ns_fpi.22
-rw-r--r--doc/man/nvme_next_host.22
-rw-r--r--doc/man/nvme_next_subsystem.22
-rw-r--r--doc/man/nvme_ns_attach.22
-rw-r--r--doc/man/nvme_ns_attach_ctrls.22
-rw-r--r--doc/man/nvme_ns_attach_sel.22
-rw-r--r--doc/man/nvme_ns_compare.22
-rw-r--r--doc/man/nvme_ns_detach_ctrls.22
-rw-r--r--doc/man/nvme_ns_flush.22
-rw-r--r--doc/man/nvme_ns_get_csi.22
-rw-r--r--doc/man/nvme_ns_get_ctrl.22
-rw-r--r--doc/man/nvme_ns_get_eui64.22
-rw-r--r--doc/man/nvme_ns_get_fd.22
-rw-r--r--doc/man/nvme_ns_get_firmware.22
-rw-r--r--doc/man/nvme_ns_get_generic_name.22
-rw-r--r--doc/man/nvme_ns_get_lba_count.22
-rw-r--r--doc/man/nvme_ns_get_lba_size.22
-rw-r--r--doc/man/nvme_ns_get_lba_util.22
-rw-r--r--doc/man/nvme_ns_get_meta_size.22
-rw-r--r--doc/man/nvme_ns_get_model.22
-rw-r--r--doc/man/nvme_ns_get_name.22
-rw-r--r--doc/man/nvme_ns_get_nguid.22
-rw-r--r--doc/man/nvme_ns_get_nsid.22
-rw-r--r--doc/man/nvme_ns_get_serial.22
-rw-r--r--doc/man/nvme_ns_get_subsystem.22
-rw-r--r--doc/man/nvme_ns_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_ns_get_uuid.22
-rw-r--r--doc/man/nvme_ns_id_desc.22
-rw-r--r--doc/man/nvme_ns_id_desc_nidt.22
-rw-r--r--doc/man/nvme_ns_identify.22
-rw-r--r--doc/man/nvme_ns_identify_descs.22
-rw-r--r--doc/man/nvme_ns_list.22
-rw-r--r--doc/man/nvme_ns_metadata_type.22
-rw-r--r--doc/man/nvme_ns_mgmt.22
-rw-r--r--doc/man/nvme_ns_mgmt_create.22
-rw-r--r--doc/man/nvme_ns_mgmt_delete.22
-rw-r--r--doc/man/nvme_ns_mgmt_delete_timeout.22
-rw-r--r--doc/man/nvme_ns_mgmt_host_sw_specified.22
-rw-r--r--doc/man/nvme_ns_mgmt_sel.22
-rw-r--r--doc/man/nvme_ns_read.22
-rw-r--r--doc/man/nvme_ns_release_fd.22
-rw-r--r--doc/man/nvme_ns_rescan.22
-rw-r--r--doc/man/nvme_ns_verify.22
-rw-r--r--doc/man/nvme_ns_write.22
-rw-r--r--doc/man/nvme_ns_write_protect_cfg.22
-rw-r--r--doc/man/nvme_ns_write_uncorrectable.22
-rw-r--r--doc/man/nvme_ns_write_zeros.22
-rw-r--r--doc/man/nvme_nss_hw_err_event.22
-rw-r--r--doc/man/nvme_nvm_id_ns.224
-rw-r--r--doc/man/nvme_nvm_id_ns_elbaf.22
-rw-r--r--doc/man/nvme_nvm_id_ns_pif.22
-rw-r--r--doc/man/nvme_nvm_identify_ctrl.22
-rw-r--r--doc/man/nvme_nvmeset_pl_status.22
-rw-r--r--doc/man/nvme_nvmset_attr.22
-rw-r--r--doc/man/nvme_nvmset_pl_events.22
-rw-r--r--doc/man/nvme_nvmset_predictable_lat_log.22
-rw-r--r--doc/man/nvme_open.22
-rw-r--r--doc/man/nvme_parse_uri.22
-rw-r--r--doc/man/nvme_passthru_cmd.22
-rw-r--r--doc/man/nvme_passthru_cmd64.22
-rw-r--r--doc/man/nvme_path_get_ana_state.22
-rw-r--r--doc/man/nvme_path_get_ctrl.22
-rw-r--r--doc/man/nvme_path_get_name.22
-rw-r--r--doc/man/nvme_path_get_ns.22
-rw-r--r--doc/man/nvme_path_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_paths_filter.22
-rw-r--r--doc/man/nvme_pel_ehai.22
-rw-r--r--doc/man/nvme_pel_ehai_pit.22
-rw-r--r--doc/man/nvme_pel_rci.22
-rw-r--r--doc/man/nvme_pel_rci_rcpit.22
-rw-r--r--doc/man/nvme_persistent_event_entry.22
-rw-r--r--doc/man/nvme_persistent_event_log.22
-rw-r--r--doc/man/nvme_persistent_event_types.28
-rw-r--r--doc/man/nvme_pevent_log_action.22
-rw-r--r--doc/man/nvme_phy_rx_eom_log.22
-rw-r--r--doc/man/nvme_phy_rx_eom_progress.22
-rw-r--r--doc/man/nvme_plm_config.22
-rw-r--r--doc/man/nvme_pmr_size.22
-rw-r--r--doc/man/nvme_pmr_throughput.22
-rw-r--r--doc/man/nvme_pmrcap.22
-rw-r--r--doc/man/nvme_pmrctl.22
-rw-r--r--doc/man/nvme_pmrebs.22
-rw-r--r--doc/man/nvme_pmrmsc.22
-rw-r--r--doc/man/nvme_pmrsts.22
-rw-r--r--doc/man/nvme_pmrswtp.22
-rw-r--r--doc/man/nvme_power_on_reset_info_list.22
-rw-r--r--doc/man/nvme_primary_ctrl_cap.22
-rw-r--r--doc/man/nvme_psd_flags.22
-rw-r--r--doc/man/nvme_psd_power_scale.22
-rw-r--r--doc/man/nvme_psd_ps.22
-rw-r--r--doc/man/nvme_psd_workload.22
-rw-r--r--doc/man/nvme_read.22
-rw-r--r--doc/man/nvme_read_config.22
-rw-r--r--doc/man/nvme_read_key.22
-rw-r--r--doc/man/nvme_refresh_topology.22
-rw-r--r--doc/man/nvme_register_offsets.22
-rw-r--r--doc/man/nvme_registered_ctrl.22
-rw-r--r--doc/man/nvme_registered_ctrl_ext.22
-rw-r--r--doc/man/nvme_rescan_ctrl.22
-rw-r--r--doc/man/nvme_resv_acquire.22
-rw-r--r--doc/man/nvme_resv_cptpl.22
-rw-r--r--doc/man/nvme_resv_notification_log.22
-rw-r--r--doc/man/nvme_resv_notify_rnlpt.22
-rw-r--r--doc/man/nvme_resv_racqa.22
-rw-r--r--doc/man/nvme_resv_register.22
-rw-r--r--doc/man/nvme_resv_release.22
-rw-r--r--doc/man/nvme_resv_report.22
-rw-r--r--doc/man/nvme_resv_rrega.22
-rw-r--r--doc/man/nvme_resv_rrela.22
-rw-r--r--doc/man/nvme_resv_rtype.22
-rw-r--r--doc/man/nvme_resv_status.22
-rw-r--r--doc/man/nvme_revoke_tls_key.22
-rw-r--r--doc/man/nvme_sanitize_compln_event.22
-rw-r--r--doc/man/nvme_sanitize_log_page.220
-rw-r--r--doc/man/nvme_sanitize_nvm.22
-rw-r--r--doc/man/nvme_sanitize_sanact.28
-rw-r--r--doc/man/nvme_sanitize_ssi.295
-rw-r--r--doc/man/nvme_sanitize_sstat.216
-rw-r--r--doc/man/nvme_sanitize_start_event.22
-rw-r--r--doc/man/nvme_scan.22
-rw-r--r--doc/man/nvme_scan_ctrl.22
-rw-r--r--doc/man/nvme_scan_ctrl_namespace_paths.22
-rw-r--r--doc/man/nvme_scan_ctrl_namespaces.22
-rw-r--r--doc/man/nvme_scan_ctrls.22
-rw-r--r--doc/man/nvme_scan_namespace.22
-rw-r--r--doc/man/nvme_scan_subsystem_namespaces.22
-rw-r--r--doc/man/nvme_scan_subsystems.22
-rw-r--r--doc/man/nvme_scan_tls_keys.22
-rw-r--r--doc/man/nvme_scan_topology.22
-rw-r--r--doc/man/nvme_secondary_ctrl.22
-rw-r--r--doc/man/nvme_secondary_ctrl_list.22
-rw-r--r--doc/man/nvme_security_receive.22
-rw-r--r--doc/man/nvme_security_send.22
-rw-r--r--doc/man/nvme_self_test_log.22
-rw-r--r--doc/man/nvme_set_feat_event_layout.22
-rw-r--r--doc/man/nvme_set_feature_event.22
-rw-r--r--doc/man/nvme_set_features.22
-rw-r--r--doc/man/nvme_set_features_arbitration.22
-rw-r--r--doc/man/nvme_set_features_async_event.22
-rw-r--r--doc/man/nvme_set_features_auto_pst.22
-rw-r--r--doc/man/nvme_set_features_data.22
-rw-r--r--doc/man/nvme_set_features_endurance_evt_cfg.22
-rw-r--r--doc/man/nvme_set_features_err_recovery.22
-rw-r--r--doc/man/nvme_set_features_hctm.22
-rw-r--r--doc/man/nvme_set_features_host_behavior.22
-rw-r--r--doc/man/nvme_set_features_host_id.22
-rw-r--r--doc/man/nvme_set_features_iocs_profile.22
-rw-r--r--doc/man/nvme_set_features_irq_coalesce.22
-rw-r--r--doc/man/nvme_set_features_irq_config.22
-rw-r--r--doc/man/nvme_set_features_lba_range.22
-rw-r--r--doc/man/nvme_set_features_lba_sts_interval.22
-rw-r--r--doc/man/nvme_set_features_nopsc.22
-rw-r--r--doc/man/nvme_set_features_plm_config.22
-rw-r--r--doc/man/nvme_set_features_plm_window.22
-rw-r--r--doc/man/nvme_set_features_power_mgmt.22
-rw-r--r--doc/man/nvme_set_features_resv_mask.22
-rw-r--r--doc/man/nvme_set_features_resv_mask2.22
-rw-r--r--doc/man/nvme_set_features_resv_persist.22
-rw-r--r--doc/man/nvme_set_features_resv_persist2.22
-rw-r--r--doc/man/nvme_set_features_rrl.22
-rw-r--r--doc/man/nvme_set_features_sanitize.22
-rw-r--r--doc/man/nvme_set_features_simple.22
-rw-r--r--doc/man/nvme_set_features_sw_progress.22
-rw-r--r--doc/man/nvme_set_features_temp_thresh.22
-rw-r--r--doc/man/nvme_set_features_timestamp.22
-rw-r--r--doc/man/nvme_set_features_volatile_wc.22
-rw-r--r--doc/man/nvme_set_features_write_atomic.22
-rw-r--r--doc/man/nvme_set_features_write_protect.22
-rw-r--r--doc/man/nvme_set_features_write_protect2.22
-rw-r--r--doc/man/nvme_set_keyring.22
-rw-r--r--doc/man/nvme_set_property.22
-rw-r--r--doc/man/nvme_set_root.22
-rw-r--r--doc/man/nvme_smart_crit.22
-rw-r--r--doc/man/nvme_smart_egcw.22
-rw-r--r--doc/man/nvme_smart_log.22
-rw-r--r--doc/man/nvme_st_code.22
-rw-r--r--doc/man/nvme_st_curr_op.22
-rw-r--r--doc/man/nvme_st_result.22
-rw-r--r--doc/man/nvme_st_valid_diag_info.22
-rw-r--r--doc/man/nvme_status_code.22
-rw-r--r--doc/man/nvme_status_code_type.22
-rw-r--r--doc/man/nvme_status_equals.22
-rw-r--r--doc/man/nvme_status_field.241
-rw-r--r--doc/man/nvme_status_get_type.22
-rw-r--r--doc/man/nvme_status_get_value.22
-rw-r--r--doc/man/nvme_status_result.22
-rw-r--r--doc/man/nvme_status_to_errno.22
-rw-r--r--doc/man/nvme_status_to_string.22
-rw-r--r--doc/man/nvme_status_type.22
-rw-r--r--doc/man/nvme_streams_directive_params.22
-rw-r--r--doc/man/nvme_streams_directive_status.22
-rw-r--r--doc/man/nvme_submit_admin_passthru.22
-rw-r--r--doc/man/nvme_submit_admin_passthru64.22
-rw-r--r--doc/man/nvme_submit_io_passthru.22
-rw-r--r--doc/man/nvme_submit_io_passthru64.22
-rw-r--r--doc/man/nvme_subsys_filter.22
-rw-r--r--doc/man/nvme_subsys_type.22
-rw-r--r--doc/man/nvme_subsystem_first_ctrl.22
-rw-r--r--doc/man/nvme_subsystem_first_ns.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ctrl.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ctrl_safe.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ns.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ns_safe.22
-rw-r--r--doc/man/nvme_subsystem_get_application.22
-rw-r--r--doc/man/nvme_subsystem_get_host.22
-rw-r--r--doc/man/nvme_subsystem_get_iopolicy.22
-rw-r--r--doc/man/nvme_subsystem_get_name.22
-rw-r--r--doc/man/nvme_subsystem_get_nqn.22
-rw-r--r--doc/man/nvme_subsystem_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_subsystem_get_type.22
-rw-r--r--doc/man/nvme_subsystem_lookup_namespace.22
-rw-r--r--doc/man/nvme_subsystem_next_ctrl.22
-rw-r--r--doc/man/nvme_subsystem_next_ns.22
-rw-r--r--doc/man/nvme_subsystem_release_fds.22
-rw-r--r--doc/man/nvme_subsystem_reset.22
-rw-r--r--doc/man/nvme_subsystem_set_application.22
-rw-r--r--doc/man/nvme_supported_cap_config_list_log.22
-rw-r--r--doc/man/nvme_supported_log_pages.22
-rw-r--r--doc/man/nvme_telemetry_da.22
-rw-r--r--doc/man/nvme_telemetry_log.22
-rw-r--r--doc/man/nvme_thermal_exc_event.22
-rw-r--r--doc/man/nvme_time_stamp_change_event.22
-rw-r--r--doc/man/nvme_timestamp.22
-rw-r--r--doc/man/nvme_unit.22
-rw-r--r--doc/man/nvme_unlink_ctrl.22
-rw-r--r--doc/man/nvme_update_config.22
-rw-r--r--doc/man/nvme_update_key.22
-rw-r--r--doc/man/nvme_uring_cmd.22
-rw-r--r--doc/man/nvme_verify.22
-rw-r--r--doc/man/nvme_version.22
-rw-r--r--doc/man/nvme_virt_mgmt_act.22
-rw-r--r--doc/man/nvme_virt_mgmt_rt.22
-rw-r--r--doc/man/nvme_virtual_mgmt.22
-rw-r--r--doc/man/nvme_vs.22
-rw-r--r--doc/man/nvme_write.22
-rw-r--r--doc/man/nvme_write_uncorrectable.22
-rw-r--r--doc/man/nvme_write_zeros.22
-rw-r--r--doc/man/nvme_zns_append.22
-rw-r--r--doc/man/nvme_zns_changed_zone_log.22
-rw-r--r--doc/man/nvme_zns_desc.22
-rw-r--r--doc/man/nvme_zns_id_ctrl.22
-rw-r--r--doc/man/nvme_zns_id_ns.22
-rw-r--r--doc/man/nvme_zns_identify_ctrl.22
-rw-r--r--doc/man/nvme_zns_identify_ns.22
-rw-r--r--doc/man/nvme_zns_lbafe.22
-rw-r--r--doc/man/nvme_zns_mgmt_recv.22
-rw-r--r--doc/man/nvme_zns_mgmt_send.22
-rw-r--r--doc/man/nvme_zns_recv_action.22
-rw-r--r--doc/man/nvme_zns_report_options.22
-rw-r--r--doc/man/nvme_zns_report_zones.22
-rw-r--r--doc/man/nvme_zns_send_action.22
-rw-r--r--doc/man/nvme_zns_za.22
-rw-r--r--doc/man/nvme_zns_zs.22
-rw-r--r--doc/man/nvme_zns_zt.22
-rw-r--r--doc/man/nvme_zone_report.22
-rw-r--r--doc/man/nvmf_add_ctrl.22
-rw-r--r--doc/man/nvmf_addr_family.22
-rw-r--r--doc/man/nvmf_adrfam_str.22
-rw-r--r--doc/man/nvmf_cms_str.22
-rw-r--r--doc/man/nvmf_connect_ctrl.214
-rw-r--r--doc/man/nvmf_connect_data.22
-rw-r--r--doc/man/nvmf_connect_disc_entry.22
-rw-r--r--doc/man/nvmf_default_config.22
-rw-r--r--doc/man/nvmf_dim_data.22
-rw-r--r--doc/man/nvmf_dim_entfmt.22
-rw-r--r--doc/man/nvmf_dim_etype.22
-rw-r--r--doc/man/nvmf_dim_tas.22
-rw-r--r--doc/man/nvmf_disc_eflags.22
-rw-r--r--doc/man/nvmf_disc_log_entry.22
-rw-r--r--doc/man/nvmf_discovery_log.22
-rw-r--r--doc/man/nvmf_eflags_str.22
-rw-r--r--doc/man/nvmf_exat_len.22
-rw-r--r--doc/man/nvmf_exattype.22
-rw-r--r--doc/man/nvmf_ext_attr.22
-rw-r--r--doc/man/nvmf_ext_die.22
-rw-r--r--doc/man/nvmf_get_discovery_log.22
-rw-r--r--doc/man/nvmf_get_discovery_wargs.22
-rw-r--r--doc/man/nvmf_hostid_from_file.22
-rw-r--r--doc/man/nvmf_hostid_generate.22
-rw-r--r--doc/man/nvmf_hostnqn_from_file.22
-rw-r--r--doc/man/nvmf_hostnqn_generate.22
-rw-r--r--doc/man/nvmf_hostnqn_generate_from_hostid.22
-rw-r--r--doc/man/nvmf_log_discovery_lid_support.22
-rw-r--r--doc/man/nvmf_log_discovery_lsp.22
-rw-r--r--doc/man/nvmf_prtype_str.22
-rw-r--r--doc/man/nvmf_qptype_str.22
-rw-r--r--doc/man/nvmf_rdma_cms.22
-rw-r--r--doc/man/nvmf_rdma_prtype.22
-rw-r--r--doc/man/nvmf_rdma_qptype.22
-rw-r--r--doc/man/nvmf_register_ctrl.22
-rw-r--r--doc/man/nvmf_sectype_str.22
-rw-r--r--doc/man/nvmf_subtype_str.22
-rw-r--r--doc/man/nvmf_tcp_sectype.22
-rw-r--r--doc/man/nvmf_treq.22
-rw-r--r--doc/man/nvmf_treq_str.22
-rw-r--r--doc/man/nvmf_trtype.22
-rw-r--r--doc/man/nvmf_trtype_str.22
-rw-r--r--doc/man/nvmf_update_config.22
-rw-r--r--doc/rst/fabrics.rst23
-rw-r--r--doc/rst/ioctl.rst21
-rw-r--r--doc/rst/linux.rst61
-rw-r--r--doc/rst/mi.rst108
-rw-r--r--doc/rst/tree.rst81
-rw-r--r--doc/rst/types.rst581
-rw-r--r--doc/rst/util.rst3
-rw-r--r--examples/mi-mctp.c105
-rw-r--r--meson.build2
-rwxr-xr-xscripts/build.sh7
-rw-r--r--src/libnvme-mi.map5
-rw-r--r--src/libnvme.map14
-rw-r--r--src/nvme/api-types.h2
-rw-r--r--src/nvme/fabrics.c95
-rw-r--r--src/nvme/fabrics.h13
-rw-r--r--src/nvme/ioctl.c104
-rw-r--r--src/nvme/ioctl.h36
-rw-r--r--src/nvme/json.c155
-rw-r--r--src/nvme/linux.c452
-rw-r--r--src/nvme/linux.h37
-rw-r--r--src/nvme/mi.c82
-rw-r--r--src/nvme/mi.h94
-rw-r--r--src/nvme/private.h6
-rw-r--r--src/nvme/tree.c138
-rw-r--r--src/nvme/tree.h45
-rw-r--r--src/nvme/types.h444
-rw-r--r--src/nvme/util.c6
-rw-r--r--src/nvme/util.h2
-rwxr-xr-x[-rw-r--r--]test/config/config-diff.sh52
-rw-r--r--test/config/data/tls_key-1.json21
-rw-r--r--test/config/data/tls_key-1.out21
-rw-r--r--test/config/data/tls_key-2.json22
-rw-r--r--test/config/data/tls_key-2.out21
-rw-r--r--test/config/meson.build45
-rw-r--r--test/config/psk-json.c89
-rw-r--r--test/meson.build9
-rw-r--r--test/mi.c99
-rw-r--r--test/psk.c225
946 files changed, 4912 insertions, 1267 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 384a410..10a358a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -17,7 +17,7 @@ jobs:
compiler: [gcc, clang]
buildtype: [debug, release]
container:
- image: ghcr.io/igaw/linux-nvme/debian.python:latest
+ image: ghcr.io/linux-nvme/debian.python:latest
steps:
- uses: actions/checkout@v4
- name: build
@@ -43,10 +43,16 @@ jobs:
- uses: actions/checkout@v4
- name: enable foreign arch
uses: dbhi/qus/action@main
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
- name: compile and run unit tests
uses: mosteo-actions/docker-run@v2
with:
- image: ghcr.io/igaw/linux-nvme/ubuntu-cross-${{ matrix.arch }}:latest
+ image: ghcr.io/linux-nvme/ubuntu-cross-${{ matrix.arch }}:latest
guest-dir: /build
host-dir: ${{ github.workspace }}
command: |
@@ -65,7 +71,7 @@ jobs:
name: libdbus
runs-on: ubuntu-latest
container:
- image: ghcr.io/igaw/linux-nvme/debian:latest
+ image: ghcr.io/linux-nvme/debian:latest
steps:
- uses: actions/checkout@v4
- name: build
@@ -83,7 +89,7 @@ jobs:
name: fallback shared libraries
runs-on: ubuntu-latest
container:
- image: ghcr.io/igaw/linux-nvme/debian:latest
+ image: ghcr.io/linux-nvme/debian:latest
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v4
@@ -101,7 +107,7 @@ jobs:
name: muon minimal static
runs-on: ubuntu-latest
container:
- image: ghcr.io/igaw/linux-nvme/debian:latest
+ image: ghcr.io/linux-nvme/debian:latest
steps:
- uses: actions/checkout@v4
- name: build
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index 97ff3f4..27636de 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -11,7 +11,7 @@ jobs:
name: code coverage
runs-on: ubuntu-latest
container:
- image: ghcr.io/igaw/linux-nvme/debian.python:latest
+ image: ghcr.io/linux-nvme/debian.python:latest
steps:
- uses: actions/checkout@v4
- name: build
diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
index 9b58371..d5687f0 100644
--- a/.github/workflows/docs.yaml
+++ b/.github/workflows/docs.yaml
@@ -14,7 +14,7 @@ jobs:
name: build documentation
runs-on: ubuntu-latest
container:
- image: ghcr.io/igaw/linux-nvme/debian:latest
+ image: ghcr.io/linux-nvme/debian:latest
steps:
- uses: actions/checkout@v4
- name: build
diff --git a/.github/workflows/release-python.yml b/.github/workflows/release-python.yml
index 3ca68a9..d967918 100644
--- a/.github/workflows/release-python.yml
+++ b/.github/workflows/release-python.yml
@@ -16,7 +16,7 @@ jobs:
name: Build source distribution
runs-on: ubuntu-latest
container:
- image: ghcr.io/igaw/linux-nvme/debian.python:latest
+ image: ghcr.io/linux-nvme/debian.python:latest
steps:
- uses: actions/checkout@v4
diff --git a/doc/config-schema.json b/doc/config-schema.json
index cb0769f..29ef77e 100644
--- a/doc/config-schema.json
+++ b/doc/config-schema.json
@@ -102,8 +102,12 @@
"description": "Keyring for TLS key lookup",
"type": "string"
},
+ "tls_key_identity": {
+ "description": "PSK identity for the TLS PSK (tls_key)",
+ "type": "string"
+ },
"tls_key": {
- "description": "TLS key for the connection",
+ "description": "TLS PSK in PSK interchange format",
"type": "string"
},
"nr_io_queues": {
diff --git a/doc/config-schema.json.in b/doc/config-schema.json.in
index cb0769f..29ef77e 100644
--- a/doc/config-schema.json.in
+++ b/doc/config-schema.json.in
@@ -102,8 +102,12 @@
"description": "Keyring for TLS key lookup",
"type": "string"
},
+ "tls_key_identity": {
+ "description": "PSK identity for the TLS PSK (tls_key)",
+ "type": "string"
+ },
"tls_key": {
- "description": "TLS key for the connection",
+ "description": "TLS PSK in PSK interchange format",
"type": "string"
},
"nr_io_queues": {
diff --git a/doc/man/nbft_control.2 b/doc/man/nbft_control.2
index f904f51..7341b7d 100644
--- a/doc/man/nbft_control.2
+++ b/doc/man/nbft_control.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_control" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_control" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_control \- NBFT Table - Control Descriptor (Figure 8)
.SH SYNOPSIS
diff --git a/doc/man/nbft_control_flags.2 b/doc/man/nbft_control_flags.2
index ce39778..3e90994 100644
--- a/doc/man/nbft_control_flags.2
+++ b/doc/man/nbft_control_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_control_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_control_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_control_flags \- Control Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_desc_type.2 b/doc/man/nbft_desc_type.2
index 8cdc276..dc3f0f3 100644
--- a/doc/man/nbft_desc_type.2
+++ b/doc/man/nbft_desc_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_desc_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_desc_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_desc_type \- NBFT Elements - Descriptor Types (Figure 5)
.SH SYNOPSIS
diff --git a/doc/man/nbft_discovery.2 b/doc/man/nbft_discovery.2
index 39f36a4..3e94d7e 100644
--- a/doc/man/nbft_discovery.2
+++ b/doc/man/nbft_discovery.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_discovery" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_discovery" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_discovery \- Discovery Descriptor (Figure 24)
.SH SYNOPSIS
diff --git a/doc/man/nbft_discovery_flags.2 b/doc/man/nbft_discovery_flags.2
index 2fdd186..20dc264 100644
--- a/doc/man/nbft_discovery_flags.2
+++ b/doc/man/nbft_discovery_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_discovery_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_discovery_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_discovery_flags \- Discovery Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_header.2 b/doc/man/nbft_header.2
index 09c01b4..81c46c7 100644
--- a/doc/man/nbft_header.2
+++ b/doc/man/nbft_header.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_header" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_header" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_header \- NBFT Table - Header (Figure 8)
.SH SYNOPSIS
diff --git a/doc/man/nbft_heap_obj.2 b/doc/man/nbft_heap_obj.2
index de03f47..8d6c95b 100644
--- a/doc/man/nbft_heap_obj.2
+++ b/doc/man/nbft_heap_obj.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_heap_obj" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_heap_obj" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_heap_obj \- NBFT Header Driver Signature
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi.2 b/doc/man/nbft_hfi.2
index 3fdd1bc..a1904fe 100644
--- a/doc/man/nbft_hfi.2
+++ b/doc/man/nbft_hfi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_hfi" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_hfi" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_hfi \- Host Fabric Interface (HFI) Descriptor (Figure 11)
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi_flags.2 b/doc/man/nbft_hfi_flags.2
index 1507c86..e53ee50 100644
--- a/doc/man/nbft_hfi_flags.2
+++ b/doc/man/nbft_hfi_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_hfi_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_hfi_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_hfi_flags \- HFI Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi_info_tcp.2 b/doc/man/nbft_hfi_info_tcp.2
index 6b029ff..83e12be 100644
--- a/doc/man/nbft_hfi_info_tcp.2
+++ b/doc/man/nbft_hfi_info_tcp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_hfi_info_tcp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_hfi_info_tcp" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_hfi_info_tcp \- HFI Transport Info Descriptor - NVMe/TCP (Figure 13)
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi_info_tcp_flags.2 b/doc/man/nbft_hfi_info_tcp_flags.2
index a947e45..7c2b446 100644
--- a/doc/man/nbft_hfi_info_tcp_flags.2
+++ b/doc/man/nbft_hfi_info_tcp_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_hfi_info_tcp_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_hfi_info_tcp_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_hfi_info_tcp_flags \- HFI Transport Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_host.2 b/doc/man/nbft_host.2
index 9d95a86..7ce1a2c 100644
--- a/doc/man/nbft_host.2
+++ b/doc/man/nbft_host.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_host" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_host" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_host \- Host Descriptor (Figure 9)
.SH SYNOPSIS
diff --git a/doc/man/nbft_host_flags.2 b/doc/man/nbft_host_flags.2
index 1b7ca61..f9d1e10 100644
--- a/doc/man/nbft_host_flags.2
+++ b/doc/man/nbft_host_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_host_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_host_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_host_flags \- Host Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_info.2 b/doc/man/nbft_info.2
index 1fcc571..571d2c4 100644
--- a/doc/man/nbft_info.2
+++ b/doc/man/nbft_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_info \- The parsed NBFT table data.
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_discovery.2 b/doc/man/nbft_info_discovery.2
index c68ff83..84ea0c4 100644
--- a/doc/man/nbft_info_discovery.2
+++ b/doc/man/nbft_info_discovery.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_discovery" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_discovery" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_discovery \- Discovery Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_hfi.2 b/doc/man/nbft_info_hfi.2
index 5715ef6..b6eb6e0 100644
--- a/doc/man/nbft_info_hfi.2
+++ b/doc/man/nbft_info_hfi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_hfi" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_hfi" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_hfi \- Host Fabric Interface (HFI) Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_hfi_info_tcp.2 b/doc/man/nbft_info_hfi_info_tcp.2
index 9f96903..24940df 100644
--- a/doc/man/nbft_info_hfi_info_tcp.2
+++ b/doc/man/nbft_info_hfi_info_tcp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_hfi_info_tcp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_hfi_info_tcp" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_hfi_info_tcp \- HFI Transport Info Descriptor - NVMe/TCP
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_host.2 b/doc/man/nbft_info_host.2
index 6145857..e0e9de5 100644
--- a/doc/man/nbft_info_host.2
+++ b/doc/man/nbft_info_host.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_host" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_host" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_host \- Host Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_nid_type.2 b/doc/man/nbft_info_nid_type.2
index c10de58..2bb06ec 100644
--- a/doc/man/nbft_info_nid_type.2
+++ b/doc/man/nbft_info_nid_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_info_nid_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_info_nid_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_info_nid_type \- Namespace Identifier Type (NIDT)
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_primary_admin_host_flag.2 b/doc/man/nbft_info_primary_admin_host_flag.2
index c82db27..79e5de2 100644
--- a/doc/man/nbft_info_primary_admin_host_flag.2
+++ b/doc/man/nbft_info_primary_admin_host_flag.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_info_primary_admin_host_flag" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_info_primary_admin_host_flag" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_info_primary_admin_host_flag \- Primary Administrative Host Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_security.2 b/doc/man/nbft_info_security.2
index 4b8649e..4f6bd85 100644
--- a/doc/man/nbft_info_security.2
+++ b/doc/man/nbft_info_security.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_security" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_security" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_security \- Security Profile Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_subsystem_ns.2 b/doc/man/nbft_info_subsystem_ns.2
index d3af461..b02222a 100644
--- a/doc/man/nbft_info_subsystem_ns.2
+++ b/doc/man/nbft_info_subsystem_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_subsystem_ns" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_subsystem_ns" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_subsystem_ns \- Subsystem Namespace (SSNS) info
.SH SYNOPSIS
diff --git a/doc/man/nbft_security.2 b/doc/man/nbft_security.2
index d16d337..98a597d 100644
--- a/doc/man/nbft_security.2
+++ b/doc/man/nbft_security.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_security" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_security" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_security \- Security Profile Descriptor (Figure 21)
.SH SYNOPSIS
diff --git a/doc/man/nbft_security_flags.2 b/doc/man/nbft_security_flags.2
index 3127023..f573a61 100644
--- a/doc/man/nbft_security_flags.2
+++ b/doc/man/nbft_security_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_security_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_security_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_security_flags \- Security Profile Descriptor Flags (Figure 22)
.SH SYNOPSIS
diff --git a/doc/man/nbft_security_secret_type.2 b/doc/man/nbft_security_secret_type.2
index 370bfa8..d5ca650 100644
--- a/doc/man/nbft_security_secret_type.2
+++ b/doc/man/nbft_security_secret_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_security_secret_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_security_secret_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_security_secret_type \- Security Profile Descriptor Secret Type
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns.2 b/doc/man/nbft_ssns.2
index be6b79c..b33c563 100644
--- a/doc/man/nbft_ssns.2
+++ b/doc/man/nbft_ssns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_ssns" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_ssns" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_ssns \- Subsystem Namespace (SSNS) Descriptor (Figure 15)
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_ext_info.2 b/doc/man/nbft_ssns_ext_info.2
index 0196ed0..69e9b5b 100644
--- a/doc/man/nbft_ssns_ext_info.2
+++ b/doc/man/nbft_ssns_ext_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_ssns_ext_info" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_ssns_ext_info" "October 2024" "API Manual" LINUX
.SH NAME
struct nbft_ssns_ext_info \- Subsystem and Namespace Extended Information Descriptor (Figure 19)
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_ext_info_flags.2 b/doc/man/nbft_ssns_ext_info_flags.2
index 56e5470..4a6fda3 100644
--- a/doc/man/nbft_ssns_ext_info_flags.2
+++ b/doc/man/nbft_ssns_ext_info_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_ssns_ext_info_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_ssns_ext_info_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_ssns_ext_info_flags \- Subsystem and Namespace Extended Information Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_flags.2 b/doc/man/nbft_ssns_flags.2
index 713737a..7071ecd 100644
--- a/doc/man/nbft_ssns_flags.2
+++ b/doc/man/nbft_ssns_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_ssns_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_ssns_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_ssns_flags \- Subsystem and Namespace Specific Flags Field (Figure 16)
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_trflags.2 b/doc/man/nbft_ssns_trflags.2
index 4dac381..6fe5eaa 100644
--- a/doc/man/nbft_ssns_trflags.2
+++ b/doc/man/nbft_ssns_trflags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_ssns_trflags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_ssns_trflags" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_ssns_trflags \- SSNS Transport Specific Flags Field (Figure 17)
.SH SYNOPSIS
diff --git a/doc/man/nbft_trtype.2 b/doc/man/nbft_trtype.2
index 2f23f3f..2878ff0 100644
--- a/doc/man/nbft_trtype.2
+++ b/doc/man/nbft_trtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_trtype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_trtype" "October 2024" "API Manual" LINUX
.SH NAME
enum nbft_trtype \- NBFT Interface Transport Types (Figure 7)
.SH SYNOPSIS
diff --git a/doc/man/nvme_acq.2 b/doc/man/nvme_acq.2
index 419dd43..f48fbd9 100644
--- a/doc/man/nvme_acq.2
+++ b/doc/man/nvme_acq.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_acq" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_acq" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_acq \- This field indicates the admin completion queue base address
.SH SYNOPSIS
diff --git a/doc/man/nvme_admin_opcode.2 b/doc/man/nvme_admin_opcode.2
index c13def5..30b150c 100644
--- a/doc/man/nvme_admin_opcode.2
+++ b/doc/man/nvme_admin_opcode.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_admin_opcode" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_admin_opcode" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_admin_opcode \- Known NVMe admin opcodes
.SH SYNOPSIS
diff --git a/doc/man/nvme_admin_passthru.2 b/doc/man/nvme_admin_passthru.2
index 07cec0c..203ea64 100644
--- a/doc/man/nvme_admin_passthru.2
+++ b/doc/man/nvme_admin_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_admin_passthru" 9 "nvme_admin_passthru" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_admin_passthru" 9 "nvme_admin_passthru" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_admin_passthru \- Submit an nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_admin_passthru64.2 b/doc/man/nvme_admin_passthru64.2
index 5c09c38..5592ff4 100644
--- a/doc/man/nvme_admin_passthru64.2
+++ b/doc/man/nvme_admin_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_admin_passthru64" 9 "nvme_admin_passthru64" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_admin_passthru64" 9 "nvme_admin_passthru64" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_admin_passthru64 \- Submit a 64-bit nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_css_nvm.2 b/doc/man/nvme_ae_info_css_nvm.2
index dec00d8..b8cf8fb 100644
--- a/doc/man/nvme_ae_info_css_nvm.2
+++ b/doc/man/nvme_ae_info_css_nvm.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_css_nvm" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_css_nvm" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_css_nvm \- Asynchronous Event Information - I/O Command Specific Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_error.2 b/doc/man/nvme_ae_info_error.2
index 4ac7d08..31b30a2 100644
--- a/doc/man/nvme_ae_info_error.2
+++ b/doc/man/nvme_ae_info_error.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_error" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_error" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_error \- Asynchronous Event Information - Error Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_notice.2 b/doc/man/nvme_ae_info_notice.2
index 997a861..e3e0076 100644
--- a/doc/man/nvme_ae_info_notice.2
+++ b/doc/man/nvme_ae_info_notice.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_notice" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_notice" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_notice \- Asynchronous Event Information - Notice
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_smart.2 b/doc/man/nvme_ae_info_smart.2
index 526c009..4cdd39b 100644
--- a/doc/man/nvme_ae_info_smart.2
+++ b/doc/man/nvme_ae_info_smart.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_smart" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_smart" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_smart \- Asynchronous Event Information - SMART / Health Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_type.2 b/doc/man/nvme_ae_type.2
index c1f350b..a9dc521 100644
--- a/doc/man/nvme_ae_type.2
+++ b/doc/man/nvme_ae_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_type \- Asynchronous Event Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_aggregate_endurance_group_event.2 b/doc/man/nvme_aggregate_endurance_group_event.2
index 535f829..f61f7a8 100644
--- a/doc/man/nvme_aggregate_endurance_group_event.2
+++ b/doc/man/nvme_aggregate_endurance_group_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_aggregate_endurance_group_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_aggregate_endurance_group_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_aggregate_endurance_group_event \- Endurance Group Event Aggregate
.SH SYNOPSIS
diff --git a/doc/man/nvme_aggregate_predictable_lat_event.2 b/doc/man/nvme_aggregate_predictable_lat_event.2
index 9fa1785..32163e2 100644
--- a/doc/man/nvme_aggregate_predictable_lat_event.2
+++ b/doc/man/nvme_aggregate_predictable_lat_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_aggregate_predictable_lat_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_aggregate_predictable_lat_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_aggregate_predictable_lat_event \- Predictable Latency Event Aggregate Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_ana_group_desc.2 b/doc/man/nvme_ana_group_desc.2
index e2fe9f5..2a9fc47 100644
--- a/doc/man/nvme_ana_group_desc.2
+++ b/doc/man/nvme_ana_group_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ana_group_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ana_group_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_ana_group_desc \- ANA Group Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ana_log.2 b/doc/man/nvme_ana_log.2
index c6330da..bf7e0bd 100644
--- a/doc/man/nvme_ana_log.2
+++ b/doc/man/nvme_ana_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ana_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ana_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_ana_log \- Asymmetric Namespace Access Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_ana_state.2 b/doc/man/nvme_ana_state.2
index 16aadad..834a984 100644
--- a/doc/man/nvme_ana_state.2
+++ b/doc/man/nvme_ana_state.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ana_state" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ana_state" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ana_state \- ANA Group Descriptor - Asymmetric Namespace Access State
.SH SYNOPSIS
diff --git a/doc/man/nvme_apst_entry.2 b/doc/man/nvme_apst_entry.2
index 62ae584..0b93a4b 100644
--- a/doc/man/nvme_apst_entry.2
+++ b/doc/man/nvme_apst_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_apst_entry" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_apst_entry" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_apst_entry \- Autonomous Power State Transition
.SH SYNOPSIS
diff --git a/doc/man/nvme_aqa.2 b/doc/man/nvme_aqa.2
index b7b615f..a2cf152 100644
--- a/doc/man/nvme_aqa.2
+++ b/doc/man/nvme_aqa.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_aqa" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_aqa" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_aqa \- This field indicates the admin queue attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_asq.2 b/doc/man/nvme_asq.2
index ee7bb0b..b2d24b4 100644
--- a/doc/man/nvme_asq.2
+++ b/doc/man/nvme_asq.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_asq" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_asq" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_asq \- This field indicates the admin submission queue base address
.SH SYNOPSIS
diff --git a/doc/man/nvme_boot_partition.2 b/doc/man/nvme_boot_partition.2
index a15248e..2588e97 100644
--- a/doc/man/nvme_boot_partition.2
+++ b/doc/man/nvme_boot_partition.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_boot_partition" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_boot_partition" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_boot_partition \- Boot Partition Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_boot_partition_info.2 b/doc/man/nvme_boot_partition_info.2
index dcd96d8..fa923d9 100644
--- a/doc/man/nvme_boot_partition_info.2
+++ b/doc/man/nvme_boot_partition_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_boot_partition_info" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_boot_partition_info" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_boot_partition_info \- This field indicates the boot partition information
.SH SYNOPSIS
diff --git a/doc/man/nvme_bpinfo.2 b/doc/man/nvme_bpinfo.2
index 378c080..aafe988 100644
--- a/doc/man/nvme_bpinfo.2
+++ b/doc/man/nvme_bpinfo.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_bpinfo" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_bpinfo" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_bpinfo \- This field indicates the boot partition information
.SH SYNOPSIS
diff --git a/doc/man/nvme_bpmbl.2 b/doc/man/nvme_bpmbl.2
index 05a8d0d..303b192 100644
--- a/doc/man/nvme_bpmbl.2
+++ b/doc/man/nvme_bpmbl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_bpmbl" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_bpmbl" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_bpmbl \- This field indicates the boot partition memory buffer location
.SH SYNOPSIS
diff --git a/doc/man/nvme_bprsel.2 b/doc/man/nvme_bprsel.2
index c31340d..4fb3134 100644
--- a/doc/man/nvme_bprsel.2
+++ b/doc/man/nvme_bprsel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_bprsel" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_bprsel" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_bprsel \- This field indicates the boot partition read select
.SH SYNOPSIS
diff --git a/doc/man/nvme_cap.2 b/doc/man/nvme_cap.2
index 29bd98d..c6827c9 100644
--- a/doc/man/nvme_cap.2
+++ b/doc/man/nvme_cap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cap" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cap" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cap \- This field indicates the controller capabilities register
.SH SYNOPSIS
diff --git a/doc/man/nvme_capacity_config_desc.2 b/doc/man/nvme_capacity_config_desc.2
index dbf5df3..cc95077 100644
--- a/doc/man/nvme_capacity_config_desc.2
+++ b/doc/man/nvme_capacity_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_capacity_config_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_capacity_config_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_capacity_config_desc \- Capacity Configuration structure definitions
.SH SYNOPSIS
diff --git a/doc/man/nvme_capacity_mgmt.2 b/doc/man/nvme_capacity_mgmt.2
index def022e..fd044b2 100644
--- a/doc/man/nvme_capacity_mgmt.2
+++ b/doc/man/nvme_capacity_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_capacity_mgmt" 9 "nvme_capacity_mgmt" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_capacity_mgmt" 9 "nvme_capacity_mgmt" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_capacity_mgmt \- Capacity management command
.SH SYNOPSIS
diff --git a/doc/man/nvme_cc.2 b/doc/man/nvme_cc.2
index 7d96ecc..d332b34 100644
--- a/doc/man/nvme_cc.2
+++ b/doc/man/nvme_cc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cc \- This field indicates the controller configuration
.SH SYNOPSIS
diff --git a/doc/man/nvme_change_ns_event.2 b/doc/man/nvme_change_ns_event.2
index 0c235a6..0f8229c 100644
--- a/doc/man/nvme_change_ns_event.2
+++ b/doc/man/nvme_change_ns_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_change_ns_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_change_ns_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_change_ns_event \- Change Namespace Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_channel_config_desc.2 b/doc/man/nvme_channel_config_desc.2
index b014730..7bef2b4 100644
--- a/doc/man/nvme_channel_config_desc.2
+++ b/doc/man/nvme_channel_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_channel_config_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_channel_config_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_channel_config_desc \- Channel Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmb_size.2 b/doc/man/nvme_cmb_size.2
index f6e4f5e..daba3fc 100644
--- a/doc/man/nvme_cmb_size.2
+++ b/doc/man/nvme_cmb_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_cmb_size" 9 "nvme_cmb_size" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_cmb_size" 9 "nvme_cmb_size" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_cmb_size \- Calculate size of the controller memory buffer
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmbebs.2 b/doc/man/nvme_cmbebs.2
index 222dbba..16a3ce1 100644
--- a/doc/man/nvme_cmbebs.2
+++ b/doc/man/nvme_cmbebs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmbebs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmbebs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmbebs \- This field indicates the controller memory buffer elasticity buffer size
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmbloc.2 b/doc/man/nvme_cmbloc.2
index 1878c41..306ba70 100644
--- a/doc/man/nvme_cmbloc.2
+++ b/doc/man/nvme_cmbloc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmbloc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmbloc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmbloc \- This field indicates the controller memory buffer location
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmbmsc.2 b/doc/man/nvme_cmbmsc.2
index 69e9ccf..c9495e3 100644
--- a/doc/man/nvme_cmbmsc.2
+++ b/doc/man/nvme_cmbmsc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmbmsc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmbmsc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmbmsc \- This field indicates the controller memory buffer memory space control
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmbsts.2 b/doc/man/nvme_cmbsts.2
index a522a83..8e0caed 100644
--- a/doc/man/nvme_cmbsts.2
+++ b/doc/man/nvme_cmbsts.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmbsts" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmbsts" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmbsts \- This field indicates the controller memory buffer status
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmbswtp.2 b/doc/man/nvme_cmbswtp.2
index f6bbb18..3cf5a79 100644
--- a/doc/man/nvme_cmbswtp.2
+++ b/doc/man/nvme_cmbswtp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmbswtp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmbswtp" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmbswtp \- This field indicates the controller memory buffer sustained write throughput
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmbsz.2 b/doc/man/nvme_cmbsz.2
index f10308d..32faecd 100644
--- a/doc/man/nvme_cmbsz.2
+++ b/doc/man/nvme_cmbsz.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmbsz" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmbsz" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmbsz \- This field indicates the controller memory buffer size
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_effects.2 b/doc/man/nvme_cmd_effects.2
index 545b7bf..f2ad58c 100644
--- a/doc/man/nvme_cmd_effects.2
+++ b/doc/man/nvme_cmd_effects.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_effects" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_effects" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_effects \- Commands Supported and Effects
.SH SYNOPSIS
@@ -24,6 +24,10 @@ enum nvme_cmd_effects {
,
.br
.br
+.BI " NVME_CMD_EFFECTS_CSER_MASK"
+,
+.br
+.br
.BI " NVME_CMD_EFFECTS_CSE_MASK"
,
.br
@@ -42,6 +46,8 @@ Namespace Capability Change
Namespace Inventory Change
.IP "NVME_CMD_EFFECTS_CCC" 12
Controller Capability Change
+.IP "NVME_CMD_EFFECTS_CSER_MASK" 12
+Command Submission and Execution Relaxations
.IP "NVME_CMD_EFFECTS_CSE_MASK" 12
Command Submission and Execution
.IP "NVME_CMD_EFFECTS_UUID_SEL" 12
diff --git a/doc/man/nvme_cmd_effects_log.2 b/doc/man/nvme_cmd_effects_log.2
index 07fe337..7ff4299 100644
--- a/doc/man/nvme_cmd_effects_log.2
+++ b/doc/man/nvme_cmd_effects_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_cmd_effects_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_cmd_effects_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_cmd_effects_log \- Commands Supported and Effects Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_mset.2 b/doc/man/nvme_cmd_format_mset.2
index e55cd44..bfb928c 100644
--- a/doc/man/nvme_cmd_format_mset.2
+++ b/doc/man/nvme_cmd_format_mset.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_mset" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_mset" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_mset \- Format NVM - Metadata Settings
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_pi.2 b/doc/man/nvme_cmd_format_pi.2
index f1359b8..6545278 100644
--- a/doc/man/nvme_cmd_format_pi.2
+++ b/doc/man/nvme_cmd_format_pi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_pi" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_pi" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_pi \- Format NVM - Protection Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_pil.2 b/doc/man/nvme_cmd_format_pil.2
index d0bfa40..e49caaa 100644
--- a/doc/man/nvme_cmd_format_pil.2
+++ b/doc/man/nvme_cmd_format_pil.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_pil" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_pil" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_pil \- Format NVM - Protection Information Location
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_ses.2 b/doc/man/nvme_cmd_format_ses.2
index 25b8ba4..3c4755b 100644
--- a/doc/man/nvme_cmd_format_ses.2
+++ b/doc/man/nvme_cmd_format_ses.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_ses" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_ses" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_ses \- Format NVM - Secure Erase Settings
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_get_log_lid.2 b/doc/man/nvme_cmd_get_log_lid.2
index 4b61134..14bf67c 100644
--- a/doc/man/nvme_cmd_get_log_lid.2
+++ b/doc/man/nvme_cmd_get_log_lid.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_get_log_lid" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_get_log_lid" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_get_log_lid \- Get Log Page -Log Page Identifiers
.SH SYNOPSIS
@@ -92,10 +92,34 @@ enum nvme_cmd_get_log_lid {
,
.br
.br
+.BI " NVME_LOG_LID_ROTATIONAL_MEDIA_INFO"
+,
+.br
+.br
+.BI " NVME_LOG_LID_DISPERSED_NS_PARTICIPATING_NSS"
+,
+.br
+.br
+.BI " NVME_LOG_LID_MGMT_ADDR_LIST"
+,
+.br
+.br
.BI " NVME_LOG_LID_PHY_RX_EOM"
,
.br
.br
+.BI " NVME_LOG_LID_REACHABILITY_GROUPS"
+,
+.br
+.br
+.BI " NVME_LOG_LID_REACHABILITY_ASSOCIATIONS"
+,
+.br
+.br
+.BI " NVME_LOG_LID_CHANGED_ALLOC_NS_LIST"
+,
+.br
+.br
.BI " NVME_LOG_LID_FDP_CONFIGS"
,
.br
@@ -116,6 +140,18 @@ enum nvme_cmd_get_log_lid {
,
.br
.br
+.BI " NVME_LOG_LID_HOST_DISCOVER"
+,
+.br
+.br
+.BI " NVME_LOG_LID_AVE_DISCOVER"
+,
+.br
+.br
+.BI " NVME_LOG_LID_PULL_MODEL_DDC_REQ"
+,
+.br
+.br
.BI " NVME_LOG_LID_RESERVATION"
,
.br
@@ -172,8 +208,20 @@ NVMe-MI Commands Supported and Effects
Command and Feature Lockdown
.IP "NVME_LOG_LID_BOOT_PARTITION" 12
Boot Partition
+.IP "NVME_LOG_LID_ROTATIONAL_MEDIA_INFO" 12
+Rotational Media Information
+.IP "NVME_LOG_LID_DISPERSED_NS_PARTICIPATING_NSS" 12
+Dispersed Namespace Participating NVM Subsystems
+.IP "NVME_LOG_LID_MGMT_ADDR_LIST" 12
+Management Address List
.IP "NVME_LOG_LID_PHY_RX_EOM" 12
Physical Interface Receiver Eye Opening Measurement
+.IP "NVME_LOG_LID_REACHABILITY_GROUPS" 12
+Reachability Groups
+.IP "NVME_LOG_LID_REACHABILITY_ASSOCIATIONS" 12
+Reachability Associations
+.IP "NVME_LOG_LID_CHANGED_ALLOC_NS_LIST" 12
+Changed Allocated Namespace List
.IP "NVME_LOG_LID_FDP_CONFIGS" 12
FDP Configurations
.IP "NVME_LOG_LID_FDP_RUH_USAGE" 12
@@ -184,6 +232,12 @@ FDP Statistics
FDP Events
.IP "NVME_LOG_LID_DISCOVER" 12
Discovery
+.IP "NVME_LOG_LID_HOST_DISCOVER" 12
+Host Discovery
+.IP "NVME_LOG_LID_AVE_DISCOVER" 12
+AVE Discovery
+.IP "NVME_LOG_LID_PULL_MODEL_DDC_REQ" 12
+Pull Model DDC Request
.IP "NVME_LOG_LID_RESERVATION" 12
Reservation Notification
.IP "NVME_LOG_LID_SANITIZE" 12
diff --git a/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2 b/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2
index 296824f..9ef4bfb 100644
--- a/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2
+++ b/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_get_log_telemetry_host_lsp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_get_log_telemetry_host_lsp" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_get_log_telemetry_host_lsp \- Telemetry Host-Initiated log specific field
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmic.2 b/doc/man/nvme_cmic.2
index ab882a2..0e79755 100644
--- a/doc/man/nvme_cmic.2
+++ b/doc/man/nvme_cmic.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmic" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmic" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmic \- This field indicates the controller multi-path I/O and NS sharing capabilities
.SH SYNOPSIS
diff --git a/doc/man/nvme_compare.2 b/doc/man/nvme_compare.2
index 7c4888f..51bc899 100644
--- a/doc/man/nvme_compare.2
+++ b/doc/man/nvme_compare.2
@@ -1,4 +1,4 @@
-.TH "nvme_compare" 9 "nvme_compare" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_compare" 9 "nvme_compare" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_compare \- Submit an nvme user compare command
.SH SYNOPSIS
diff --git a/doc/man/nvme_connect_err.2 b/doc/man/nvme_connect_err.2
index 01092ee..02bca60 100644
--- a/doc/man/nvme_connect_err.2
+++ b/doc/man/nvme_connect_err.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_connect_err" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_connect_err" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_connect_err \- nvme connect error codes
.SH SYNOPSIS
@@ -81,6 +81,10 @@ enum nvme_connect_err {
.br
.br
.BI " ENVME_CONNECT_IGNORED"
+,
+.br
+.br
+.BI " ENVME_CONNECT_NOKEY"
};
.SH Constants
@@ -124,3 +128,5 @@ connection refused
cannot assign requested address
.IP "ENVME_CONNECT_IGNORED" 12
connect attempt is ignored due to configuration
+.IP "ENVME_CONNECT_NOKEY" 12
+the TLS key is missing
diff --git a/doc/man/nvme_constants.2 b/doc/man/nvme_constants.2
index 0883a3c..0a5f062 100644
--- a/doc/man/nvme_constants.2
+++ b/doc/man/nvme_constants.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_constants" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_constants" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_constants \- A place to stash various constant nvme values
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy.2 b/doc/man/nvme_copy.2
index 65ae000..ac087f9 100644
--- a/doc/man/nvme_copy.2
+++ b/doc/man/nvme_copy.2
@@ -1,4 +1,4 @@
-.TH "nvme_copy" 9 "nvme_copy" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_copy" 9 "nvme_copy" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_copy \- Copy command
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range.2 b/doc/man/nvme_copy_range.2
index 05733a1..d5b78d2 100644
--- a/doc/man/nvme_copy_range.2
+++ b/doc/man/nvme_copy_range.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range \- Copy - Source Range Entries Descriptor Format
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_f1.2 b/doc/man/nvme_copy_range_f1.2
index de17e96..831bea4 100644
--- a/doc/man/nvme_copy_range_f1.2
+++ b/doc/man/nvme_copy_range_f1.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range_f1" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range_f1" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range_f1 \- Copy - Source Range Entries Descriptor Format 1h
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_f2.2 b/doc/man/nvme_copy_range_f2.2
index 74979fb..674451f 100644
--- a/doc/man/nvme_copy_range_f2.2
+++ b/doc/man/nvme_copy_range_f2.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range_f2" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range_f2" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range_f2 \- Copy - Source Range Entries Descriptor Format 2h
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_f3.2 b/doc/man/nvme_copy_range_f3.2
index 1eb2da6..5cdc9b7 100644
--- a/doc/man/nvme_copy_range_f3.2
+++ b/doc/man/nvme_copy_range_f3.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range_f3" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range_f3" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range_f3 \- Copy - Source Range Entries Descriptor Format 3h
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_sopt.2 b/doc/man/nvme_copy_range_sopt.2
index e6b934a..90bdbc0 100644
--- a/doc/man/nvme_copy_range_sopt.2
+++ b/doc/man/nvme_copy_range_sopt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_copy_range_sopt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_copy_range_sopt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_copy_range_sopt \- NVMe Copy Range Source Options
.SH SYNOPSIS
diff --git a/doc/man/nvme_create_ctrl.2 b/doc/man/nvme_create_ctrl.2
index 1832b7c..f4e3d8b 100644
--- a/doc/man/nvme_create_ctrl.2
+++ b/doc/man/nvme_create_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_create_ctrl" 9 "nvme_create_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_create_ctrl" 9 "nvme_create_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_create_ctrl \- Allocate an unconnected NVMe controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_create_root.2 b/doc/man/nvme_create_root.2
index 906faf7..b376396 100644
--- a/doc/man/nvme_create_root.2
+++ b/doc/man/nvme_create_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_create_root" 9 "nvme_create_root" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_create_root" 9 "nvme_create_root" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_create_root \- Initialize root object
.SH SYNOPSIS
diff --git a/doc/man/nvme_crto.2 b/doc/man/nvme_crto.2
index 0117d71..8a62791 100644
--- a/doc/man/nvme_crto.2
+++ b/doc/man/nvme_crto.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_crto" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_crto" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_crto \- This field indicates the controller ready timeouts
.SH SYNOPSIS
diff --git a/doc/man/nvme_csi.2 b/doc/man/nvme_csi.2
index 93c83bc..438051d 100644
--- a/doc/man/nvme_csi.2
+++ b/doc/man/nvme_csi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_csi" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_csi" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_csi \- Defined command set indicators
.SH SYNOPSIS
diff --git a/doc/man/nvme_csts.2 b/doc/man/nvme_csts.2
index 7d73fb1..5bb8cc4 100644
--- a/doc/man/nvme_csts.2
+++ b/doc/man/nvme_csts.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_csts" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_csts" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_csts \- This field indicates the controller status register
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_config_match.2 b/doc/man/nvme_ctrl_config_match.2
index 99ffe48..ad54bf6 100644
--- a/doc/man/nvme_ctrl_config_match.2
+++ b/doc/man/nvme_ctrl_config_match.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_config_match" 9 "nvme_ctrl_config_match" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_config_match" 9 "nvme_ctrl_config_match" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_config_match \- Check if ctrl @c matches config params
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_find.2 b/doc/man/nvme_ctrl_find.2
index 4d16f3f..1e8ef5b 100644
--- a/doc/man/nvme_ctrl_find.2
+++ b/doc/man/nvme_ctrl_find.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_find" 9 "nvme_ctrl_find" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_find" 9 "nvme_ctrl_find" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_find \- Locate an existing controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_first_ns.2 b/doc/man/nvme_ctrl_first_ns.2
index aa40cf5..037c0f9 100644
--- a/doc/man/nvme_ctrl_first_ns.2
+++ b/doc/man/nvme_ctrl_first_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_first_ns" 9 "nvme_ctrl_first_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_first_ns" 9 "nvme_ctrl_first_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_first_ns \- Start namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_first_path.2 b/doc/man/nvme_ctrl_first_path.2
index 03b781f..7b2a7f9 100644
--- a/doc/man/nvme_ctrl_first_path.2
+++ b/doc/man/nvme_ctrl_first_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_first_path" 9 "nvme_ctrl_first_path" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_first_path" 9 "nvme_ctrl_first_path" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_first_path \- Start path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_ns.2 b/doc/man/nvme_ctrl_for_each_ns.2
index 27a0ae0..7de1196 100644
--- a/doc/man/nvme_ctrl_for_each_ns.2
+++ b/doc/man/nvme_ctrl_for_each_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_ns" 9 "nvme_ctrl_for_each_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_ns" 9 "nvme_ctrl_for_each_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_ns \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_ns_safe.2 b/doc/man/nvme_ctrl_for_each_ns_safe.2
index de4cd8a..9c8c31b 100644
--- a/doc/man/nvme_ctrl_for_each_ns_safe.2
+++ b/doc/man/nvme_ctrl_for_each_ns_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_ns_safe" 9 "nvme_ctrl_for_each_ns_safe" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_ns_safe" 9 "nvme_ctrl_for_each_ns_safe" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_ns_safe \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_path.2 b/doc/man/nvme_ctrl_for_each_path.2
index d40b26b..7321058 100644
--- a/doc/man/nvme_ctrl_for_each_path.2
+++ b/doc/man/nvme_ctrl_for_each_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_path" 9 "nvme_ctrl_for_each_path" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_path" 9 "nvme_ctrl_for_each_path" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_path \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_path_safe.2 b/doc/man/nvme_ctrl_for_each_path_safe.2
index 00a4965..78ddfe6 100644
--- a/doc/man/nvme_ctrl_for_each_path_safe.2
+++ b/doc/man/nvme_ctrl_for_each_path_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_path_safe" 9 "nvme_ctrl_for_each_path_safe" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_path_safe" 9 "nvme_ctrl_for_each_path_safe" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_path_safe \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_address.2 b/doc/man/nvme_ctrl_get_address.2
index 7f8eed3..7a0aff5 100644
--- a/doc/man/nvme_ctrl_get_address.2
+++ b/doc/man/nvme_ctrl_get_address.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_address" 9 "nvme_ctrl_get_address" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_address" 9 "nvme_ctrl_get_address" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_address \- Address string of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_config.2 b/doc/man/nvme_ctrl_get_config.2
index 6d5f0e0..20f26b9 100644
--- a/doc/man/nvme_ctrl_get_config.2
+++ b/doc/man/nvme_ctrl_get_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_config" 9 "nvme_ctrl_get_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_config" 9 "nvme_ctrl_get_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_config \- Fabrics configuration of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_dhchap_host_key.2 b/doc/man/nvme_ctrl_get_dhchap_host_key.2
index dfe4540..6e9d6de 100644
--- a/doc/man/nvme_ctrl_get_dhchap_host_key.2
+++ b/doc/man/nvme_ctrl_get_dhchap_host_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_dhchap_host_key" 9 "nvme_ctrl_get_dhchap_host_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_dhchap_host_key" 9 "nvme_ctrl_get_dhchap_host_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_dhchap_host_key \- Return host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_dhchap_key.2 b/doc/man/nvme_ctrl_get_dhchap_key.2
index 05e6721..80c1909 100644
--- a/doc/man/nvme_ctrl_get_dhchap_key.2
+++ b/doc/man/nvme_ctrl_get_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_dhchap_key" 9 "nvme_ctrl_get_dhchap_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_dhchap_key" 9 "nvme_ctrl_get_dhchap_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_dhchap_key \- Return controller key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_fd.2 b/doc/man/nvme_ctrl_get_fd.2
index 3401d06..a6147df 100644
--- a/doc/man/nvme_ctrl_get_fd.2
+++ b/doc/man/nvme_ctrl_get_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_fd" 9 "nvme_ctrl_get_fd" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_fd" 9 "nvme_ctrl_get_fd" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_fd \- Get associated file descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_firmware.2 b/doc/man/nvme_ctrl_get_firmware.2
index 27a38d6..32d8b5a 100644
--- a/doc/man/nvme_ctrl_get_firmware.2
+++ b/doc/man/nvme_ctrl_get_firmware.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_firmware" 9 "nvme_ctrl_get_firmware" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_firmware" 9 "nvme_ctrl_get_firmware" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_firmware \- Firmware string of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_host_iface.2 b/doc/man/nvme_ctrl_get_host_iface.2
index 4088ceb..71489b0 100644
--- a/doc/man/nvme_ctrl_get_host_iface.2
+++ b/doc/man/nvme_ctrl_get_host_iface.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_host_iface" 9 "nvme_ctrl_get_host_iface" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_host_iface" 9 "nvme_ctrl_get_host_iface" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_host_iface \- Host interface name of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_host_traddr.2 b/doc/man/nvme_ctrl_get_host_traddr.2
index 1cea73f..59f7279 100644
--- a/doc/man/nvme_ctrl_get_host_traddr.2
+++ b/doc/man/nvme_ctrl_get_host_traddr.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_host_traddr" 9 "nvme_ctrl_get_host_traddr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_host_traddr" 9 "nvme_ctrl_get_host_traddr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_host_traddr \- Host transport address of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_keyring.2 b/doc/man/nvme_ctrl_get_keyring.2
new file mode 100644
index 0000000..eb63f2f
--- /dev/null
+++ b/doc/man/nvme_ctrl_get_keyring.2
@@ -0,0 +1,11 @@
+.TH "nvme_ctrl_get_keyring" 9 "nvme_ctrl_get_keyring" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_ctrl_get_keyring \- Return keyring
+.SH SYNOPSIS
+.B "const char *" nvme_ctrl_get_keyring
+.BI "(nvme_ctrl_t c " ");"
+.SH ARGUMENTS
+.IP "c" 12
+Controller to be used for the lookup
+.SH "RETURN"
+Keyring or NULL if not set
diff --git a/doc/man/nvme_ctrl_get_model.2 b/doc/man/nvme_ctrl_get_model.2
index 1333678..c5ce674 100644
--- a/doc/man/nvme_ctrl_get_model.2
+++ b/doc/man/nvme_ctrl_get_model.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_model" 9 "nvme_ctrl_get_model" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_model" 9 "nvme_ctrl_get_model" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_model \- Model of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_name.2 b/doc/man/nvme_ctrl_get_name.2
index 920e257..da34f36 100644
--- a/doc/man/nvme_ctrl_get_name.2
+++ b/doc/man/nvme_ctrl_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_name" 9 "nvme_ctrl_get_name" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_name" 9 "nvme_ctrl_get_name" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_name \- sysfs name of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_numa_node.2 b/doc/man/nvme_ctrl_get_numa_node.2
index 0b39709..99668b0 100644
--- a/doc/man/nvme_ctrl_get_numa_node.2
+++ b/doc/man/nvme_ctrl_get_numa_node.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_numa_node" 9 "nvme_ctrl_get_numa_node" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_numa_node" 9 "nvme_ctrl_get_numa_node" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_numa_node \- NUMA node of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_phy_slot.2 b/doc/man/nvme_ctrl_get_phy_slot.2
index 5d73c59..05ffa6a 100644
--- a/doc/man/nvme_ctrl_get_phy_slot.2
+++ b/doc/man/nvme_ctrl_get_phy_slot.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_phy_slot" 9 "nvme_ctrl_get_phy_slot" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_phy_slot" 9 "nvme_ctrl_get_phy_slot" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_phy_slot \- PCI physical slot number of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_queue_count.2 b/doc/man/nvme_ctrl_get_queue_count.2
index ded46ee..1befd6f 100644
--- a/doc/man/nvme_ctrl_get_queue_count.2
+++ b/doc/man/nvme_ctrl_get_queue_count.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_queue_count" 9 "nvme_ctrl_get_queue_count" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_queue_count" 9 "nvme_ctrl_get_queue_count" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_queue_count \- Queue count of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_serial.2 b/doc/man/nvme_ctrl_get_serial.2
index 37679d8..f615fa2 100644
--- a/doc/man/nvme_ctrl_get_serial.2
+++ b/doc/man/nvme_ctrl_get_serial.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_serial" 9 "nvme_ctrl_get_serial" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_serial" 9 "nvme_ctrl_get_serial" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_serial \- Serial number of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_sqsize.2 b/doc/man/nvme_ctrl_get_sqsize.2
index 2b77613..b6a6e46 100644
--- a/doc/man/nvme_ctrl_get_sqsize.2
+++ b/doc/man/nvme_ctrl_get_sqsize.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_sqsize" 9 "nvme_ctrl_get_sqsize" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_sqsize" 9 "nvme_ctrl_get_sqsize" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_sqsize \- SQ size of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_src_addr.2 b/doc/man/nvme_ctrl_get_src_addr.2
index 7a89d41..8afcee5 100644
--- a/doc/man/nvme_ctrl_get_src_addr.2
+++ b/doc/man/nvme_ctrl_get_src_addr.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_src_addr" 9 "nvme_ctrl_get_src_addr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_src_addr" 9 "nvme_ctrl_get_src_addr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_src_addr \- Extract src_addr from the c->address string
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_state.2 b/doc/man/nvme_ctrl_get_state.2
index bf57641..17d2768 100644
--- a/doc/man/nvme_ctrl_get_state.2
+++ b/doc/man/nvme_ctrl_get_state.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_state" 9 "nvme_ctrl_get_state" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_state" 9 "nvme_ctrl_get_state" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_state \- Running state of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_subsysnqn.2 b/doc/man/nvme_ctrl_get_subsysnqn.2
index 10ed6d7..57e0198 100644
--- a/doc/man/nvme_ctrl_get_subsysnqn.2
+++ b/doc/man/nvme_ctrl_get_subsysnqn.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_subsysnqn" 9 "nvme_ctrl_get_subsysnqn" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_subsysnqn" 9 "nvme_ctrl_get_subsysnqn" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_subsysnqn \- Subsystem NQN of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_subsystem.2 b/doc/man/nvme_ctrl_get_subsystem.2
index 9b33d19..160f3cd 100644
--- a/doc/man/nvme_ctrl_get_subsystem.2
+++ b/doc/man/nvme_ctrl_get_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_subsystem" 9 "nvme_ctrl_get_subsystem" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_subsystem" 9 "nvme_ctrl_get_subsystem" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_subsystem \- Parent subsystem of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_sysfs_dir.2 b/doc/man/nvme_ctrl_get_sysfs_dir.2
index 5ff039e..8fac35b 100644
--- a/doc/man/nvme_ctrl_get_sysfs_dir.2
+++ b/doc/man/nvme_ctrl_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_sysfs_dir" 9 "nvme_ctrl_get_sysfs_dir" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_sysfs_dir" 9 "nvme_ctrl_get_sysfs_dir" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_sysfs_dir \- sysfs directory of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_tls_key.2 b/doc/man/nvme_ctrl_get_tls_key.2
new file mode 100644
index 0000000..4ce3281
--- /dev/null
+++ b/doc/man/nvme_ctrl_get_tls_key.2
@@ -0,0 +1,11 @@
+.TH "nvme_ctrl_get_tls_key" 9 "nvme_ctrl_get_tls_key" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_ctrl_get_tls_key \- Return Derive TLS PSK
+.SH SYNOPSIS
+.B "const char *" nvme_ctrl_get_tls_key
+.BI "(nvme_ctrl_t c " ");"
+.SH ARGUMENTS
+.IP "c" 12
+Controller to be used for the lookup
+.SH "RETURN"
+Key in PSK interchange format or NULL if not set
diff --git a/doc/man/nvme_ctrl_get_tls_key_identity.2 b/doc/man/nvme_ctrl_get_tls_key_identity.2
new file mode 100644
index 0000000..b75b12e
--- /dev/null
+++ b/doc/man/nvme_ctrl_get_tls_key_identity.2
@@ -0,0 +1,11 @@
+.TH "nvme_ctrl_get_tls_key_identity" 9 "nvme_ctrl_get_tls_key_identity" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_ctrl_get_tls_key_identity \- Return Derive TLS Identity
+.SH SYNOPSIS
+.B "const char *" nvme_ctrl_get_tls_key_identity
+.BI "(nvme_ctrl_t c " ");"
+.SH ARGUMENTS
+.IP "c" 12
+Controller to be used for the lookup
+.SH "RETURN"
+Derive TLS Identity or NULL if not set
diff --git a/doc/man/nvme_ctrl_get_traddr.2 b/doc/man/nvme_ctrl_get_traddr.2
index 75c2dda..1f93f43 100644
--- a/doc/man/nvme_ctrl_get_traddr.2
+++ b/doc/man/nvme_ctrl_get_traddr.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_traddr" 9 "nvme_ctrl_get_traddr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_traddr" 9 "nvme_ctrl_get_traddr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_traddr \- Transport address of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_transport.2 b/doc/man/nvme_ctrl_get_transport.2
index 5225780..96b4263 100644
--- a/doc/man/nvme_ctrl_get_transport.2
+++ b/doc/man/nvme_ctrl_get_transport.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_transport" 9 "nvme_ctrl_get_transport" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_transport" 9 "nvme_ctrl_get_transport" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_transport \- Transport type of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_trsvcid.2 b/doc/man/nvme_ctrl_get_trsvcid.2
index c1800b0..2c69b2e 100644
--- a/doc/man/nvme_ctrl_get_trsvcid.2
+++ b/doc/man/nvme_ctrl_get_trsvcid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_trsvcid" 9 "nvme_ctrl_get_trsvcid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_trsvcid" 9 "nvme_ctrl_get_trsvcid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_trsvcid \- Transport service identifier of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_identify.2 b/doc/man/nvme_ctrl_identify.2
index 3da45cf..970b978 100644
--- a/doc/man/nvme_ctrl_identify.2
+++ b/doc/man/nvme_ctrl_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_identify" 9 "nvme_ctrl_identify" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_identify" 9 "nvme_ctrl_identify" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_identify \- Issues an 'identify controller' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_discovered.2 b/doc/man/nvme_ctrl_is_discovered.2
index 7e3391e..434b4b2 100644
--- a/doc/man/nvme_ctrl_is_discovered.2
+++ b/doc/man/nvme_ctrl_is_discovered.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_discovered" 9 "nvme_ctrl_is_discovered" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_discovered" 9 "nvme_ctrl_is_discovered" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_discovered \- Returns the value of the 'discovered' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_discovery_ctrl.2 b/doc/man/nvme_ctrl_is_discovery_ctrl.2
index 75504eb..21dfeb2 100644
--- a/doc/man/nvme_ctrl_is_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_is_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_discovery_ctrl" 9 "nvme_ctrl_is_discovery_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_discovery_ctrl" 9 "nvme_ctrl_is_discovery_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_discovery_ctrl \- Check the 'discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_persistent.2 b/doc/man/nvme_ctrl_is_persistent.2
index 8d23351..7ad36e7 100644
--- a/doc/man/nvme_ctrl_is_persistent.2
+++ b/doc/man/nvme_ctrl_is_persistent.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_persistent" 9 "nvme_ctrl_is_persistent" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_persistent" 9 "nvme_ctrl_is_persistent" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_persistent \- Returns the value of the 'persistent' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2 b/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2
index 654191e..687bc05 100644
--- a/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_unique_discovery_ctrl" 9 "nvme_ctrl_is_unique_discovery_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_unique_discovery_ctrl" 9 "nvme_ctrl_is_unique_discovery_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_unique_discovery_ctrl \- Check the 'unique_discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_list.2 b/doc/man/nvme_ctrl_list.2
index f6bfbf2..2e882be 100644
--- a/doc/man/nvme_ctrl_list.2
+++ b/doc/man/nvme_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ctrl_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ctrl_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_ctrl_list \- Controller List
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_metadata_type.2 b/doc/man/nvme_ctrl_metadata_type.2
index ac088cd..2248e82 100644
--- a/doc/man/nvme_ctrl_metadata_type.2
+++ b/doc/man/nvme_ctrl_metadata_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ctrl_metadata_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ctrl_metadata_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ctrl_metadata_type \- Controller Metadata Element Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_next_ns.2 b/doc/man/nvme_ctrl_next_ns.2
index 5738137..59a3004 100644
--- a/doc/man/nvme_ctrl_next_ns.2
+++ b/doc/man/nvme_ctrl_next_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_next_ns" 9 "nvme_ctrl_next_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_next_ns" 9 "nvme_ctrl_next_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_next_ns \- Next namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_next_path.2 b/doc/man/nvme_ctrl_next_path.2
index cd039f7..04ce212 100644
--- a/doc/man/nvme_ctrl_next_path.2
+++ b/doc/man/nvme_ctrl_next_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_next_path" 9 "nvme_ctrl_next_path" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_next_path" 9 "nvme_ctrl_next_path" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_next_path \- Next path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_release_fd.2 b/doc/man/nvme_ctrl_release_fd.2
index da0c14b..0167ca9 100644
--- a/doc/man/nvme_ctrl_release_fd.2
+++ b/doc/man/nvme_ctrl_release_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_release_fd" 9 "nvme_ctrl_release_fd" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_release_fd" 9 "nvme_ctrl_release_fd" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_release_fd \- Close fd and clear fd from controller object
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_reset.2 b/doc/man/nvme_ctrl_reset.2
index f041e69..e52ca6f 100644
--- a/doc/man/nvme_ctrl_reset.2
+++ b/doc/man/nvme_ctrl_reset.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_reset" 9 "nvme_ctrl_reset" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_reset" 9 "nvme_ctrl_reset" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_reset \- Initiate a controller reset
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_dhchap_host_key.2 b/doc/man/nvme_ctrl_set_dhchap_host_key.2
index 42abdc5..8f895de 100644
--- a/doc/man/nvme_ctrl_set_dhchap_host_key.2
+++ b/doc/man/nvme_ctrl_set_dhchap_host_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_dhchap_host_key" 9 "nvme_ctrl_set_dhchap_host_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_dhchap_host_key" 9 "nvme_ctrl_set_dhchap_host_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_dhchap_host_key \- Set host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_dhchap_key.2 b/doc/man/nvme_ctrl_set_dhchap_key.2
index 7d34e64..5455b0f 100644
--- a/doc/man/nvme_ctrl_set_dhchap_key.2
+++ b/doc/man/nvme_ctrl_set_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_dhchap_key" 9 "nvme_ctrl_set_dhchap_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_dhchap_key" 9 "nvme_ctrl_set_dhchap_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_dhchap_key \- Set controller key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_discovered.2 b/doc/man/nvme_ctrl_set_discovered.2
index dd85afb..327cb81 100644
--- a/doc/man/nvme_ctrl_set_discovered.2
+++ b/doc/man/nvme_ctrl_set_discovered.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_discovered" 9 "nvme_ctrl_set_discovered" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_discovered" 9 "nvme_ctrl_set_discovered" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_discovered \- Set the 'discovered' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_discovery_ctrl.2 b/doc/man/nvme_ctrl_set_discovery_ctrl.2
index 9c71212..060920c 100644
--- a/doc/man/nvme_ctrl_set_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_set_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_discovery_ctrl" 9 "nvme_ctrl_set_discovery_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_discovery_ctrl" 9 "nvme_ctrl_set_discovery_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_discovery_ctrl \- Set the 'discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_keyring.2 b/doc/man/nvme_ctrl_set_keyring.2
new file mode 100644
index 0000000..9da1b06
--- /dev/null
+++ b/doc/man/nvme_ctrl_set_keyring.2
@@ -0,0 +1,12 @@
+.TH "nvme_ctrl_set_keyring" 9 "nvme_ctrl_set_keyring" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_ctrl_set_keyring \- Set keyring
+.SH SYNOPSIS
+.B "void" nvme_ctrl_set_keyring
+.BI "(nvme_ctrl_t c " ","
+.BI "const char *keyring " ");"
+.SH ARGUMENTS
+.IP "c" 12
+Controller for which the keyring should be set
+.IP "keyring" 12
+Keyring name
diff --git a/doc/man/nvme_ctrl_set_persistent.2 b/doc/man/nvme_ctrl_set_persistent.2
index e7c158d..fb6c48d 100644
--- a/doc/man/nvme_ctrl_set_persistent.2
+++ b/doc/man/nvme_ctrl_set_persistent.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_persistent" 9 "nvme_ctrl_set_persistent" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_persistent" 9 "nvme_ctrl_set_persistent" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_persistent \- Set the 'persistent' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_tls_key.2 b/doc/man/nvme_ctrl_set_tls_key.2
new file mode 100644
index 0000000..d821943
--- /dev/null
+++ b/doc/man/nvme_ctrl_set_tls_key.2
@@ -0,0 +1,12 @@
+.TH "nvme_ctrl_set_tls_key" 9 "nvme_ctrl_set_tls_key" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_ctrl_set_tls_key \- Set Derive TLS PSK
+.SH SYNOPSIS
+.B "void" nvme_ctrl_set_tls_key
+.BI "(nvme_ctrl_t c " ","
+.BI "const char *key " ");"
+.SH ARGUMENTS
+.IP "c" 12
+Controller for which the key should be set
+.IP "key" 12
+Key in interchange format or NULL to clear existing key
diff --git a/doc/man/nvme_ctrl_set_tls_key_identity.2 b/doc/man/nvme_ctrl_set_tls_key_identity.2
new file mode 100644
index 0000000..af96f80
--- /dev/null
+++ b/doc/man/nvme_ctrl_set_tls_key_identity.2
@@ -0,0 +1,12 @@
+.TH "nvme_ctrl_set_tls_key_identity" 9 "nvme_ctrl_set_tls_key_identity" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_ctrl_set_tls_key_identity \- Set Derive TLS Identity
+.SH SYNOPSIS
+.B "void" nvme_ctrl_set_tls_key_identity
+.BI "(nvme_ctrl_t c " ","
+.BI "const char *identity " ");"
+.SH ARGUMENTS
+.IP "c" 12
+Controller for which the key should be set
+.IP "identity" 12
+Derive TLS identity or NULL to clear existing key
diff --git a/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2 b/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2
index 057416e..5f59f6b 100644
--- a/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_unique_discovery_ctrl" 9 "nvme_ctrl_set_unique_discovery_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_unique_discovery_ctrl" 9 "nvme_ctrl_set_unique_discovery_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_unique_discovery_ctrl \- Set the 'unique_discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrls_filter.2 b/doc/man/nvme_ctrls_filter.2
index 91a87f5..e9489a7 100644
--- a/doc/man/nvme_ctrls_filter.2
+++ b/doc/man/nvme_ctrls_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrls_filter" 9 "nvme_ctrls_filter" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrls_filter" 9 "nvme_ctrls_filter" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrls_filter \- Filter for controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_data_tfr.2 b/doc/man/nvme_data_tfr.2
index e3eb1a1..33c737a 100644
--- a/doc/man/nvme_data_tfr.2
+++ b/doc/man/nvme_data_tfr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_data_tfr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_data_tfr" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_data_tfr \- Data transfer direction of the command
.SH SYNOPSIS
diff --git a/doc/man/nvme_default_host.2 b/doc/man/nvme_default_host.2
index b3e681b..5d64437 100644
--- a/doc/man/nvme_default_host.2
+++ b/doc/man/nvme_default_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_default_host" 9 "nvme_default_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_default_host" 9 "nvme_default_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_default_host \- Initializes the default host
.SH SYNOPSIS
diff --git a/doc/man/nvme_describe_key_serial.2 b/doc/man/nvme_describe_key_serial.2
index 0dabe17..be5b61f 100644
--- a/doc/man/nvme_describe_key_serial.2
+++ b/doc/man/nvme_describe_key_serial.2
@@ -1,4 +1,4 @@
-.TH "nvme_describe_key_serial" 9 "nvme_describe_key_serial" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_describe_key_serial" 9 "nvme_describe_key_serial" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_describe_key_serial \- Return key description
.SH SYNOPSIS
diff --git a/doc/man/nvme_dev_self_test.2 b/doc/man/nvme_dev_self_test.2
index ed9ae70..dc10a93 100644
--- a/doc/man/nvme_dev_self_test.2
+++ b/doc/man/nvme_dev_self_test.2
@@ -1,4 +1,4 @@
-.TH "nvme_dev_self_test" 9 "nvme_dev_self_test" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_dev_self_test" 9 "nvme_dev_self_test" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dev_self_test \- Start or abort a self test
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_dtype.2 b/doc/man/nvme_directive_dtype.2
index 94db1b4..e20e31a 100644
--- a/doc/man/nvme_directive_dtype.2
+++ b/doc/man/nvme_directive_dtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_dtype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_dtype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_dtype \- Directive Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_receive_doper.2 b/doc/man/nvme_directive_receive_doper.2
index d22cbda..c3ba09d 100644
--- a/doc/man/nvme_directive_receive_doper.2
+++ b/doc/man/nvme_directive_receive_doper.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_receive_doper" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_receive_doper" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_receive_doper \- Directive Receive Directive Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv.2 b/doc/man/nvme_directive_recv.2
index 5da3621..0636cf2 100644
--- a/doc/man/nvme_directive_recv.2
+++ b/doc/man/nvme_directive_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv" 9 "nvme_directive_recv" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv" 9 "nvme_directive_recv" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv \- Receive directive specific data
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_identify_parameters.2 b/doc/man/nvme_directive_recv_identify_parameters.2
index 74e2429..51ca88a 100644
--- a/doc/man/nvme_directive_recv_identify_parameters.2
+++ b/doc/man/nvme_directive_recv_identify_parameters.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_identify_parameters" 9 "nvme_directive_recv_identify_parameters" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_identify_parameters" 9 "nvme_directive_recv_identify_parameters" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_identify_parameters \- Directive receive identifier parameters
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_stream_allocate.2 b/doc/man/nvme_directive_recv_stream_allocate.2
index f4c1fb1..47b0df8 100644
--- a/doc/man/nvme_directive_recv_stream_allocate.2
+++ b/doc/man/nvme_directive_recv_stream_allocate.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_stream_allocate" 9 "nvme_directive_recv_stream_allocate" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_stream_allocate" 9 "nvme_directive_recv_stream_allocate" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_stream_allocate \- Directive receive stream allocate
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_stream_parameters.2 b/doc/man/nvme_directive_recv_stream_parameters.2
index 83a4223..c41f0f0 100644
--- a/doc/man/nvme_directive_recv_stream_parameters.2
+++ b/doc/man/nvme_directive_recv_stream_parameters.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_stream_parameters" 9 "nvme_directive_recv_stream_parameters" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_stream_parameters" 9 "nvme_directive_recv_stream_parameters" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_stream_parameters \- Directive receive stream parameters
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_stream_status.2 b/doc/man/nvme_directive_recv_stream_status.2
index cde6600..c349277 100644
--- a/doc/man/nvme_directive_recv_stream_status.2
+++ b/doc/man/nvme_directive_recv_stream_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_stream_status" 9 "nvme_directive_recv_stream_status" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_stream_status" 9 "nvme_directive_recv_stream_status" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_stream_status \- Directive receive stream status
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send.2 b/doc/man/nvme_directive_send.2
index 7d1f333..28860e8 100644
--- a/doc/man/nvme_directive_send.2
+++ b/doc/man/nvme_directive_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send" 9 "nvme_directive_send" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send" 9 "nvme_directive_send" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send \- Send directive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_doper.2 b/doc/man/nvme_directive_send_doper.2
index 0c2dbca..990018c 100644
--- a/doc/man/nvme_directive_send_doper.2
+++ b/doc/man/nvme_directive_send_doper.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_send_doper" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_send_doper" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_send_doper \- Directive Send Directive Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_id_endir.2 b/doc/man/nvme_directive_send_id_endir.2
index fc00033..58be5db 100644
--- a/doc/man/nvme_directive_send_id_endir.2
+++ b/doc/man/nvme_directive_send_id_endir.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send_id_endir" 9 "nvme_directive_send_id_endir" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send_id_endir" 9 "nvme_directive_send_id_endir" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send_id_endir \- Directive Send Enable Directive
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_identify_endir.2 b/doc/man/nvme_directive_send_identify_endir.2
index 2f3e9b5..3b2b779 100644
--- a/doc/man/nvme_directive_send_identify_endir.2
+++ b/doc/man/nvme_directive_send_identify_endir.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_send_identify_endir" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_send_identify_endir" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_send_identify_endir \- Enable Directive
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_stream_release_identifier.2 b/doc/man/nvme_directive_send_stream_release_identifier.2
index e34dba8..a503e42 100644
--- a/doc/man/nvme_directive_send_stream_release_identifier.2
+++ b/doc/man/nvme_directive_send_stream_release_identifier.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send_stream_release_identifier" 9 "nvme_directive_send_stream_release_identifier" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send_stream_release_identifier" 9 "nvme_directive_send_stream_release_identifier" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send_stream_release_identifier \- Directive Send Stream release
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_stream_release_resource.2 b/doc/man/nvme_directive_send_stream_release_resource.2
index d718724..903788b 100644
--- a/doc/man/nvme_directive_send_stream_release_resource.2
+++ b/doc/man/nvme_directive_send_stream_release_resource.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send_stream_release_resource" 9 "nvme_directive_send_stream_release_resource" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send_stream_release_resource" 9 "nvme_directive_send_stream_release_resource" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send_stream_release_resource \- Directive Send Stream release resources
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_types.2 b/doc/man/nvme_directive_types.2
index 43aa797..561bad0 100644
--- a/doc/man/nvme_directive_types.2
+++ b/doc/man/nvme_directive_types.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_types" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_types" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_types \- Directives Supported or Enabled
.SH SYNOPSIS
diff --git a/doc/man/nvme_disconnect_ctrl.2 b/doc/man/nvme_disconnect_ctrl.2
index 2764c1d..1d35584 100644
--- a/doc/man/nvme_disconnect_ctrl.2
+++ b/doc/man/nvme_disconnect_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_disconnect_ctrl" 9 "nvme_disconnect_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_disconnect_ctrl" 9 "nvme_disconnect_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_disconnect_ctrl \- Disconnect a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_dsm.2 b/doc/man/nvme_dsm.2
index d363042..175f1cf 100644
--- a/doc/man/nvme_dsm.2
+++ b/doc/man/nvme_dsm.2
@@ -1,4 +1,4 @@
-.TH "nvme_dsm" 9 "nvme_dsm" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_dsm" 9 "nvme_dsm" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dsm \- Send an nvme data set management command
.SH SYNOPSIS
diff --git a/doc/man/nvme_dsm_attributes.2 b/doc/man/nvme_dsm_attributes.2
index 0aa1bef..fbc2eb8 100644
--- a/doc/man/nvme_dsm_attributes.2
+++ b/doc/man/nvme_dsm_attributes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_dsm_attributes" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_dsm_attributes" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_dsm_attributes \- Dataset Management attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_dsm_range.2 b/doc/man/nvme_dsm_range.2
index 0eca47a..253cec5 100644
--- a/doc/man/nvme_dsm_range.2
+++ b/doc/man/nvme_dsm_range.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_dsm_range" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_dsm_range" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_dsm_range \- Dataset Management - Range Definition
.SH SYNOPSIS
diff --git a/doc/man/nvme_dst_stc.2 b/doc/man/nvme_dst_stc.2
index d7723c7..3ca98fb 100644
--- a/doc/man/nvme_dst_stc.2
+++ b/doc/man/nvme_dst_stc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_dst_stc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_dst_stc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_dst_stc \- Action taken by the Device Self-test command
.SH SYNOPSIS
diff --git a/doc/man/nvme_dump_config.2 b/doc/man/nvme_dump_config.2
index bd29a52..74e9f4b 100644
--- a/doc/man/nvme_dump_config.2
+++ b/doc/man/nvme_dump_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_dump_config" 9 "nvme_dump_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_dump_config" 9 "nvme_dump_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dump_config \- Print the JSON configuration
.SH SYNOPSIS
diff --git a/doc/man/nvme_dump_tree.2 b/doc/man/nvme_dump_tree.2
index b380ce1..4d2ab6f 100644
--- a/doc/man/nvme_dump_tree.2
+++ b/doc/man/nvme_dump_tree.2
@@ -1,4 +1,4 @@
-.TH "nvme_dump_tree" 9 "nvme_dump_tree" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_dump_tree" 9 "nvme_dump_tree" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dump_tree \- Dump internal object tree
.SH SYNOPSIS
diff --git a/doc/man/nvme_eg_critical_warning_flags.2 b/doc/man/nvme_eg_critical_warning_flags.2
index 8db09a5..0bc517a 100644
--- a/doc/man/nvme_eg_critical_warning_flags.2
+++ b/doc/man/nvme_eg_critical_warning_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_eg_critical_warning_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_eg_critical_warning_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_eg_critical_warning_flags \- Endurance Group Information Log - Critical Warning
.SH SYNOPSIS
diff --git a/doc/man/nvme_eg_event_aggregate_log.2 b/doc/man/nvme_eg_event_aggregate_log.2
index 1bc692c..31f72b2 100644
--- a/doc/man/nvme_eg_event_aggregate_log.2
+++ b/doc/man/nvme_eg_event_aggregate_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_eg_event_aggregate_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_eg_event_aggregate_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_eg_event_aggregate_log \- Endurance Group Event Aggregate
.SH SYNOPSIS
diff --git a/doc/man/nvme_end_grp_chan_desc.2 b/doc/man/nvme_end_grp_chan_desc.2
index 1dae32d..1a23168 100644
--- a/doc/man/nvme_end_grp_chan_desc.2
+++ b/doc/man/nvme_end_grp_chan_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_end_grp_chan_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_end_grp_chan_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_end_grp_chan_desc \- Endurance Group Channel Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_end_grp_config_desc.2 b/doc/man/nvme_end_grp_config_desc.2
index 4df5e47..14a3ace 100644
--- a/doc/man/nvme_end_grp_config_desc.2
+++ b/doc/man/nvme_end_grp_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_end_grp_config_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_end_grp_config_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_end_grp_config_desc \- Endurance Group Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_endurance_group_log.2 b/doc/man/nvme_endurance_group_log.2
index 017c8a0..c541031 100644
--- a/doc/man/nvme_endurance_group_log.2
+++ b/doc/man/nvme_endurance_group_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_endurance_group_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_endurance_group_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_endurance_group_log \- Endurance Group Information Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_eom_lane_desc.2 b/doc/man/nvme_eom_lane_desc.2
index 3157f3c..73032a9 100644
--- a/doc/man/nvme_eom_lane_desc.2
+++ b/doc/man/nvme_eom_lane_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_eom_lane_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_eom_lane_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_eom_lane_desc \- EOM Lane Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_eom_optional_data.2 b/doc/man/nvme_eom_optional_data.2
index 6cc101c..13f5e71 100644
--- a/doc/man/nvme_eom_optional_data.2
+++ b/doc/man/nvme_eom_optional_data.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_eom_optional_data" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_eom_optional_data" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_eom_optional_data \- EOM Optional Data Present Fields (Deprecated)
.SH SYNOPSIS
diff --git a/doc/man/nvme_eom_optional_data_present.2 b/doc/man/nvme_eom_optional_data_present.2
index 70ca78b..1eee712 100644
--- a/doc/man/nvme_eom_optional_data_present.2
+++ b/doc/man/nvme_eom_optional_data_present.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_eom_optional_data_present" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_eom_optional_data_present" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_eom_optional_data_present \- EOM Optional Data Present Fields
.SH SYNOPSIS
diff --git a/doc/man/nvme_errno_to_string.2 b/doc/man/nvme_errno_to_string.2
index b364bba..fc8b1d2 100644
--- a/doc/man/nvme_errno_to_string.2
+++ b/doc/man/nvme_errno_to_string.2
@@ -1,4 +1,4 @@
-.TH "nvme_errno_to_string" 9 "nvme_errno_to_string" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_errno_to_string" 9 "nvme_errno_to_string" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_errno_to_string \- Returns string describing nvme connect failures
.SH SYNOPSIS
diff --git a/doc/man/nvme_error_log_page.2 b/doc/man/nvme_error_log_page.2
index 663b41f..035f05a 100644
--- a/doc/man/nvme_error_log_page.2
+++ b/doc/man/nvme_error_log_page.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_error_log_page" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_error_log_page" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_error_log_page \- Error Information Log Entry (Log Identifier 01h)
.SH SYNOPSIS
diff --git a/doc/man/nvme_export_tls_key.2 b/doc/man/nvme_export_tls_key.2
index b3dc4cb..5b29f96 100644
--- a/doc/man/nvme_export_tls_key.2
+++ b/doc/man/nvme_export_tls_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_export_tls_key" 9 "nvme_export_tls_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_export_tls_key" 9 "nvme_export_tls_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_export_tls_key \- Export a TLS key
.SH SYNOPSIS
diff --git a/doc/man/nvme_export_tls_key_versioned.2 b/doc/man/nvme_export_tls_key_versioned.2
new file mode 100644
index 0000000..197289f
--- /dev/null
+++ b/doc/man/nvme_export_tls_key_versioned.2
@@ -0,0 +1,26 @@
+.TH "nvme_export_tls_key_versioned" 9 "nvme_export_tls_key_versioned" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_export_tls_key_versioned \- Export a TLS pre-shared key
+.SH SYNOPSIS
+.B "char *" nvme_export_tls_key_versioned
+.BI "(unsigned char version " ","
+.BI "unsigned char hmac " ","
+.BI "const unsigned char *key_data " ","
+.BI "size_t key_len " ");"
+.SH ARGUMENTS
+.IP "version" 12
+Indicated the representation of the TLS PSK
+.IP "hmac" 12
+HMAC algorithm used to transfor the configured PSK
+in a retained PSK
+.IP "key_data" 12
+Raw data of the key
+.IP "key_len" 12
+Length of \fIkey_data\fP
+.SH "DESCRIPTION"
+Returns \fIkey_data\fP in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+.SH "RETURN"
+The string containing the TLS identity or NULL with errno set
+on error. It is the responsibility of the caller to free the returned
+string.
diff --git a/doc/man/nvme_fabrics_config.2 b/doc/man/nvme_fabrics_config.2
index 90fe365..ee876e8 100644
--- a/doc/man/nvme_fabrics_config.2
+++ b/doc/man/nvme_fabrics_config.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fabrics_config" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fabrics_config" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fabrics_config \- Defines all linux nvme fabrics initiator options
.SH SYNOPSIS
@@ -30,6 +30,8 @@ struct nvme_fabrics_config {
.br
.BI " long tls_key;"
.br
+.BI " long tls_configured_key;"
+.br
.BI " bool duplicate_connect;"
.br
.BI " bool disable_sqflow;"
@@ -73,6 +75,8 @@ Type of service
Keyring to store and lookup keys
.IP "tls_key" 12
TLS PSK for the connection
+.IP "tls_configured_key" 12
+TLS PSK for connect command for the connection
.IP "duplicate_connect" 12
Allow multiple connections to the same target
.IP "disable_sqflow" 12
diff --git a/doc/man/nvme_fabrics_uri.2 b/doc/man/nvme_fabrics_uri.2
index d779a8b..f7b2c29 100644
--- a/doc/man/nvme_fabrics_uri.2
+++ b/doc/man/nvme_fabrics_uri.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fabrics_uri" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fabrics_uri" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fabrics_uri \- Parsed URI structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_fctype.2 b/doc/man/nvme_fctype.2
index 3e4d001..15cfeeb 100644
--- a/doc/man/nvme_fctype.2
+++ b/doc/man/nvme_fctype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fctype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fctype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fctype \- Fabrics Command Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_config_desc.2 b/doc/man/nvme_fdp_config_desc.2
index 8f0e910..731d95d 100644
--- a/doc/man/nvme_fdp_config_desc.2
+++ b/doc/man/nvme_fdp_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_config_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_config_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_config_desc \- FDP Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_config_fdpa.2 b/doc/man/nvme_fdp_config_fdpa.2
index 049c278..2eb1c19 100644
--- a/doc/man/nvme_fdp_config_fdpa.2
+++ b/doc/man/nvme_fdp_config_fdpa.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_config_fdpa" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_config_fdpa" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_config_fdpa \- FDP Attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_config_log.2 b/doc/man/nvme_fdp_config_log.2
index 0a444a0..96e48a2 100644
--- a/doc/man/nvme_fdp_config_log.2
+++ b/doc/man/nvme_fdp_config_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_config_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_config_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_config_log \- FDP Configurations Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event.2 b/doc/man/nvme_fdp_event.2
index b0be404..052355e 100644
--- a/doc/man/nvme_fdp_event.2
+++ b/doc/man/nvme_fdp_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_event \- FDP Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_flags.2 b/doc/man/nvme_fdp_event_flags.2
index 7da309b..00edf4f 100644
--- a/doc/man/nvme_fdp_event_flags.2
+++ b/doc/man/nvme_fdp_event_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_event_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_event_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_event_flags \- FDP Event Flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_realloc.2 b/doc/man/nvme_fdp_event_realloc.2
index fd4dcde..18665f8 100644
--- a/doc/man/nvme_fdp_event_realloc.2
+++ b/doc/man/nvme_fdp_event_realloc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_event_realloc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_event_realloc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_event_realloc \- Media Reallocated Event Type Specific Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_realloc_flags.2 b/doc/man/nvme_fdp_event_realloc_flags.2
index aeb3cf7..536e223 100644
--- a/doc/man/nvme_fdp_event_realloc_flags.2
+++ b/doc/man/nvme_fdp_event_realloc_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_event_realloc_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_event_realloc_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_event_realloc_flags \- Media Reallocated Event Type Specific Flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_type.2 b/doc/man/nvme_fdp_event_type.2
index 0fef675..839bc4e 100644
--- a/doc/man/nvme_fdp_event_type.2
+++ b/doc/man/nvme_fdp_event_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_event_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_event_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_event_type \- FDP Event Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_events_log.2 b/doc/man/nvme_fdp_events_log.2
index 7c696c3..789f66f 100644
--- a/doc/man/nvme_fdp_events_log.2
+++ b/doc/man/nvme_fdp_events_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_events_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_events_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_events_log \- FDP Events Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_reclaim_unit_handle_status.2 b/doc/man/nvme_fdp_reclaim_unit_handle_status.2
index 6459846..329c76b 100644
--- a/doc/man/nvme_fdp_reclaim_unit_handle_status.2
+++ b/doc/man/nvme_fdp_reclaim_unit_handle_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_fdp_reclaim_unit_handle_status" 9 "nvme_fdp_reclaim_unit_handle_status" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_fdp_reclaim_unit_handle_status" 9 "nvme_fdp_reclaim_unit_handle_status" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fdp_reclaim_unit_handle_status \- Get reclaim unit handle status
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_reclaim_unit_handle_update.2 b/doc/man/nvme_fdp_reclaim_unit_handle_update.2
index eee23a2..0badffd 100644
--- a/doc/man/nvme_fdp_reclaim_unit_handle_update.2
+++ b/doc/man/nvme_fdp_reclaim_unit_handle_update.2
@@ -1,4 +1,4 @@
-.TH "nvme_fdp_reclaim_unit_handle_update" 9 "nvme_fdp_reclaim_unit_handle_update" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_fdp_reclaim_unit_handle_update" 9 "nvme_fdp_reclaim_unit_handle_update" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fdp_reclaim_unit_handle_update \- Update a list of reclaim unit handles
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_desc.2 b/doc/man/nvme_fdp_ruh_desc.2
index af1d861..4abfe51 100644
--- a/doc/man/nvme_fdp_ruh_desc.2
+++ b/doc/man/nvme_fdp_ruh_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruh_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruh_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruh_desc \- Reclaim Unit Handle Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_status.2 b/doc/man/nvme_fdp_ruh_status.2
index ba2e98b..54f1ee7 100644
--- a/doc/man/nvme_fdp_ruh_status.2
+++ b/doc/man/nvme_fdp_ruh_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruh_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruh_status" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruh_status \- Reclaim Unit Handle Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_status_desc.2 b/doc/man/nvme_fdp_ruh_status_desc.2
index c2732b0..bfebb1c 100644
--- a/doc/man/nvme_fdp_ruh_status_desc.2
+++ b/doc/man/nvme_fdp_ruh_status_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruh_status_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruh_status_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruh_status_desc \- Reclaim Unit Handle Status Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_type.2 b/doc/man/nvme_fdp_ruh_type.2
index 4b722d6..f93dc70 100644
--- a/doc/man/nvme_fdp_ruh_type.2
+++ b/doc/man/nvme_fdp_ruh_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_ruh_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_ruh_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_ruh_type \- Reclaim Unit Handle Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruha.2 b/doc/man/nvme_fdp_ruha.2
index 1faa493..dc845d9 100644
--- a/doc/man/nvme_fdp_ruha.2
+++ b/doc/man/nvme_fdp_ruha.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_ruha" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_ruha" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_ruha \- Reclaim Unit Handle Attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruhu_desc.2 b/doc/man/nvme_fdp_ruhu_desc.2
index 49c6d8c..7cade5e 100644
--- a/doc/man/nvme_fdp_ruhu_desc.2
+++ b/doc/man/nvme_fdp_ruhu_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruhu_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruhu_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruhu_desc \- Reclaim Unit Handle Usage Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruhu_log.2 b/doc/man/nvme_fdp_ruhu_log.2
index bcd9be6..d9c1b80 100644
--- a/doc/man/nvme_fdp_ruhu_log.2
+++ b/doc/man/nvme_fdp_ruhu_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruhu_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruhu_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruhu_log \- Reclaim Unit Handle Usage Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_stats_log.2 b/doc/man/nvme_fdp_stats_log.2
index 439d636..9824f85 100644
--- a/doc/man/nvme_fdp_stats_log.2
+++ b/doc/man/nvme_fdp_stats_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_stats_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_stats_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_stats_log \- FDP Statistics Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_supported_event_attributes.2 b/doc/man/nvme_fdp_supported_event_attributes.2
index 91de540..fbbc123 100644
--- a/doc/man/nvme_fdp_supported_event_attributes.2
+++ b/doc/man/nvme_fdp_supported_event_attributes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_supported_event_attributes" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_supported_event_attributes" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_supported_event_attributes \- Supported FDP Event Attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_supported_event_desc.2 b/doc/man/nvme_fdp_supported_event_desc.2
index 991d232..59f777e 100644
--- a/doc/man/nvme_fdp_supported_event_desc.2
+++ b/doc/man/nvme_fdp_supported_event_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_supported_event_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_supported_event_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_supported_event_desc \- Supported FDP Event Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat.2 b/doc/man/nvme_feat.2
index 0b72f7e..9b81983 100644
--- a/doc/man/nvme_feat.2
+++ b/doc/man/nvme_feat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat \- Features Access Shifts/Masks values
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_auto_pst.2 b/doc/man/nvme_feat_auto_pst.2
index 512a420..3e3d25d 100644
--- a/doc/man/nvme_feat_auto_pst.2
+++ b/doc/man/nvme_feat_auto_pst.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_feat_auto_pst" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_feat_auto_pst" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_feat_auto_pst \- Autonomous Power State Transition
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_fdp_events_cdw11.2 b/doc/man/nvme_feat_fdp_events_cdw11.2
index a369786..6e24063 100644
--- a/doc/man/nvme_feat_fdp_events_cdw11.2
+++ b/doc/man/nvme_feat_fdp_events_cdw11.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_feat_fdp_events_cdw11" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_feat_fdp_events_cdw11" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_feat_fdp_events_cdw11 \- FDP Events Feature Command Dword 11
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_host_behavior.2 b/doc/man/nvme_feat_host_behavior.2
index 3629d62..64b2cd0 100644
--- a/doc/man/nvme_feat_host_behavior.2
+++ b/doc/man/nvme_feat_host_behavior.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_feat_host_behavior" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_feat_host_behavior" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_feat_host_behavior \- Host Behavior Support - Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_nswpcfg_state.2 b/doc/man/nvme_feat_nswpcfg_state.2
index 3d4fea8..8673ea1 100644
--- a/doc/man/nvme_feat_nswpcfg_state.2
+++ b/doc/man/nvme_feat_nswpcfg_state.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_nswpcfg_state" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_nswpcfg_state" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_nswpcfg_state \- Write Protection - Write Protection State
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_plm_window_select.2 b/doc/man/nvme_feat_plm_window_select.2
index e375bd2..48390c3 100644
--- a/doc/man/nvme_feat_plm_window_select.2
+++ b/doc/man/nvme_feat_plm_window_select.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_plm_window_select" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_plm_window_select" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_plm_window_select \- Predictable Latency Per NVM Set Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_resv_notify_flags.2 b/doc/man/nvme_feat_resv_notify_flags.2
index 5729db5..b1c6d92 100644
--- a/doc/man/nvme_feat_resv_notify_flags.2
+++ b/doc/man/nvme_feat_resv_notify_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_resv_notify_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_resv_notify_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_resv_notify_flags \- Reservation Notification Configuration
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_tmpthresh_thsel.2 b/doc/man/nvme_feat_tmpthresh_thsel.2
index 27c2c22..5d10c09 100644
--- a/doc/man/nvme_feat_tmpthresh_thsel.2
+++ b/doc/man/nvme_feat_tmpthresh_thsel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_tmpthresh_thsel" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_tmpthresh_thsel" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_tmpthresh_thsel \- Temperature Threshold - Threshold Type Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_features_async_event_config_flags.2 b/doc/man/nvme_features_async_event_config_flags.2
index 9ce6377..4cb0144 100644
--- a/doc/man/nvme_features_async_event_config_flags.2
+++ b/doc/man/nvme_features_async_event_config_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_features_async_event_config_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_features_async_event_config_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_features_async_event_config_flags \- Asynchronous Event Configuration configuration flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_features_id.2 b/doc/man/nvme_features_id.2
index 8ce8578..b5789f9 100644
--- a/doc/man/nvme_features_id.2
+++ b/doc/man/nvme_features_id.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_features_id" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_features_id" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_features_id \- Features - Feature Identifiers
.SH SYNOPSIS
diff --git a/doc/man/nvme_fid_supported_effects.2 b/doc/man/nvme_fid_supported_effects.2
index dd8366b..ddd9d68 100644
--- a/doc/man/nvme_fid_supported_effects.2
+++ b/doc/man/nvme_fid_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fid_supported_effects" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fid_supported_effects" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fid_supported_effects \- FID Supported and Effects Data Structure definitions
.SH SYNOPSIS
diff --git a/doc/man/nvme_fid_supported_effects_log.2 b/doc/man/nvme_fid_supported_effects_log.2
index 4c786db..b4451e4 100644
--- a/doc/man/nvme_fid_supported_effects_log.2
+++ b/doc/man/nvme_fid_supported_effects_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fid_supported_effects_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fid_supported_effects_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fid_supported_effects_log \- Feature Identifiers Supported and Effects
.SH SYNOPSIS
diff --git a/doc/man/nvme_firmware_slot.2 b/doc/man/nvme_firmware_slot.2
index 06bd9c5..9b662bd 100644
--- a/doc/man/nvme_firmware_slot.2
+++ b/doc/man/nvme_firmware_slot.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_firmware_slot" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_firmware_slot" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_firmware_slot \- Firmware Slot Information Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_first_host.2 b/doc/man/nvme_first_host.2
index 259b2a4..4003212 100644
--- a/doc/man/nvme_first_host.2
+++ b/doc/man/nvme_first_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_first_host" 9 "nvme_first_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_first_host" 9 "nvme_first_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_first_host \- Start host iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_first_subsystem.2 b/doc/man/nvme_first_subsystem.2
index 4de04bf..809d344 100644
--- a/doc/man/nvme_first_subsystem.2
+++ b/doc/man/nvme_first_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_first_subsystem" 9 "nvme_first_subsystem" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_first_subsystem" 9 "nvme_first_subsystem" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_first_subsystem \- Start subsystem iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_flbas.2 b/doc/man/nvme_flbas.2
index 430d241..a79033d 100644
--- a/doc/man/nvme_flbas.2
+++ b/doc/man/nvme_flbas.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_flbas" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_flbas" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_flbas \- This field indicates the formatted LBA size
.SH SYNOPSIS
diff --git a/doc/man/nvme_flush.2 b/doc/man/nvme_flush.2
index 4e8f71a..c992ba4 100644
--- a/doc/man/nvme_flush.2
+++ b/doc/man/nvme_flush.2
@@ -1,4 +1,4 @@
-.TH "nvme_flush" 9 "nvme_flush" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_flush" 9 "nvme_flush" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_flush \- Send an nvme flush command
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_host.2 b/doc/man/nvme_for_each_host.2
index fc9052e..5ce601b 100644
--- a/doc/man/nvme_for_each_host.2
+++ b/doc/man/nvme_for_each_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_host" 9 "nvme_for_each_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_host" 9 "nvme_for_each_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_host \- Traverse host list
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_host_safe.2 b/doc/man/nvme_for_each_host_safe.2
index 1981874..b6a39e2 100644
--- a/doc/man/nvme_for_each_host_safe.2
+++ b/doc/man/nvme_for_each_host_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_host_safe" 9 "nvme_for_each_host_safe" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_host_safe" 9 "nvme_for_each_host_safe" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_host_safe \- Traverse host list
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_subsystem.2 b/doc/man/nvme_for_each_subsystem.2
index c964dcd..741c2db 100644
--- a/doc/man/nvme_for_each_subsystem.2
+++ b/doc/man/nvme_for_each_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_subsystem" 9 "nvme_for_each_subsystem" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_subsystem" 9 "nvme_for_each_subsystem" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_subsystem \- Traverse subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_subsystem_safe.2 b/doc/man/nvme_for_each_subsystem_safe.2
index 4c26e5c..983a0cc 100644
--- a/doc/man/nvme_for_each_subsystem_safe.2
+++ b/doc/man/nvme_for_each_subsystem_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_subsystem_safe" 9 "nvme_for_each_subsystem_safe" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_subsystem_safe" 9 "nvme_for_each_subsystem_safe" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_subsystem_safe \- Traverse subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_format_nvm.2 b/doc/man/nvme_format_nvm.2
index 5c75768..151be44 100644
--- a/doc/man/nvme_format_nvm.2
+++ b/doc/man/nvme_format_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_format_nvm" 9 "nvme_format_nvm" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_format_nvm" 9 "nvme_format_nvm" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_format_nvm \- Format nvme namespace(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_format_nvm_compln_event.2 b/doc/man/nvme_format_nvm_compln_event.2
index 85311e0..9fd31c5 100644
--- a/doc/man/nvme_format_nvm_compln_event.2
+++ b/doc/man/nvme_format_nvm_compln_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_format_nvm_compln_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_format_nvm_compln_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_format_nvm_compln_event \- Format NVM Completion Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_format_nvm_start_event.2 b/doc/man/nvme_format_nvm_start_event.2
index 589ba90..1581173 100644
--- a/doc/man/nvme_format_nvm_start_event.2
+++ b/doc/man/nvme_format_nvm_start_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_format_nvm_start_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_format_nvm_start_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_format_nvm_start_event \- Format NVM Start Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_ctrl.2 b/doc/man/nvme_free_ctrl.2
index 3d76730..e567aae 100644
--- a/doc/man/nvme_free_ctrl.2
+++ b/doc/man/nvme_free_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_ctrl" 9 "nvme_free_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_free_ctrl" 9 "nvme_free_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_ctrl \- Free controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_host.2 b/doc/man/nvme_free_host.2
index f0316cb..aa1f79f 100644
--- a/doc/man/nvme_free_host.2
+++ b/doc/man/nvme_free_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_host" 9 "nvme_free_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_free_host" 9 "nvme_free_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_host \- Free nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_ns.2 b/doc/man/nvme_free_ns.2
index f47ba5c..da58df8 100644
--- a/doc/man/nvme_free_ns.2
+++ b/doc/man/nvme_free_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_ns" 9 "nvme_free_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_free_ns" 9 "nvme_free_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_ns \- Free a namespace object
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_subsystem.2 b/doc/man/nvme_free_subsystem.2
index aa58699..26ec734 100644
--- a/doc/man/nvme_free_subsystem.2
+++ b/doc/man/nvme_free_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_subsystem" 9 "nvme_free_subsystem" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_free_subsystem" 9 "nvme_free_subsystem" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_subsystem \- Free a subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_tree.2 b/doc/man/nvme_free_tree.2
index d50c0f5..db4547c 100644
--- a/doc/man/nvme_free_tree.2
+++ b/doc/man/nvme_free_tree.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_tree" 9 "nvme_free_tree" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_free_tree" 9 "nvme_free_tree" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_tree \- Free root object
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_uri.2 b/doc/man/nvme_free_uri.2
index 3184608..0763cda 100644
--- a/doc/man/nvme_free_uri.2
+++ b/doc/man/nvme_free_uri.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_uri" 9 "nvme_free_uri" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_free_uri" 9 "nvme_free_uri" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_uri \- Free the URI structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_commit.2 b/doc/man/nvme_fw_commit.2
index 7695166..330bc40 100644
--- a/doc/man/nvme_fw_commit.2
+++ b/doc/man/nvme_fw_commit.2
@@ -1,4 +1,4 @@
-.TH "nvme_fw_commit" 9 "nvme_fw_commit" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_fw_commit" 9 "nvme_fw_commit" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fw_commit \- Commit firmware using the specified action
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_commit_ca.2 b/doc/man/nvme_fw_commit_ca.2
index 12e88ad..9324e90 100644
--- a/doc/man/nvme_fw_commit_ca.2
+++ b/doc/man/nvme_fw_commit_ca.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fw_commit_ca" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fw_commit_ca" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_fw_commit_ca \- Firmware Commit - Commit Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_commit_event.2 b/doc/man/nvme_fw_commit_event.2
index 22da525..59122ae 100644
--- a/doc/man/nvme_fw_commit_event.2
+++ b/doc/man/nvme_fw_commit_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fw_commit_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fw_commit_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_fw_commit_event \- Firmware Commit Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_download.2 b/doc/man/nvme_fw_download.2
index dd37f1a..bebc979 100644
--- a/doc/man/nvme_fw_download.2
+++ b/doc/man/nvme_fw_download.2
@@ -1,4 +1,4 @@
-.TH "nvme_fw_download" 9 "nvme_fw_download" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_fw_download" 9 "nvme_fw_download" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fw_download \- Download part or all of a firmware image to the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_download_seq.2 b/doc/man/nvme_fw_download_seq.2
index b975de4..0807d8d 100644
--- a/doc/man/nvme_fw_download_seq.2
+++ b/doc/man/nvme_fw_download_seq.2
@@ -1,4 +1,4 @@
-.TH "nvme_fw_download_seq" 9 "nvme_fw_download_seq" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_fw_download_seq" 9 "nvme_fw_download_seq" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fw_download_seq \- Firmware download sequence
.SH SYNOPSIS
diff --git a/doc/man/nvme_gen_dhchap_key.2 b/doc/man/nvme_gen_dhchap_key.2
index 0145828..aebc0db 100644
--- a/doc/man/nvme_gen_dhchap_key.2
+++ b/doc/man/nvme_gen_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_gen_dhchap_key" 9 "nvme_gen_dhchap_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_gen_dhchap_key" 9 "nvme_gen_dhchap_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_gen_dhchap_key \- DH-HMAC-CHAP key generation
.SH SYNOPSIS
diff --git a/doc/man/nvme_generate_tls_key_identity.2 b/doc/man/nvme_generate_tls_key_identity.2
index f047125..33d00fb 100644
--- a/doc/man/nvme_generate_tls_key_identity.2
+++ b/doc/man/nvme_generate_tls_key_identity.2
@@ -1,4 +1,4 @@
-.TH "nvme_generate_tls_key_identity" 9 "nvme_generate_tls_key_identity" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_generate_tls_key_identity" 9 "nvme_generate_tls_key_identity" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_generate_tls_key_identity \- Generate the TLS key identity
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ana_log_atomic.2 b/doc/man/nvme_get_ana_log_atomic.2
index 1a04b84..db82735 100644
--- a/doc/man/nvme_get_ana_log_atomic.2
+++ b/doc/man/nvme_get_ana_log_atomic.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ana_log_atomic" 9 "nvme_get_ana_log_atomic" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ana_log_atomic" 9 "nvme_get_ana_log_atomic" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ana_log_atomic \- Retrieve Asymmetric Namespace Access log page atomically
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ana_log_len.2 b/doc/man/nvme_get_ana_log_len.2
index 19eafc7..4cda1cb 100644
--- a/doc/man/nvme_get_ana_log_len.2
+++ b/doc/man/nvme_get_ana_log_len.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ana_log_len" 9 "nvme_get_ana_log_len" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ana_log_len" 9 "nvme_get_ana_log_len" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ana_log_len \- Retrieve size of the current ANA log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ana_log_len_from_id_ctrl.2 b/doc/man/nvme_get_ana_log_len_from_id_ctrl.2
index 75fcd17..1370859 100644
--- a/doc/man/nvme_get_ana_log_len_from_id_ctrl.2
+++ b/doc/man/nvme_get_ana_log_len_from_id_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ana_log_len_from_id_ctrl" 9 "nvme_get_ana_log_len_from_id_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ana_log_len_from_id_ctrl" 9 "nvme_get_ana_log_len_from_id_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ana_log_len_from_id_ctrl \- Retrieve maximum possible ANA log size
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_attr.2 b/doc/man/nvme_get_attr.2
index ec6c8aa..fa68398 100644
--- a/doc/man/nvme_get_attr.2
+++ b/doc/man/nvme_get_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_attr" 9 "nvme_get_attr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_attr" 9 "nvme_get_attr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_attr \- Read sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ctrl_attr.2 b/doc/man/nvme_get_ctrl_attr.2
index b4f29c8..67d2861 100644
--- a/doc/man/nvme_get_ctrl_attr.2
+++ b/doc/man/nvme_get_ctrl_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ctrl_attr" 9 "nvme_get_ctrl_attr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ctrl_attr" 9 "nvme_get_ctrl_attr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ctrl_attr \- Read controller sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ctrl_telemetry.2 b/doc/man/nvme_get_ctrl_telemetry.2
index 78e64b8..b603fc3 100644
--- a/doc/man/nvme_get_ctrl_telemetry.2
+++ b/doc/man/nvme_get_ctrl_telemetry.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ctrl_telemetry" 9 "nvme_get_ctrl_telemetry" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ctrl_telemetry" 9 "nvme_get_ctrl_telemetry" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ctrl_telemetry \- Get controller telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_directive_receive_length.2 b/doc/man/nvme_get_directive_receive_length.2
index 8c67f15..60d688e 100644
--- a/doc/man/nvme_get_directive_receive_length.2
+++ b/doc/man/nvme_get_directive_receive_length.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_directive_receive_length" 9 "nvme_get_directive_receive_length" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_directive_receive_length" 9 "nvme_get_directive_receive_length" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_directive_receive_length \- Get directive receive length
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_discovery_args.2 b/doc/man/nvme_get_discovery_args.2
index 740fe10..2db2e2f 100644
--- a/doc/man/nvme_get_discovery_args.2
+++ b/doc/man/nvme_get_discovery_args.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_get_discovery_args" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_get_discovery_args" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_get_discovery_args \- Arguments for nvmf_get_discovery_wargs()
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_feature_length.2 b/doc/man/nvme_get_feature_length.2
index 0ef2c9e..040f32e 100644
--- a/doc/man/nvme_get_feature_length.2
+++ b/doc/man/nvme_get_feature_length.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_feature_length" 9 "nvme_get_feature_length" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_feature_length" 9 "nvme_get_feature_length" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_feature_length \- Retreive the command payload length for a specific feature identifier
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_feature_length2.2 b/doc/man/nvme_get_feature_length2.2
index 8efc42a..e1f07a1 100644
--- a/doc/man/nvme_get_feature_length2.2
+++ b/doc/man/nvme_get_feature_length2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_feature_length2" 9 "nvme_get_feature_length2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_feature_length2" 9 "nvme_get_feature_length2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_feature_length2 \- Retreive the command payload length for a specific feature identifier
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features.2 b/doc/man/nvme_get_features.2
index 2b8a0d5..5e8339c 100644
--- a/doc/man/nvme_get_features.2
+++ b/doc/man/nvme_get_features.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features" 9 "nvme_get_features" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features" 9 "nvme_get_features" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features \- Retrieve a feature attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_arbitration.2 b/doc/man/nvme_get_features_arbitration.2
index 8215349..2e28584 100644
--- a/doc/man/nvme_get_features_arbitration.2
+++ b/doc/man/nvme_get_features_arbitration.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_arbitration" 9 "nvme_get_features_arbitration" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_arbitration" 9 "nvme_get_features_arbitration" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_arbitration \- Get arbitration feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_async_event.2 b/doc/man/nvme_get_features_async_event.2
index 666003b..be5c14f 100644
--- a/doc/man/nvme_get_features_async_event.2
+++ b/doc/man/nvme_get_features_async_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_async_event" 9 "nvme_get_features_async_event" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_async_event" 9 "nvme_get_features_async_event" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_async_event \- Get asynchronous event feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_auto_pst.2 b/doc/man/nvme_get_features_auto_pst.2
index 201dffe..3158d37 100644
--- a/doc/man/nvme_get_features_auto_pst.2
+++ b/doc/man/nvme_get_features_auto_pst.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_auto_pst" 9 "nvme_get_features_auto_pst" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_auto_pst" 9 "nvme_get_features_auto_pst" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_auto_pst \- Get autonomous power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_data.2 b/doc/man/nvme_get_features_data.2
index 41d4cbc..97eeef3 100644
--- a/doc/man/nvme_get_features_data.2
+++ b/doc/man/nvme_get_features_data.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_data" 9 "nvme_get_features_data" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_data" 9 "nvme_get_features_data" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_data \- Helper function for @nvme_get_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_endurance_event_cfg.2 b/doc/man/nvme_get_features_endurance_event_cfg.2
index ab410c2..86b85fd 100644
--- a/doc/man/nvme_get_features_endurance_event_cfg.2
+++ b/doc/man/nvme_get_features_endurance_event_cfg.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_endurance_event_cfg" 9 "nvme_get_features_endurance_event_cfg" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_endurance_event_cfg" 9 "nvme_get_features_endurance_event_cfg" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_endurance_event_cfg \- Get endurance event config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_err_recovery.2 b/doc/man/nvme_get_features_err_recovery.2
index b10f38c..e56a3c5 100644
--- a/doc/man/nvme_get_features_err_recovery.2
+++ b/doc/man/nvme_get_features_err_recovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_err_recovery" 9 "nvme_get_features_err_recovery" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_err_recovery" 9 "nvme_get_features_err_recovery" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_err_recovery \- Get error recovery feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_err_recovery2.2 b/doc/man/nvme_get_features_err_recovery2.2
index 5028e1f..555b3d2 100644
--- a/doc/man/nvme_get_features_err_recovery2.2
+++ b/doc/man/nvme_get_features_err_recovery2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_err_recovery2" 9 "nvme_get_features_err_recovery2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_err_recovery2" 9 "nvme_get_features_err_recovery2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_err_recovery2 \- Get error recovery feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_hctm.2 b/doc/man/nvme_get_features_hctm.2
index 6fd6bdb..8e3d462 100644
--- a/doc/man/nvme_get_features_hctm.2
+++ b/doc/man/nvme_get_features_hctm.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_hctm" 9 "nvme_get_features_hctm" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_hctm" 9 "nvme_get_features_hctm" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_hctm \- Get thermal management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_behavior.2 b/doc/man/nvme_get_features_host_behavior.2
index 8ec0a63..6b973c3 100644
--- a/doc/man/nvme_get_features_host_behavior.2
+++ b/doc/man/nvme_get_features_host_behavior.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_behavior" 9 "nvme_get_features_host_behavior" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_behavior" 9 "nvme_get_features_host_behavior" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_behavior \- Get host behavior feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_id.2 b/doc/man/nvme_get_features_host_id.2
index 89b1d87..9a09e68 100644
--- a/doc/man/nvme_get_features_host_id.2
+++ b/doc/man/nvme_get_features_host_id.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_id" 9 "nvme_get_features_host_id" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_id" 9 "nvme_get_features_host_id" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_id \- Get host id feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_mem_buf.2 b/doc/man/nvme_get_features_host_mem_buf.2
index 3be5a1d..88fc181 100644
--- a/doc/man/nvme_get_features_host_mem_buf.2
+++ b/doc/man/nvme_get_features_host_mem_buf.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_mem_buf" 9 "nvme_get_features_host_mem_buf" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_mem_buf" 9 "nvme_get_features_host_mem_buf" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_mem_buf \- Get host memory buffer feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_mem_buf2.2 b/doc/man/nvme_get_features_host_mem_buf2.2
index fd4dfdd..88a2512 100644
--- a/doc/man/nvme_get_features_host_mem_buf2.2
+++ b/doc/man/nvme_get_features_host_mem_buf2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_mem_buf2" 9 "nvme_get_features_host_mem_buf2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_mem_buf2" 9 "nvme_get_features_host_mem_buf2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_mem_buf2 \- Get host memory buffer feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_iocs_profile.2 b/doc/man/nvme_get_features_iocs_profile.2
index d9859e3..52affe5 100644
--- a/doc/man/nvme_get_features_iocs_profile.2
+++ b/doc/man/nvme_get_features_iocs_profile.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_iocs_profile" 9 "nvme_get_features_iocs_profile" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_iocs_profile" 9 "nvme_get_features_iocs_profile" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_iocs_profile \- Get IOCS profile feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_irq_coalesce.2 b/doc/man/nvme_get_features_irq_coalesce.2
index 092fb48..ca17bf1 100644
--- a/doc/man/nvme_get_features_irq_coalesce.2
+++ b/doc/man/nvme_get_features_irq_coalesce.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_irq_coalesce" 9 "nvme_get_features_irq_coalesce" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_irq_coalesce" 9 "nvme_get_features_irq_coalesce" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_irq_coalesce \- Get IRQ coalesce feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_irq_config.2 b/doc/man/nvme_get_features_irq_config.2
index 1a4e160..0ff9c9e 100644
--- a/doc/man/nvme_get_features_irq_config.2
+++ b/doc/man/nvme_get_features_irq_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_irq_config" 9 "nvme_get_features_irq_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_irq_config" 9 "nvme_get_features_irq_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_irq_config \- Get IRQ config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_kato.2 b/doc/man/nvme_get_features_kato.2
index 6d94148..cba202d 100644
--- a/doc/man/nvme_get_features_kato.2
+++ b/doc/man/nvme_get_features_kato.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_kato" 9 "nvme_get_features_kato" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_kato" 9 "nvme_get_features_kato" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_kato \- Get keep alive timeout feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_lba_range.2 b/doc/man/nvme_get_features_lba_range.2
index 72180c6..68443ec 100644
--- a/doc/man/nvme_get_features_lba_range.2
+++ b/doc/man/nvme_get_features_lba_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_lba_range" 9 "nvme_get_features_lba_range" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_lba_range" 9 "nvme_get_features_lba_range" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_lba_range \- Get LBA range feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_lba_range2.2 b/doc/man/nvme_get_features_lba_range2.2
index f3bfaf5..4ecf7c9 100644
--- a/doc/man/nvme_get_features_lba_range2.2
+++ b/doc/man/nvme_get_features_lba_range2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_lba_range2" 9 "nvme_get_features_lba_range2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_lba_range2" 9 "nvme_get_features_lba_range2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_lba_range2 \- Get LBA range feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_lba_sts_interval.2 b/doc/man/nvme_get_features_lba_sts_interval.2
index 8f85b55..2849e77 100644
--- a/doc/man/nvme_get_features_lba_sts_interval.2
+++ b/doc/man/nvme_get_features_lba_sts_interval.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_lba_sts_interval" 9 "nvme_get_features_lba_sts_interval" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_lba_sts_interval" 9 "nvme_get_features_lba_sts_interval" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_lba_sts_interval \- Get LBA status information feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_nopsc.2 b/doc/man/nvme_get_features_nopsc.2
index 769f1b5..59c44eb 100644
--- a/doc/man/nvme_get_features_nopsc.2
+++ b/doc/man/nvme_get_features_nopsc.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_nopsc" 9 "nvme_get_features_nopsc" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_nopsc" 9 "nvme_get_features_nopsc" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_nopsc \- Get non-operational power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_num_queues.2 b/doc/man/nvme_get_features_num_queues.2
index 2e55bf4..56a4e41 100644
--- a/doc/man/nvme_get_features_num_queues.2
+++ b/doc/man/nvme_get_features_num_queues.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_num_queues" 9 "nvme_get_features_num_queues" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_num_queues" 9 "nvme_get_features_num_queues" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_num_queues \- Get number of queues feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_plm_config.2 b/doc/man/nvme_get_features_plm_config.2
index 1b0e0b0..1a97d61 100644
--- a/doc/man/nvme_get_features_plm_config.2
+++ b/doc/man/nvme_get_features_plm_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_plm_config" 9 "nvme_get_features_plm_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_plm_config" 9 "nvme_get_features_plm_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_plm_config \- Get predictable latency feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_plm_window.2 b/doc/man/nvme_get_features_plm_window.2
index 8459877..ac6d085 100644
--- a/doc/man/nvme_get_features_plm_window.2
+++ b/doc/man/nvme_get_features_plm_window.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_plm_window" 9 "nvme_get_features_plm_window" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_plm_window" 9 "nvme_get_features_plm_window" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_plm_window \- Get window select feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_power_mgmt.2 b/doc/man/nvme_get_features_power_mgmt.2
index 8498b68..552e28a 100644
--- a/doc/man/nvme_get_features_power_mgmt.2
+++ b/doc/man/nvme_get_features_power_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_power_mgmt" 9 "nvme_get_features_power_mgmt" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_power_mgmt" 9 "nvme_get_features_power_mgmt" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_power_mgmt \- Get power management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_mask.2 b/doc/man/nvme_get_features_resv_mask.2
index 1619025..e3c06ba 100644
--- a/doc/man/nvme_get_features_resv_mask.2
+++ b/doc/man/nvme_get_features_resv_mask.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_mask" 9 "nvme_get_features_resv_mask" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_mask" 9 "nvme_get_features_resv_mask" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_mask \- Get reservation mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_mask2.2 b/doc/man/nvme_get_features_resv_mask2.2
index 587cad5..3f4d463 100644
--- a/doc/man/nvme_get_features_resv_mask2.2
+++ b/doc/man/nvme_get_features_resv_mask2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_mask2" 9 "nvme_get_features_resv_mask2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_mask2" 9 "nvme_get_features_resv_mask2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_mask2 \- Get reservation mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_persist.2 b/doc/man/nvme_get_features_resv_persist.2
index e1e8760..9ed470c 100644
--- a/doc/man/nvme_get_features_resv_persist.2
+++ b/doc/man/nvme_get_features_resv_persist.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_persist" 9 "nvme_get_features_resv_persist" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_persist" 9 "nvme_get_features_resv_persist" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_persist \- Get reservation persist feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_persist2.2 b/doc/man/nvme_get_features_resv_persist2.2
index daf0a74..c5cec8a 100644
--- a/doc/man/nvme_get_features_resv_persist2.2
+++ b/doc/man/nvme_get_features_resv_persist2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_persist2" 9 "nvme_get_features_resv_persist2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_persist2" 9 "nvme_get_features_resv_persist2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_persist2 \- Get reservation persist feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_rrl.2 b/doc/man/nvme_get_features_rrl.2
index 50a61f2..3e5b823 100644
--- a/doc/man/nvme_get_features_rrl.2
+++ b/doc/man/nvme_get_features_rrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_rrl" 9 "nvme_get_features_rrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_rrl" 9 "nvme_get_features_rrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_rrl \- Get read recovery level feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_sanitize.2 b/doc/man/nvme_get_features_sanitize.2
index c91ca8c..1b091da 100644
--- a/doc/man/nvme_get_features_sanitize.2
+++ b/doc/man/nvme_get_features_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_sanitize" 9 "nvme_get_features_sanitize" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_sanitize" 9 "nvme_get_features_sanitize" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_sanitize \- Get sanitize feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_sel.2 b/doc/man/nvme_get_features_sel.2
index 4602108..29c1ffd 100644
--- a/doc/man/nvme_get_features_sel.2
+++ b/doc/man/nvme_get_features_sel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_get_features_sel" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_get_features_sel" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_get_features_sel \- Get Features - Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_simple.2 b/doc/man/nvme_get_features_simple.2
index 5e09b9f..7f63ef3 100644
--- a/doc/man/nvme_get_features_simple.2
+++ b/doc/man/nvme_get_features_simple.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_simple" 9 "nvme_get_features_simple" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_simple" 9 "nvme_get_features_simple" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_simple \- Helper function for @nvme_get_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_sw_progress.2 b/doc/man/nvme_get_features_sw_progress.2
index be32cd9..5ad23d3 100644
--- a/doc/man/nvme_get_features_sw_progress.2
+++ b/doc/man/nvme_get_features_sw_progress.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_sw_progress" 9 "nvme_get_features_sw_progress" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_sw_progress" 9 "nvme_get_features_sw_progress" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_sw_progress \- Get software progress feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_temp_thresh.2 b/doc/man/nvme_get_features_temp_thresh.2
index 08ef09b..27a25be 100644
--- a/doc/man/nvme_get_features_temp_thresh.2
+++ b/doc/man/nvme_get_features_temp_thresh.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_temp_thresh" 9 "nvme_get_features_temp_thresh" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_temp_thresh" 9 "nvme_get_features_temp_thresh" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_temp_thresh \- Get temperature threshold feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_timestamp.2 b/doc/man/nvme_get_features_timestamp.2
index a31aab5..a6cfca5 100644
--- a/doc/man/nvme_get_features_timestamp.2
+++ b/doc/man/nvme_get_features_timestamp.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_timestamp" 9 "nvme_get_features_timestamp" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_timestamp" 9 "nvme_get_features_timestamp" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_timestamp \- Get timestamp feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_volatile_wc.2 b/doc/man/nvme_get_features_volatile_wc.2
index c7e5c93..1ee5230 100644
--- a/doc/man/nvme_get_features_volatile_wc.2
+++ b/doc/man/nvme_get_features_volatile_wc.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_volatile_wc" 9 "nvme_get_features_volatile_wc" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_volatile_wc" 9 "nvme_get_features_volatile_wc" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_volatile_wc \- Get volatile write cache feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_write_atomic.2 b/doc/man/nvme_get_features_write_atomic.2
index 658d5ac..c74b789 100644
--- a/doc/man/nvme_get_features_write_atomic.2
+++ b/doc/man/nvme_get_features_write_atomic.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_write_atomic" 9 "nvme_get_features_write_atomic" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_write_atomic" 9 "nvme_get_features_write_atomic" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_write_atomic \- Get write atomic feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_write_protect.2 b/doc/man/nvme_get_features_write_protect.2
index e8e3a9d..9b047a8 100644
--- a/doc/man/nvme_get_features_write_protect.2
+++ b/doc/man/nvme_get_features_write_protect.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_write_protect" 9 "nvme_get_features_write_protect" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_write_protect" 9 "nvme_get_features_write_protect" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_write_protect \- Get write protect feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_host_telemetry.2 b/doc/man/nvme_get_host_telemetry.2
index f9c0801..b19415f 100644
--- a/doc/man/nvme_get_host_telemetry.2
+++ b/doc/man/nvme_get_host_telemetry.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_host_telemetry" 9 "nvme_get_host_telemetry" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_host_telemetry" 9 "nvme_get_host_telemetry" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_host_telemetry \- Get host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_lba_status.2 b/doc/man/nvme_get_lba_status.2
index d43e3b3..9b0ff9b 100644
--- a/doc/man/nvme_get_lba_status.2
+++ b/doc/man/nvme_get_lba_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_lba_status" 9 "nvme_get_lba_status" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_lba_status" 9 "nvme_get_lba_status" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_lba_status \- Retrieve information on possibly unrecoverable LBAs
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_lba_status_log.2 b/doc/man/nvme_get_lba_status_log.2
index 646904a..b999caa 100644
--- a/doc/man/nvme_get_lba_status_log.2
+++ b/doc/man/nvme_get_lba_status_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_lba_status_log" 9 "nvme_get_lba_status_log" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_lba_status_log" 9 "nvme_get_lba_status_log" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_lba_status_log \- Retrieve the LBA Status log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log.2 b/doc/man/nvme_get_log.2
index 10dc7ff..ff62040 100644
--- a/doc/man/nvme_get_log.2
+++ b/doc/man/nvme_get_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log" 9 "nvme_get_log" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log" 9 "nvme_get_log" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log \- NVMe Admin Get Log command
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_ana.2 b/doc/man/nvme_get_log_ana.2
index 8774297..9a23dbe 100644
--- a/doc/man/nvme_get_log_ana.2
+++ b/doc/man/nvme_get_log_ana.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_ana" 9 "nvme_get_log_ana" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_ana" 9 "nvme_get_log_ana" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_ana \- Retrieve Asymmetric Namespace Access log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_ana_groups.2 b/doc/man/nvme_get_log_ana_groups.2
index 7a4f3f7..a964f20 100644
--- a/doc/man/nvme_get_log_ana_groups.2
+++ b/doc/man/nvme_get_log_ana_groups.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_ana_groups" 9 "nvme_get_log_ana_groups" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_ana_groups" 9 "nvme_get_log_ana_groups" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_ana_groups \- Retrieve Asymmetric Namespace Access groups only log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_boot_partition.2 b/doc/man/nvme_get_log_boot_partition.2
index ceb4a06..a5fcd68 100644
--- a/doc/man/nvme_get_log_boot_partition.2
+++ b/doc/man/nvme_get_log_boot_partition.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_boot_partition" 9 "nvme_get_log_boot_partition" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_boot_partition" 9 "nvme_get_log_boot_partition" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_boot_partition \- Retrieve Boot Partition
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_changed_ns_list.2 b/doc/man/nvme_get_log_changed_ns_list.2
index 29e9cfc..d8c2bc6 100644
--- a/doc/man/nvme_get_log_changed_ns_list.2
+++ b/doc/man/nvme_get_log_changed_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_changed_ns_list" 9 "nvme_get_log_changed_ns_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_changed_ns_list" 9 "nvme_get_log_changed_ns_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_changed_ns_list \- Retrieve namespace changed list
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_cmd_effects.2 b/doc/man/nvme_get_log_cmd_effects.2
index 73b165b..f72ffc1 100644
--- a/doc/man/nvme_get_log_cmd_effects.2
+++ b/doc/man/nvme_get_log_cmd_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_cmd_effects" 9 "nvme_get_log_cmd_effects" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_cmd_effects" 9 "nvme_get_log_cmd_effects" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_cmd_effects \- Retrieve nvme command effects log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_create_telemetry_host.2 b/doc/man/nvme_get_log_create_telemetry_host.2
index c51a805..708d31d 100644
--- a/doc/man/nvme_get_log_create_telemetry_host.2
+++ b/doc/man/nvme_get_log_create_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_create_telemetry_host" 9 "nvme_get_log_create_telemetry_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_create_telemetry_host" 9 "nvme_get_log_create_telemetry_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_create_telemetry_host \- Create host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_device_self_test.2 b/doc/man/nvme_get_log_device_self_test.2
index 24403d5..724ccdb 100644
--- a/doc/man/nvme_get_log_device_self_test.2
+++ b/doc/man/nvme_get_log_device_self_test.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_device_self_test" 9 "nvme_get_log_device_self_test" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_device_self_test" 9 "nvme_get_log_device_self_test" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_device_self_test \- Retrieve the device self test log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_discovery.2 b/doc/man/nvme_get_log_discovery.2
index b7019c2..f69dd1c 100644
--- a/doc/man/nvme_get_log_discovery.2
+++ b/doc/man/nvme_get_log_discovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_discovery" 9 "nvme_get_log_discovery" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_discovery" 9 "nvme_get_log_discovery" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_discovery \- Retrieve Discovery log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_endurance_group.2 b/doc/man/nvme_get_log_endurance_group.2
index d242e2d..6a112b0 100644
--- a/doc/man/nvme_get_log_endurance_group.2
+++ b/doc/man/nvme_get_log_endurance_group.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_endurance_group" 9 "nvme_get_log_endurance_group" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_endurance_group" 9 "nvme_get_log_endurance_group" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_endurance_group \- Get Endurance Group log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_endurance_grp_evt.2 b/doc/man/nvme_get_log_endurance_grp_evt.2
index 55b6e5a..4add6a5 100644
--- a/doc/man/nvme_get_log_endurance_grp_evt.2
+++ b/doc/man/nvme_get_log_endurance_grp_evt.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_endurance_grp_evt" 9 "nvme_get_log_endurance_grp_evt" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_endurance_grp_evt" 9 "nvme_get_log_endurance_grp_evt" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_endurance_grp_evt \- Retrieve Rotational Media Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_error.2 b/doc/man/nvme_get_log_error.2
index f4a7f9f..e8b5f2b 100644
--- a/doc/man/nvme_get_log_error.2
+++ b/doc/man/nvme_get_log_error.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_error" 9 "nvme_get_log_error" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_error" 9 "nvme_get_log_error" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_error \- Retrieve nvme error log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fdp_configurations.2 b/doc/man/nvme_get_log_fdp_configurations.2
index 0dcf563..ac496a3 100644
--- a/doc/man/nvme_get_log_fdp_configurations.2
+++ b/doc/man/nvme_get_log_fdp_configurations.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fdp_configurations" 9 "nvme_get_log_fdp_configurations" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fdp_configurations" 9 "nvme_get_log_fdp_configurations" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fdp_configurations \- Get list of Flexible Data Placement configurations
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fdp_events.2 b/doc/man/nvme_get_log_fdp_events.2
index 648e227..d27005c 100644
--- a/doc/man/nvme_get_log_fdp_events.2
+++ b/doc/man/nvme_get_log_fdp_events.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fdp_events" 9 "nvme_get_log_fdp_events" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fdp_events" 9 "nvme_get_log_fdp_events" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fdp_events \- Get Flexible Data Placement events
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fdp_stats.2 b/doc/man/nvme_get_log_fdp_stats.2
index 3d014ce..61ace27 100644
--- a/doc/man/nvme_get_log_fdp_stats.2
+++ b/doc/man/nvme_get_log_fdp_stats.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fdp_stats" 9 "nvme_get_log_fdp_stats" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fdp_stats" 9 "nvme_get_log_fdp_stats" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fdp_stats \- Get Flexible Data Placement statistics
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fid_supported_effects.2 b/doc/man/nvme_get_log_fid_supported_effects.2
index 8cc0e55..342febb 100644
--- a/doc/man/nvme_get_log_fid_supported_effects.2
+++ b/doc/man/nvme_get_log_fid_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fid_supported_effects" 9 "nvme_get_log_fid_supported_effects" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fid_supported_effects" 9 "nvme_get_log_fid_supported_effects" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fid_supported_effects \- Retrieve Feature Identifiers Supported and Effects
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fw_slot.2 b/doc/man/nvme_get_log_fw_slot.2
index 45119ef..6cd31d7 100644
--- a/doc/man/nvme_get_log_fw_slot.2
+++ b/doc/man/nvme_get_log_fw_slot.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fw_slot" 9 "nvme_get_log_fw_slot" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fw_slot" 9 "nvme_get_log_fw_slot" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fw_slot \- Retrieves the controller firmware log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_lba_status.2 b/doc/man/nvme_get_log_lba_status.2
index c32a91b..8119362 100644
--- a/doc/man/nvme_get_log_lba_status.2
+++ b/doc/man/nvme_get_log_lba_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_lba_status" 9 "nvme_get_log_lba_status" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_lba_status" 9 "nvme_get_log_lba_status" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_lba_status \- Retrieve LBA Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_lockdown.2 b/doc/man/nvme_get_log_lockdown.2
new file mode 100644
index 0000000..bb3bf0e
--- /dev/null
+++ b/doc/man/nvme_get_log_lockdown.2
@@ -0,0 +1,18 @@
+.TH "nvme_get_log_lockdown" 9 "nvme_get_log_lockdown" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_get_log_lockdown \- Retrieve lockdown Log
+.SH SYNOPSIS
+.B "int" nvme_get_log_lockdown
+.BI "(int fd " ","
+.BI "__u8 cnscp " ","
+.BI "struct nvme_lockdown_log *lockdown_log " ");"
+.SH ARGUMENTS
+.IP "fd" 12
+File descriptor of nvme device
+.IP "cnscp" 12
+Contents and Scope of Command and Feature Identifier Lists
+.IP "lockdown_log" 12
+Buffer to store the lockdown log
+.SH "RETURN"
+The nvme command status if a response was received (see
+\fIenum nvme_status_field\fP) or -1 with errno set otherwise.
diff --git a/doc/man/nvme_get_log_media_unit_stat.2 b/doc/man/nvme_get_log_media_unit_stat.2
index a0c4eca..a3fc3af 100644
--- a/doc/man/nvme_get_log_media_unit_stat.2
+++ b/doc/man/nvme_get_log_media_unit_stat.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_media_unit_stat" 9 "nvme_get_log_media_unit_stat" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_media_unit_stat" 9 "nvme_get_log_media_unit_stat" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_media_unit_stat \- Retrieve Media Unit Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_mi_cmd_supported_effects.2 b/doc/man/nvme_get_log_mi_cmd_supported_effects.2
index 15327a4..d504568 100644
--- a/doc/man/nvme_get_log_mi_cmd_supported_effects.2
+++ b/doc/man/nvme_get_log_mi_cmd_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_mi_cmd_supported_effects" 9 "nvme_get_log_mi_cmd_supported_effects" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_mi_cmd_supported_effects" 9 "nvme_get_log_mi_cmd_supported_effects" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_mi_cmd_supported_effects \- displays the MI Commands Supported by the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_page.2 b/doc/man/nvme_get_log_page.2
index 98a7844..02df4cc 100644
--- a/doc/man/nvme_get_log_page.2
+++ b/doc/man/nvme_get_log_page.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_page" 9 "nvme_get_log_page" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_page" 9 "nvme_get_log_page" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_page \- Get log page data
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_persistent_event.2 b/doc/man/nvme_get_log_persistent_event.2
index fcc3f63..408642f 100644
--- a/doc/man/nvme_get_log_persistent_event.2
+++ b/doc/man/nvme_get_log_persistent_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_persistent_event" 9 "nvme_get_log_persistent_event" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_persistent_event" 9 "nvme_get_log_persistent_event" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_persistent_event \- Retrieve Persistent Event Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_phy_rx_eom.2 b/doc/man/nvme_get_log_phy_rx_eom.2
index f07c1d1..832dbe7 100644
--- a/doc/man/nvme_get_log_phy_rx_eom.2
+++ b/doc/man/nvme_get_log_phy_rx_eom.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_phy_rx_eom" 9 "nvme_get_log_phy_rx_eom" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_phy_rx_eom" 9 "nvme_get_log_phy_rx_eom" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_phy_rx_eom \- Retrieve Physical Interface Receiver Eye Opening Measurement Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_predictable_lat_event.2 b/doc/man/nvme_get_log_predictable_lat_event.2
index 6e94afa..1dc621c 100644
--- a/doc/man/nvme_get_log_predictable_lat_event.2
+++ b/doc/man/nvme_get_log_predictable_lat_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_predictable_lat_event" 9 "nvme_get_log_predictable_lat_event" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_predictable_lat_event" 9 "nvme_get_log_predictable_lat_event" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_predictable_lat_event \- Retrieve Predictable Latency Event Aggregate Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_predictable_lat_nvmset.2 b/doc/man/nvme_get_log_predictable_lat_nvmset.2
index ee3f240..deabc30 100644
--- a/doc/man/nvme_get_log_predictable_lat_nvmset.2
+++ b/doc/man/nvme_get_log_predictable_lat_nvmset.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_predictable_lat_nvmset" 9 "nvme_get_log_predictable_lat_nvmset" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_predictable_lat_nvmset" 9 "nvme_get_log_predictable_lat_nvmset" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_predictable_lat_nvmset \- Predictable Latency Per NVM Set
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_reclaim_unit_handle_usage.2 b/doc/man/nvme_get_log_reclaim_unit_handle_usage.2
index 5fb1ab9..370c426 100644
--- a/doc/man/nvme_get_log_reclaim_unit_handle_usage.2
+++ b/doc/man/nvme_get_log_reclaim_unit_handle_usage.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_reclaim_unit_handle_usage" 9 "nvme_get_log_reclaim_unit_handle_usage" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_reclaim_unit_handle_usage" 9 "nvme_get_log_reclaim_unit_handle_usage" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_reclaim_unit_handle_usage \- Get reclaim unit handle usage
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_reservation.2 b/doc/man/nvme_get_log_reservation.2
index b3f446d..1dd2146 100644
--- a/doc/man/nvme_get_log_reservation.2
+++ b/doc/man/nvme_get_log_reservation.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_reservation" 9 "nvme_get_log_reservation" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_reservation" 9 "nvme_get_log_reservation" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_reservation \- Retrieve Reservation Notification
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_sanitize.2 b/doc/man/nvme_get_log_sanitize.2
index fb9aea8..34e3946 100644
--- a/doc/man/nvme_get_log_sanitize.2
+++ b/doc/man/nvme_get_log_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_sanitize" 9 "nvme_get_log_sanitize" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_sanitize" 9 "nvme_get_log_sanitize" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_sanitize \- Retrieve Sanitize Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_smart.2 b/doc/man/nvme_get_log_smart.2
index f7aebaf..b77c632 100644
--- a/doc/man/nvme_get_log_smart.2
+++ b/doc/man/nvme_get_log_smart.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_smart" 9 "nvme_get_log_smart" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_smart" 9 "nvme_get_log_smart" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_smart \- Retrieve nvme smart log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_support_cap_config_list.2 b/doc/man/nvme_get_log_support_cap_config_list.2
index 5b67ad7..224d2a5 100644
--- a/doc/man/nvme_get_log_support_cap_config_list.2
+++ b/doc/man/nvme_get_log_support_cap_config_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_support_cap_config_list" 9 "nvme_get_log_support_cap_config_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_support_cap_config_list" 9 "nvme_get_log_support_cap_config_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_support_cap_config_list \- Retrieve Supported Capacity Configuration List
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_supported_log_pages.2 b/doc/man/nvme_get_log_supported_log_pages.2
index ba6e580..49fbc63 100644
--- a/doc/man/nvme_get_log_supported_log_pages.2
+++ b/doc/man/nvme_get_log_supported_log_pages.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_supported_log_pages" 9 "nvme_get_log_supported_log_pages" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_supported_log_pages" 9 "nvme_get_log_supported_log_pages" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_supported_log_pages \- Retrieve nmve supported log pages
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_telemetry_ctrl.2 b/doc/man/nvme_get_log_telemetry_ctrl.2
index 75798ce..ac3dac8 100644
--- a/doc/man/nvme_get_log_telemetry_ctrl.2
+++ b/doc/man/nvme_get_log_telemetry_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_telemetry_ctrl" 9 "nvme_get_log_telemetry_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_telemetry_ctrl" 9 "nvme_get_log_telemetry_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_telemetry_ctrl \- Get Telemetry Controller-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_telemetry_host.2 b/doc/man/nvme_get_log_telemetry_host.2
index d6ff3e3..4d3c326 100644
--- a/doc/man/nvme_get_log_telemetry_host.2
+++ b/doc/man/nvme_get_log_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_telemetry_host" 9 "nvme_get_log_telemetry_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_telemetry_host" 9 "nvme_get_log_telemetry_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_telemetry_host \- Get Telemetry Host-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_zns_changed_zones.2 b/doc/man/nvme_get_log_zns_changed_zones.2
index 7a80572..7a1598d 100644
--- a/doc/man/nvme_get_log_zns_changed_zones.2
+++ b/doc/man/nvme_get_log_zns_changed_zones.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_zns_changed_zones" 9 "nvme_get_log_zns_changed_zones" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_zns_changed_zones" 9 "nvme_get_log_zns_changed_zones" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_zns_changed_zones \- Retrieve list of zones that have changed
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_logging_level.2 b/doc/man/nvme_get_logging_level.2
index 7e0fdc1..b8487b5 100644
--- a/doc/man/nvme_get_logging_level.2
+++ b/doc/man/nvme_get_logging_level.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_logging_level" 9 "nvme_get_logging_level" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_logging_level" 9 "nvme_get_logging_level" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_logging_level \- Get current logging level
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_logical_block_size.2 b/doc/man/nvme_get_logical_block_size.2
index 9623b68..611119f 100644
--- a/doc/man/nvme_get_logical_block_size.2
+++ b/doc/man/nvme_get_logical_block_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_logical_block_size" 9 "nvme_get_logical_block_size" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_logical_block_size" 9 "nvme_get_logical_block_size" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_logical_block_size \- Retrieve block size
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_new_host_telemetry.2 b/doc/man/nvme_get_new_host_telemetry.2
index bd69b7f..5098cf8 100644
--- a/doc/man/nvme_get_new_host_telemetry.2
+++ b/doc/man/nvme_get_new_host_telemetry.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_new_host_telemetry" 9 "nvme_get_new_host_telemetry" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_new_host_telemetry" 9 "nvme_get_new_host_telemetry" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_new_host_telemetry \- Get new host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ns_attr.2 b/doc/man/nvme_get_ns_attr.2
index 6c15636..105ae69 100644
--- a/doc/man/nvme_get_ns_attr.2
+++ b/doc/man/nvme_get_ns_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ns_attr" 9 "nvme_get_ns_attr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ns_attr" 9 "nvme_get_ns_attr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ns_attr \- Read namespace sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_nsid.2 b/doc/man/nvme_get_nsid.2
index 4aa9618..78f341e 100644
--- a/doc/man/nvme_get_nsid.2
+++ b/doc/man/nvme_get_nsid.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_nsid" 9 "nvme_get_nsid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_nsid" 9 "nvme_get_nsid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_nsid \- Retrieve the NSID from a namespace file descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_path_attr.2 b/doc/man/nvme_get_path_attr.2
index f57464d..60a7916 100644
--- a/doc/man/nvme_get_path_attr.2
+++ b/doc/man/nvme_get_path_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_path_attr" 9 "nvme_get_path_attr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_path_attr" 9 "nvme_get_path_attr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_path_attr \- Read path sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_property.2 b/doc/man/nvme_get_property.2
index e12fa51..d0f9bce 100644
--- a/doc/man/nvme_get_property.2
+++ b/doc/man/nvme_get_property.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_property" 9 "nvme_get_property" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_property" 9 "nvme_get_property" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_property \- Get a controller property
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_subsys_attr.2 b/doc/man/nvme_get_subsys_attr.2
index f69eba6..c8cf635 100644
--- a/doc/man/nvme_get_subsys_attr.2
+++ b/doc/man/nvme_get_subsys_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_subsys_attr" 9 "nvme_get_subsys_attr" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_subsys_attr" 9 "nvme_get_subsys_attr" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_subsys_attr \- Read subsystem sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_telemetry_log.2 b/doc/man/nvme_get_telemetry_log.2
index 6e98430..2c1a962 100644
--- a/doc/man/nvme_get_telemetry_log.2
+++ b/doc/man/nvme_get_telemetry_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_telemetry_log" 9 "nvme_get_telemetry_log" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_telemetry_log" 9 "nvme_get_telemetry_log" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_telemetry_log \- Get specified telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_telemetry_max.2 b/doc/man/nvme_get_telemetry_max.2
index 4915d7e..335ae72 100644
--- a/doc/man/nvme_get_telemetry_max.2
+++ b/doc/man/nvme_get_telemetry_max.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_telemetry_max" 9 "nvme_get_telemetry_max" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_get_telemetry_max" 9 "nvme_get_telemetry_max" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_telemetry_max \- Get telemetry limits
.SH SYNOPSIS
diff --git a/doc/man/nvme_hmac_alg.2 b/doc/man/nvme_hmac_alg.2
index 1497c52..4911a8a 100644
--- a/doc/man/nvme_hmac_alg.2
+++ b/doc/man/nvme_hmac_alg.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_hmac_alg" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_hmac_alg" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_hmac_alg \- HMAC algorithm
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_behavior_support.2 b/doc/man/nvme_host_behavior_support.2
index a6f6744..444468a 100644
--- a/doc/man/nvme_host_behavior_support.2
+++ b/doc/man/nvme_host_behavior_support.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_host_behavior_support" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_host_behavior_support" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_host_behavior_support \- Enable Advanced Command
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_dhchap_key.2 b/doc/man/nvme_host_get_dhchap_key.2
index 48807c8..9882a6e 100644
--- a/doc/man/nvme_host_get_dhchap_key.2
+++ b/doc/man/nvme_host_get_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_dhchap_key" 9 "nvme_host_get_dhchap_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_dhchap_key" 9 "nvme_host_get_dhchap_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_dhchap_key \- Return host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_hostid.2 b/doc/man/nvme_host_get_hostid.2
index e503a32..518593d 100644
--- a/doc/man/nvme_host_get_hostid.2
+++ b/doc/man/nvme_host_get_hostid.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_hostid" 9 "nvme_host_get_hostid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_hostid" 9 "nvme_host_get_hostid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_hostid \- Host ID of an nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_hostnqn.2 b/doc/man/nvme_host_get_hostnqn.2
index 12f90a4..c377aba 100644
--- a/doc/man/nvme_host_get_hostnqn.2
+++ b/doc/man/nvme_host_get_hostnqn.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_hostnqn" 9 "nvme_host_get_hostnqn" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_hostnqn" 9 "nvme_host_get_hostnqn" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_hostnqn \- Host NQN of an nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_hostsymname.2 b/doc/man/nvme_host_get_hostsymname.2
index cbac4ee..19823dc 100644
--- a/doc/man/nvme_host_get_hostsymname.2
+++ b/doc/man/nvme_host_get_hostsymname.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_hostsymname" 9 "nvme_host_get_hostsymname" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_hostsymname" 9 "nvme_host_get_hostsymname" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_hostsymname \- Get the host's symbolic name
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_root.2 b/doc/man/nvme_host_get_root.2
index 4ef1a41..2d3b0f4 100644
--- a/doc/man/nvme_host_get_root.2
+++ b/doc/man/nvme_host_get_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_root" 9 "nvme_host_get_root" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_root" 9 "nvme_host_get_root" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_root \- Returns nvme_root_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_is_pdc_enabled.2 b/doc/man/nvme_host_is_pdc_enabled.2
index 4a5c107..24404fc 100644
--- a/doc/man/nvme_host_is_pdc_enabled.2
+++ b/doc/man/nvme_host_is_pdc_enabled.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_is_pdc_enabled" 9 "nvme_host_is_pdc_enabled" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_is_pdc_enabled" 9 "nvme_host_is_pdc_enabled" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_is_pdc_enabled \- Is Persistenct Discovery Controller enabled
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_mem_buf_attrs.2 b/doc/man/nvme_host_mem_buf_attrs.2
index 1a31943..5a799f2 100644
--- a/doc/man/nvme_host_mem_buf_attrs.2
+++ b/doc/man/nvme_host_mem_buf_attrs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_host_mem_buf_attrs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_host_mem_buf_attrs" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_host_mem_buf_attrs \- Host Memory Buffer - Attributes Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_metadata.2 b/doc/man/nvme_host_metadata.2
index d62395b..0df8436 100644
--- a/doc/man/nvme_host_metadata.2
+++ b/doc/man/nvme_host_metadata.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_host_metadata" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_host_metadata" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_host_metadata \- Host Metadata Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_release_fds.2 b/doc/man/nvme_host_release_fds.2
index 2359646..f9c727e 100644
--- a/doc/man/nvme_host_release_fds.2
+++ b/doc/man/nvme_host_release_fds.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_release_fds" 9 "nvme_host_release_fds" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_release_fds" 9 "nvme_host_release_fds" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_release_fds \- Close all opened file descriptors under host
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_set_dhchap_key.2 b/doc/man/nvme_host_set_dhchap_key.2
index 8e96d67..0760467 100644
--- a/doc/man/nvme_host_set_dhchap_key.2
+++ b/doc/man/nvme_host_set_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_set_dhchap_key" 9 "nvme_host_set_dhchap_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_set_dhchap_key" 9 "nvme_host_set_dhchap_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_set_dhchap_key \- set host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_set_hostsymname.2 b/doc/man/nvme_host_set_hostsymname.2
index 210ee95..7a3ab27 100644
--- a/doc/man/nvme_host_set_hostsymname.2
+++ b/doc/man/nvme_host_set_hostsymname.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_set_hostsymname" 9 "nvme_host_set_hostsymname" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_set_hostsymname" 9 "nvme_host_set_hostsymname" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_set_hostsymname \- Set the host's symbolic name
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_set_pdc_enabled.2 b/doc/man/nvme_host_set_pdc_enabled.2
index cf539f4..6f3d061 100644
--- a/doc/man/nvme_host_set_pdc_enabled.2
+++ b/doc/man/nvme_host_set_pdc_enabled.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_set_pdc_enabled" 9 "nvme_host_set_pdc_enabled" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_host_set_pdc_enabled" 9 "nvme_host_set_pdc_enabled" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_set_pdc_enabled \- Set Persistent Discovery Controller flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl.2 b/doc/man/nvme_id_ctrl.2
index cf30291..883cd99 100644
--- a/doc/man/nvme_id_ctrl.2
+++ b/doc/man/nvme_id_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ctrl" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ctrl" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ctrl \- Identify Controller data structure
.SH SYNOPSIS
@@ -130,7 +130,9 @@ struct nvme_id_ctrl {
.br
.BI " __u8 megcap[16];"
.br
-.BI " __u8 rsvd384[128];"
+.BI " __u8 tmpthha;"
+.br
+.BI " __u8 rsvd385[127];"
.br
.BI " __u8 sqes;"
.br
@@ -170,7 +172,31 @@ struct nvme_id_ctrl {
.br
.BI " __le32 oaqd;"
.br
-.BI " __u8 rsvd568[200];"
+.BI " __u8 rsvd568[2];"
+.br
+.BI " __u16 cmmrtd;"
+.br
+.BI " __u16 nmmrtd;"
+.br
+.BI " __u8 minmrtg;"
+.br
+.BI " __u8 maxmrtg;"
+.br
+.BI " __u8 trattr;"
+.br
+.BI " __u8 rsvd577;"
+.br
+.BI " __u16 mcudmq;"
+.br
+.BI " __u16 mnsudmq;"
+.br
+.BI " __u16 mcmr;"
+.br
+.BI " __u16 nmcmr;"
+.br
+.BI " __u16 mcdqpc;"
+.br
+.BI " __u8 rsvd588[180];"
.br
.BI " char subnqn[NVME_NQN_LENGTH];"
.br
@@ -408,7 +434,9 @@ Reserved
.IP "megcap" 12
Max Endurance Group Capacity indicates the maximum capacity
of a single Endurance Group.
-.IP "rsvd384" 12
+.IP "tmpthha" 12
+Temperature Threshold Hysteresis Attributes
+.IP "rsvd385" 12
Reserved
.IP "sqes" 12
Submission Queue Entry Size, see \fIenum nvme_id_ctrl_sqes\fP.
@@ -477,6 +505,51 @@ total number of outstanding I/O commands across all I/O queues
on the controller for optimal operation.
.IP "rsvd568" 12
Reserved
+.IP "cmmrtd" 12
+Controller Maximum Memory Range Tracking Descriptors indicates
+the maximum number of Memory Range Tracking Descriptors the
+controller supports.
+.IP "nmmrtd" 12
+NVM Subsystem Maximum Memory Range Tracking Descriptors
+indicates the maximum number of Memory Range Tracking Descriptors
+the NVM subsystem supports.
+.IP "minmrtg" 12
+Minimum Memory Range Tracking Granularity indicates the minimum
+value supported in the Requested Memory Range Tracking
+Granularity (RMRTG) field of the Track Memory Ranges data
+structure.
+.IP "maxmrtg" 12
+Maximum Memory Range Tracking Granularity indicates the maximum
+value supported in the Requested Memory Range Tracking
+Granularity (RMRTG) field of the Track Memory Ranges data
+structure.
+.IP "trattr" 12
+Tracking Attributes indicates supported attributes for the
+Track Send command and Track Receive command.
+.IP "rsvd577" 12
+Reserved
+.IP "mcudmq" 12
+Maximum Controller User Data Migration Queues indicates the
+maximum number of User Data Migration Queues supported by the
+controller.
+.IP "mnsudmq" 12
+Maximum NVM Subsystem User Data Migration Queues indicates the
+maximum number of User Data Migration Queues supported by the NVM
+subsystem.
+.IP "mcmr" 12
+Maximum CDQ Memory Ranges indicates the maximum number of
+memory ranges allowed to be specified by the PRP1 field of a
+Controller Data Queue command.
+.IP "nmcmr" 12
+NVM Subsystem Maximum CDQ Memory Ranges indicates the maximum
+number of memory ranges for all Controller Data Queues in the
+NVM subsystem.
+.IP "mcdqpc" 12
+Maximum Controller Data Queue PRP Count indicates the maximum
+number of PRPs allowed to be specified in the PRP list in the
+Controller Data Queue command.
+.IP "rsvd588" 12
+Reserved
.IP "subnqn" 12
NVM Subsystem NVMe Qualified Name, UTF-8 null terminated string
.IP "rsvd1024" 12
diff --git a/doc/man/nvme_id_ctrl_anacap.2 b/doc/man/nvme_id_ctrl_anacap.2
index 1d534d6..a4bf206 100644
--- a/doc/man/nvme_id_ctrl_anacap.2
+++ b/doc/man/nvme_id_ctrl_anacap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_anacap" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_anacap" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_anacap \- This field indicates the capabilities associated with Asymmetric Namespace Access Reporting.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_apsta.2 b/doc/man/nvme_id_ctrl_apsta.2
index 1f2a2c2..cd942cd 100644
--- a/doc/man/nvme_id_ctrl_apsta.2
+++ b/doc/man/nvme_id_ctrl_apsta.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_apsta" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_apsta" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_apsta \- Flags indicating the attributes of the autonomous power state transition feature.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_avscc.2 b/doc/man/nvme_id_ctrl_avscc.2
index 8eff34f..8a34a78 100644
--- a/doc/man/nvme_id_ctrl_avscc.2
+++ b/doc/man/nvme_id_ctrl_avscc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_avscc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_avscc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_avscc \- Flags indicating the configuration settings for Admin Vendor Specific command handling.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_cmic.2 b/doc/man/nvme_id_ctrl_cmic.2
index f649b91..6131e2a 100644
--- a/doc/man/nvme_id_ctrl_cmic.2
+++ b/doc/man/nvme_id_ctrl_cmic.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_cmic" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_cmic" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_cmic \- Controller Multipath IO and Namespace Sharing Capabilities of the controller and NVM subsystem.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_cntrltype.2 b/doc/man/nvme_id_ctrl_cntrltype.2
index e799f94..eab04f7 100644
--- a/doc/man/nvme_id_ctrl_cntrltype.2
+++ b/doc/man/nvme_id_ctrl_cntrltype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_cntrltype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_cntrltype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_cntrltype \- Controller types
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_cqes.2 b/doc/man/nvme_id_ctrl_cqes.2
index 294cda4..6faf6c5 100644
--- a/doc/man/nvme_id_ctrl_cqes.2
+++ b/doc/man/nvme_id_ctrl_cqes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_cqes" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_cqes" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_cqes \- Defines the required and maximum Completion Queue entry size when using the NVM Command Set.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_ctratt.2 b/doc/man/nvme_id_ctrl_ctratt.2
index 43dc5c9..c410dd9 100644
--- a/doc/man/nvme_id_ctrl_ctratt.2
+++ b/doc/man/nvme_id_ctrl_ctratt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_ctratt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_ctratt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_ctratt \- Controller attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_dctype.2 b/doc/man/nvme_id_ctrl_dctype.2
index e128244..1676000 100644
--- a/doc/man/nvme_id_ctrl_dctype.2
+++ b/doc/man/nvme_id_ctrl_dctype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_dctype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_dctype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_dctype \- Discovery Controller types
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_dsto.2 b/doc/man/nvme_id_ctrl_dsto.2
index 2b96f2a..c862fd4 100644
--- a/doc/man/nvme_id_ctrl_dsto.2
+++ b/doc/man/nvme_id_ctrl_dsto.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_dsto" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_dsto" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_dsto \- Flags indicating the optional Device Self-test command or operation behaviors supported by the controller or NVM subsystem.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_fcatt.2 b/doc/man/nvme_id_ctrl_fcatt.2
index 66f79c6..06c5101 100644
--- a/doc/man/nvme_id_ctrl_fcatt.2
+++ b/doc/man/nvme_id_ctrl_fcatt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_fcatt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_fcatt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_fcatt \- This field indicates attributes of the controller that are specific to NVMe over Fabrics.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_fna.2 b/doc/man/nvme_id_ctrl_fna.2
index 61ae9e9..c425e20 100644
--- a/doc/man/nvme_id_ctrl_fna.2
+++ b/doc/man/nvme_id_ctrl_fna.2
@@ -1,9 +1,41 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_fna" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_fna" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_fna \- This field indicates attributes for the Format NVM command.
.SH SYNOPSIS
enum nvme_id_ctrl_fna {
.br
+.BI " NVME_CTRL_FNA_FMT_ALL_NS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_FNA_SEC_ALL_NS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_FNA_CES_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_FNA_NSID_ALL_F_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_FNA_FMT_ALL_NS_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_FNA_SEC_ALL_NS_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_FNA_CES_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_FNA_NSID_ALL_F_MASK"
+,
+.br
+.br
.BI " NVME_CTRL_FNA_FMT_ALL_NAMESPACES"
,
.br
@@ -20,6 +52,22 @@ enum nvme_id_ctrl_fna {
};
.SH Constants
+.IP "NVME_CTRL_FNA_FMT_ALL_NS_SHIFT" 12
+Shift amount to get the format applied to all namespaces
+.IP "NVME_CTRL_FNA_SEC_ALL_NS_SHIFT" 12
+Shift amount to get the secure erase applied to all namespaces
+.IP "NVME_CTRL_FNA_CES_SHIFT" 12
+Shift amount to get the cryptographic erase supported
+.IP "NVME_CTRL_FNA_NSID_ALL_F_SHIFT" 12
+Shift amount to get the format supported an NSID FFFFFFFFh
+.IP "NVME_CTRL_FNA_FMT_ALL_NS_MASK" 12
+Mask to get the format applied to all namespaces
+.IP "NVME_CTRL_FNA_SEC_ALL_NS_MASK" 12
+Mask to get the secure erase applied to all namespaces
+.IP "NVME_CTRL_FNA_CES_MASK" 12
+Mask to get the cryptographic erase supported
+.IP "NVME_CTRL_FNA_NSID_ALL_F_MASK" 12
+Mask to get the format supported an NSID FFFFFFFFh
.IP "NVME_CTRL_FNA_FMT_ALL_NAMESPACES" 12
If set, then all namespaces in an NVM
subsystem shall be configured with the
diff --git a/doc/man/nvme_id_ctrl_frmw.2 b/doc/man/nvme_id_ctrl_frmw.2
index b4e795e..5baab22 100644
--- a/doc/man/nvme_id_ctrl_frmw.2
+++ b/doc/man/nvme_id_ctrl_frmw.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_frmw" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_frmw" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_frmw \- Flags and values indicates capabilities regarding firmware updates from &struct nvme_id_ctrl.frmw.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_fuses.2 b/doc/man/nvme_id_ctrl_fuses.2
index d63fa61..ee890a3 100644
--- a/doc/man/nvme_id_ctrl_fuses.2
+++ b/doc/man/nvme_id_ctrl_fuses.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_fuses" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_fuses" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_fuses \- This field indicates the fused operations that the controller supports.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_hctm.2 b/doc/man/nvme_id_ctrl_hctm.2
index 345095c..9831d9a 100644
--- a/doc/man/nvme_id_ctrl_hctm.2
+++ b/doc/man/nvme_id_ctrl_hctm.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_hctm" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_hctm" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_hctm \- Flags indicate the attributes of the host controlled thermal management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_lpa.2 b/doc/man/nvme_id_ctrl_lpa.2
index d881182..75ddad4 100644
--- a/doc/man/nvme_id_ctrl_lpa.2
+++ b/doc/man/nvme_id_ctrl_lpa.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_lpa" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_lpa" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_lpa \- Flags indicating optional attributes for log pages that are accessed via the Get Log Page command.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_mec.2 b/doc/man/nvme_id_ctrl_mec.2
index 2b3d7c6..5593927 100644
--- a/doc/man/nvme_id_ctrl_mec.2
+++ b/doc/man/nvme_id_ctrl_mec.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_mec" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_mec" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_mec \- Flags indicating the capabilities of the Management Endpoint in the Controller, &struct nvme_id_ctrl.mec.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_nvm.2 b/doc/man/nvme_id_ctrl_nvm.2
index e463c7d..39efbdd 100644
--- a/doc/man/nvme_id_ctrl_nvm.2
+++ b/doc/man/nvme_id_ctrl_nvm.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ctrl_nvm" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ctrl_nvm" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ctrl_nvm \- I/O Command Set Specific Identify Controller data structure
.SH SYNOPSIS
@@ -20,7 +20,11 @@ struct nvme_id_ctrl_nvm {
.br
.BI " __le16 aocs;"
.br
-.BI " __u8 rsvd20[4076];"
+.BI " __le32 ver;"
+.br
+.BI " __u8 lbamqf;"
+.br
+.BI " __u8 rsvd25[4071];"
.br
.BI "
};
@@ -43,5 +47,9 @@ Dataset Management Size Limit
Reserved
.IP "aocs" 12
Admin Optional Command Support
-.IP "rsvd20" 12
+.IP "ver" 12
+Version
+.IP "lbamqf" 12
+LBA Migration Queue Format
+.IP "rsvd25" 12
Reserved
diff --git a/doc/man/nvme_id_ctrl_nvmsr.2 b/doc/man/nvme_id_ctrl_nvmsr.2
index 5274196..abb0571 100644
--- a/doc/man/nvme_id_ctrl_nvmsr.2
+++ b/doc/man/nvme_id_ctrl_nvmsr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_nvmsr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_nvmsr" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_nvmsr \- This field reports information associated with the NVM Subsystem, see &struct nvme_id_ctrl.nvmsr.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_nvscc.2 b/doc/man/nvme_id_ctrl_nvscc.2
index 11c6a40..1ec579c 100644
--- a/doc/man/nvme_id_ctrl_nvscc.2
+++ b/doc/man/nvme_id_ctrl_nvscc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_nvscc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_nvscc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_nvscc \- This field indicates the configuration settings for NVM Vendor Specific command handling.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_nwpc.2 b/doc/man/nvme_id_ctrl_nwpc.2
index e7d5db3..50c8225 100644
--- a/doc/man/nvme_id_ctrl_nwpc.2
+++ b/doc/man/nvme_id_ctrl_nwpc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_nwpc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_nwpc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_nwpc \- This field indicates the optional namespace write protection capabilities supported by the controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_oacs.2 b/doc/man/nvme_id_ctrl_oacs.2
index 374781c..3b340ca 100644
--- a/doc/man/nvme_id_ctrl_oacs.2
+++ b/doc/man/nvme_id_ctrl_oacs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_oacs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_oacs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_oacs \- Flags indicating the optional Admin commands and features supported by the controller, see &struct nvme_id_ctrl.oacs.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_oaes.2 b/doc/man/nvme_id_ctrl_oaes.2
index 179e913..9bc2e2d 100644
--- a/doc/man/nvme_id_ctrl_oaes.2
+++ b/doc/man/nvme_id_ctrl_oaes.2
@@ -1,9 +1,105 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_oaes" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_oaes" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_oaes \- Optional Asynchronous Events Supported
.SH SYNOPSIS
enum nvme_id_ctrl_oaes {
.br
+.BI " NVME_CTRL_OAES_NA_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_FA_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_ANA_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_PLEA_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_LBAS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_EGE_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_NS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_TTH_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_RGCNS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_ANSAN_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_ZD_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_DL_SHIFT"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_NA_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_FA_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_ANA_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_PLEA_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_LBAS_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_EGE_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_NS_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_TTH_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_RGCNS_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_ANSAN_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_ZD_MASK"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_DL_MASK"
+,
+.br
+.br
.BI " NVME_CTRL_OAES_NA"
,
.br
@@ -32,6 +128,18 @@ enum nvme_id_ctrl_oaes {
,
.br
.br
+.BI " NVME_CTRL_OAES_TTH"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_RGCNS"
+,
+.br
+.br
+.BI " NVME_CTRL_OAES_ANSAN"
+,
+.br
+.br
.BI " NVME_CTRL_OAES_ZD"
,
.br
@@ -40,6 +148,63 @@ enum nvme_id_ctrl_oaes {
};
.SH Constants
+.IP "NVME_CTRL_OAES_NA_SHIFT" 12
+Shift amount to get the Namespace Attribute Notices event supported
+.IP "NVME_CTRL_OAES_FA_SHIFT" 12
+Shift amount to get the Firmware Activation Notices event supported
+.IP "NVME_CTRL_OAES_ANA_SHIFT" 12
+Shift amount to get the ANA Change Notices supported
+.IP "NVME_CTRL_OAES_PLEA_SHIFT" 12
+Shift amount to get the Predictable Latency Event Aggregate Log
+Change Notices event supported
+.IP "NVME_CTRL_OAES_LBAS_SHIFT" 12
+Shift amount to get the LBA Status Information Notices event
+supported
+.IP "NVME_CTRL_OAES_EGE_SHIFT" 12
+Shift amount to get the Endurance Group Events Aggregate Log Change
+Notices event supported
+.IP "NVME_CTRL_OAES_NS_SHIFT" 12
+Shift amount to get the Normal NVM Subsystem Shutdown event supported
+.IP "NVME_CTRL_OAES_TTH_SHIFT" 12
+Shift amount to get the Temperature Threshold Hysteresis Recovery
+event supported
+.IP "NVME_CTRL_OAES_RGCNS_SHIFT" 12
+Shift amount to get the Reachability Groups Change Notices supported
+.IP "NVME_CTRL_OAES_ANSAN_SHIFT" 12
+Shift amount to get the Allocated Namespace Attribute Notices
+supported
+.IP "NVME_CTRL_OAES_ZD_SHIFT" 12
+Shift amount to get the Zone Descriptor Change Notifications supported
+.IP "NVME_CTRL_OAES_DL_SHIFT" 12
+Shift amount to get the Discover Log Page Change Notifications
+supported
+.IP "NVME_CTRL_OAES_NA_MASK" 12
+Mask to get the Namespace Attribute Notices event supported
+.IP "NVME_CTRL_OAES_FA_MASK" 12
+Mask to get the Firmware Activation Notices event supported
+.IP "NVME_CTRL_OAES_ANA_MASK" 12
+Mask to get the ANA Change Notices supported
+.IP "NVME_CTRL_OAES_PLEA_MASK" 12
+Mask to get the Predictable Latency Event Aggregate Log Change Notices
+event supported
+.IP "NVME_CTRL_OAES_LBAS_MASK" 12
+Mask to get the LBA Status Information Notices event supported
+.IP "NVME_CTRL_OAES_EGE_MASK" 12
+Mask to get the Endurance Group Events Aggregate Log Change Notices
+event supported
+.IP "NVME_CTRL_OAES_NS_MASK" 12
+Mask to get the Normal NVM Subsystem Shutdown event supported
+.IP "NVME_CTRL_OAES_TTH_MASK" 12
+Mask to get the Temperature Threshold Hysteresis Recovery event
+supported
+.IP "NVME_CTRL_OAES_RGCNS_MASK" 12
+Mask to get the Reachability Groups Change Notices supported
+.IP "NVME_CTRL_OAES_ANSAN_MASK" 12
+Mask to get the Allocated Namespace Attribute Notices supported
+.IP "NVME_CTRL_OAES_ZD_MASK" 12
+Mask to get the Zone Descriptor Change Notifications supported
+.IP "NVME_CTRL_OAES_DL_MASK" 12
+Mask to get the Discover Log Page Change Notifications supported
.IP "NVME_CTRL_OAES_NA" 12
Namespace Attribute Notices event supported
.IP "NVME_CTRL_OAES_FA" 12
@@ -47,15 +212,19 @@ Firmware Activation Notices event supported
.IP "NVME_CTRL_OAES_ANA" 12
ANA Change Notices supported
.IP "NVME_CTRL_OAES_PLEA" 12
-Predictable Latency Event Aggregate Log
-Change Notices event supported
+Predictable Latency Event Aggregate Log Change Notices event supported
.IP "NVME_CTRL_OAES_LBAS" 12
LBA Status Information Notices event supported
.IP "NVME_CTRL_OAES_EGE" 12
-Endurance Group Events Aggregate Log Change
-Notices event supported
+Endurance Group Events Aggregate Log Change Notices event supported
.IP "NVME_CTRL_OAES_NS" 12
Normal NVM Subsystem Shutdown event supported
+.IP "NVME_CTRL_OAES_TTH" 12
+Temperature Threshold Hysteresis Recovery event supported
+.IP "NVME_CTRL_OAES_RGCNS" 12
+Reachability Groups Change Notices supported
+.IP "NVME_CTRL_OAES_ANSAN" 12
+Allocated Namespace Attribute Notices supported
.IP "NVME_CTRL_OAES_ZD" 12
Zone Descriptor Change Notifications supported
.IP "NVME_CTRL_OAES_DL" 12
diff --git a/doc/man/nvme_id_ctrl_ofcs.2 b/doc/man/nvme_id_ctrl_ofcs.2
index 4695e85..4c67a01 100644
--- a/doc/man/nvme_id_ctrl_ofcs.2
+++ b/doc/man/nvme_id_ctrl_ofcs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_ofcs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_ofcs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_ofcs \- Indicate whether the controller supports optional fabric commands.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_oncs.2 b/doc/man/nvme_id_ctrl_oncs.2
index 50020de..dad11ab 100644
--- a/doc/man/nvme_id_ctrl_oncs.2
+++ b/doc/man/nvme_id_ctrl_oncs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_oncs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_oncs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_oncs \- This field indicates the optional NVM commands and features supported by the controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_rpmbs.2 b/doc/man/nvme_id_ctrl_rpmbs.2
index b092a24..24d9650 100644
--- a/doc/man/nvme_id_ctrl_rpmbs.2
+++ b/doc/man/nvme_id_ctrl_rpmbs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_rpmbs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_rpmbs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_rpmbs \- This field indicates if the controller supports one or more Replay Protected Memory Blocks, from &struct nvme_id_ctrl.rpmbs.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_sanicap.2 b/doc/man/nvme_id_ctrl_sanicap.2
index 63c737b..6b0d247 100644
--- a/doc/man/nvme_id_ctrl_sanicap.2
+++ b/doc/man/nvme_id_ctrl_sanicap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_sanicap" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_sanicap" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_sanicap \- Indicates attributes for sanitize operations.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_sgls.2 b/doc/man/nvme_id_ctrl_sgls.2
index 9d1bbd3..9a6c450 100644
--- a/doc/man/nvme_id_ctrl_sgls.2
+++ b/doc/man/nvme_id_ctrl_sgls.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_sgls" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_sgls" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_sgls \- This field indicates if SGLs are supported for the NVM Command Set and the particular SGL types supported.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_sqes.2 b/doc/man/nvme_id_ctrl_sqes.2
index d8b4d46..4905637 100644
--- a/doc/man/nvme_id_ctrl_sqes.2
+++ b/doc/man/nvme_id_ctrl_sqes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_sqes" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_sqes" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_sqes \- Defines the required and maximum Submission Queue entry size when using the NVM Command Set.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_vwc.2 b/doc/man/nvme_id_ctrl_vwc.2
index ba95986..57a260c 100644
--- a/doc/man/nvme_id_ctrl_vwc.2
+++ b/doc/man/nvme_id_ctrl_vwc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_vwc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_vwc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_vwc \- Volatile write cache
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_vwci.2 b/doc/man/nvme_id_ctrl_vwci.2
index 17ccfc6..4d28503 100644
--- a/doc/man/nvme_id_ctrl_vwci.2
+++ b/doc/man/nvme_id_ctrl_vwci.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_vwci" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_vwci" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_vwci \- This field indicates information about remaining number of times that VPD contents are able to be updated using the VPD Write command, see &struct nvme_id_ctrl.vwci.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_directives.2 b/doc/man/nvme_id_directives.2
index d595b3a..4a082eb 100644
--- a/doc/man/nvme_id_directives.2
+++ b/doc/man/nvme_id_directives.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_directives" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_directives" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_directives \- Identify Directive - Return Parameters Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_domain_attr.2 b/doc/man/nvme_id_domain_attr.2
index 48d9d15..cbc1d49 100644
--- a/doc/man/nvme_id_domain_attr.2
+++ b/doc/man/nvme_id_domain_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_domain_attr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_domain_attr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_domain_attr \- Domain Attributes Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_domain_list.2 b/doc/man/nvme_id_domain_list.2
index fedde92..adce203 100644
--- a/doc/man/nvme_id_domain_list.2
+++ b/doc/man/nvme_id_domain_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_domain_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_domain_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_domain_list \- Domain List
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_endurance_group_list.2 b/doc/man/nvme_id_endurance_group_list.2
index 2135951..84d619a 100644
--- a/doc/man/nvme_id_endurance_group_list.2
+++ b/doc/man/nvme_id_endurance_group_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_endurance_group_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_endurance_group_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_endurance_group_list \- Endurance Group List
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_independent_id_ns.2 b/doc/man/nvme_id_independent_id_ns.2
index 7757745..7583611 100644
--- a/doc/man/nvme_id_independent_id_ns.2
+++ b/doc/man/nvme_id_independent_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_independent_id_ns" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_independent_id_ns" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_independent_id_ns \- Identify - I/O Command Set Independent Identify Namespace Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_iocs.2 b/doc/man/nvme_id_iocs.2
index 9108a2c..53810a6 100644
--- a/doc/man/nvme_id_iocs.2
+++ b/doc/man/nvme_id_iocs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_iocs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_iocs" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_iocs \- NVMe Identify IO Command Set data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns.2 b/doc/man/nvme_id_ns.2
index f9e7027..d410131 100644
--- a/doc/man/nvme_id_ns.2
+++ b/doc/man/nvme_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ns" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ns" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ns \- Identify Namespace data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_attr.2 b/doc/man/nvme_id_ns_attr.2
index eb2c0f5..882b805 100644
--- a/doc/man/nvme_id_ns_attr.2
+++ b/doc/man/nvme_id_ns_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_attr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_attr" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_attr \- Specifies attributes of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_dlfeat.2 b/doc/man/nvme_id_ns_dlfeat.2
index 58e73ca..c8fe8e9 100644
--- a/doc/man/nvme_id_ns_dlfeat.2
+++ b/doc/man/nvme_id_ns_dlfeat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_dlfeat" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_dlfeat" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_dlfeat \- This field indicates information about features that affect deallocating logical blocks for this namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_dpc.2 b/doc/man/nvme_id_ns_dpc.2
index c993b69..a8927db 100644
--- a/doc/man/nvme_id_ns_dpc.2
+++ b/doc/man/nvme_id_ns_dpc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_dpc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_dpc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_dpc \- This field indicates the capabilities for the end-to-end data protection feature.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_dps.2 b/doc/man/nvme_id_ns_dps.2
index 30c50b8..08a9d7e 100644
--- a/doc/man/nvme_id_ns_dps.2
+++ b/doc/man/nvme_id_ns_dps.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_dps" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_dps" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_dps \- This field indicates the Type settings for the end-to-end data protection feature.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_flbas.2 b/doc/man/nvme_id_ns_flbas.2
index 394ec6a..81a8696 100644
--- a/doc/man/nvme_id_ns_flbas.2
+++ b/doc/man/nvme_id_ns_flbas.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_flbas" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_flbas" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_flbas \- This field indicates the LBA data size & metadata size combination that the namespace has been formatted with
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_granularity_desc.2 b/doc/man/nvme_id_ns_granularity_desc.2
index c18a777..ac0aab7 100644
--- a/doc/man/nvme_id_ns_granularity_desc.2
+++ b/doc/man/nvme_id_ns_granularity_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ns_granularity_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ns_granularity_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ns_granularity_desc \- Namespace Granularity Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_granularity_list.2 b/doc/man/nvme_id_ns_granularity_list.2
index 6ccd850..3277255 100644
--- a/doc/man/nvme_id_ns_granularity_list.2
+++ b/doc/man/nvme_id_ns_granularity_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ns_granularity_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ns_granularity_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ns_granularity_list \- Namespace Granularity List
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_mc.2 b/doc/man/nvme_id_ns_mc.2
index ff94c14..18bdb7e 100644
--- a/doc/man/nvme_id_ns_mc.2
+++ b/doc/man/nvme_id_ns_mc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_mc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_mc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_mc \- This field indicates the capabilities for metadata.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_nmic.2 b/doc/man/nvme_id_ns_nmic.2
index 54b2e4e..843fe1b 100644
--- a/doc/man/nvme_id_ns_nmic.2
+++ b/doc/man/nvme_id_ns_nmic.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_nmic" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_nmic" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_nmic \- This field specifies multi-path I/O and namespace sharing capabilities of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_rescap.2 b/doc/man/nvme_id_ns_rescap.2
index dc052c7..be4f478 100644
--- a/doc/man/nvme_id_ns_rescap.2
+++ b/doc/man/nvme_id_ns_rescap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_rescap" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_rescap" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_rescap \- This field indicates the reservation capabilities of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_nsfeat.2 b/doc/man/nvme_id_nsfeat.2
index c864eb9..a8cbe9a 100644
--- a/doc/man/nvme_id_nsfeat.2
+++ b/doc/man/nvme_id_nsfeat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_nsfeat" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_nsfeat" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_nsfeat \- This field defines features of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_nvmset_list.2 b/doc/man/nvme_id_nvmset_list.2
index 995a9ba..4531156 100644
--- a/doc/man/nvme_id_nvmset_list.2
+++ b/doc/man/nvme_id_nvmset_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_nvmset_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_nvmset_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_nvmset_list \- NVM set list
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_psd.2 b/doc/man/nvme_id_psd.2
index 513d965..97bf90e 100644
--- a/doc/man/nvme_id_psd.2
+++ b/doc/man/nvme_id_psd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_psd" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_psd" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_psd \- Power Management data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_uuid.2 b/doc/man/nvme_id_uuid.2
index 6a7963b..a035151 100644
--- a/doc/man/nvme_id_uuid.2
+++ b/doc/man/nvme_id_uuid.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_uuid" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_uuid" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_uuid \- Identifier Association
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_uuid_list.2 b/doc/man/nvme_id_uuid_list.2
index 9101f39..67957dd 100644
--- a/doc/man/nvme_id_uuid_list.2
+++ b/doc/man/nvme_id_uuid_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_uuid_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_uuid_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_uuid_list \- UUID list
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_uuid_list_entry.2 b/doc/man/nvme_id_uuid_list_entry.2
index 38d3621..dc0feff 100644
--- a/doc/man/nvme_id_uuid_list_entry.2
+++ b/doc/man/nvme_id_uuid_list_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_uuid_list_entry" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_uuid_list_entry" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_uuid_list_entry \- UUID List Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify.2 b/doc/man/nvme_identify.2
index 47a8ae8..ebe9e1e 100644
--- a/doc/man/nvme_identify.2
+++ b/doc/man/nvme_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify" 9 "nvme_identify" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify" 9 "nvme_identify" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify \- Send the NVMe Identify command
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_active_ns_list.2 b/doc/man/nvme_identify_active_ns_list.2
index 71e5e3b..2fc354a 100644
--- a/doc/man/nvme_identify_active_ns_list.2
+++ b/doc/man/nvme_identify_active_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_active_ns_list" 9 "nvme_identify_active_ns_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_active_ns_list" 9 "nvme_identify_active_ns_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_active_ns_list \- Retrieves active namespaces id list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_active_ns_list_csi.2 b/doc/man/nvme_identify_active_ns_list_csi.2
index 3bf9b08..8383380 100644
--- a/doc/man/nvme_identify_active_ns_list_csi.2
+++ b/doc/man/nvme_identify_active_ns_list_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_active_ns_list_csi" 9 "nvme_identify_active_ns_list_csi" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_active_ns_list_csi" 9 "nvme_identify_active_ns_list_csi" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_active_ns_list_csi \- Active namespace ID list associated with a specified I/O command set
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_allocated_ns.2 b/doc/man/nvme_identify_allocated_ns.2
index c849f17..8367a65 100644
--- a/doc/man/nvme_identify_allocated_ns.2
+++ b/doc/man/nvme_identify_allocated_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_allocated_ns" 9 "nvme_identify_allocated_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_allocated_ns" 9 "nvme_identify_allocated_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_allocated_ns \- Same as nvme_identify_ns, but only for allocated namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_allocated_ns_list.2 b/doc/man/nvme_identify_allocated_ns_list.2
index 608d245..7665218 100644
--- a/doc/man/nvme_identify_allocated_ns_list.2
+++ b/doc/man/nvme_identify_allocated_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_allocated_ns_list" 9 "nvme_identify_allocated_ns_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_allocated_ns_list" 9 "nvme_identify_allocated_ns_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_allocated_ns_list \- Retrieves allocated namespace id list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_allocated_ns_list_csi.2 b/doc/man/nvme_identify_allocated_ns_list_csi.2
index c101c4b..7c1110b 100644
--- a/doc/man/nvme_identify_allocated_ns_list_csi.2
+++ b/doc/man/nvme_identify_allocated_ns_list_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_allocated_ns_list_csi" 9 "nvme_identify_allocated_ns_list_csi" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_allocated_ns_list_csi" 9 "nvme_identify_allocated_ns_list_csi" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_allocated_ns_list_csi \- Allocated namespace ID list associated with a specified I/O command set
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_cns.2 b/doc/man/nvme_identify_cns.2
index 89c0b34..ebf5205 100644
--- a/doc/man/nvme_identify_cns.2
+++ b/doc/man/nvme_identify_cns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_identify_cns" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_identify_cns" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_identify_cns \- Identify - CNS Values
.SH SYNOPSIS
@@ -97,6 +97,10 @@ enum nvme_identify_cns {
.br
.br
.BI " NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE"
+,
+.br
+.br
+.BI " NVME_IDENTIFY_CNS_SUPPORTED_CTRL_STATE_FORMATS"
};
.SH Constants
@@ -161,3 +165,7 @@ I/O Command Set specific ID Namespace
Data Structure for Allocated Namespace ID
.IP "NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE" 12
Base Specification 2.0a section 5.17.2.21
+.IP "NVME_IDENTIFY_CNS_SUPPORTED_CTRL_STATE_FORMATS" 12
+Supported Controller State Formats
+identifying the supported NVMe Controller
+State data structures
diff --git a/doc/man/nvme_identify_ctrl.2 b/doc/man/nvme_identify_ctrl.2
index be8072e..da50fae 100644
--- a/doc/man/nvme_identify_ctrl.2
+++ b/doc/man/nvme_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ctrl" 9 "nvme_identify_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ctrl" 9 "nvme_identify_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ctrl \- Retrieves nvme identify controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ctrl_csi.2 b/doc/man/nvme_identify_ctrl_csi.2
index 5866f6e..af90f8b 100644
--- a/doc/man/nvme_identify_ctrl_csi.2
+++ b/doc/man/nvme_identify_ctrl_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ctrl_csi" 9 "nvme_identify_ctrl_csi" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ctrl_csi" 9 "nvme_identify_ctrl_csi" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ctrl_csi \- I/O command set specific Identify Controller data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ctrl_list.2 b/doc/man/nvme_identify_ctrl_list.2
index c5db40d..bdb650c 100644
--- a/doc/man/nvme_identify_ctrl_list.2
+++ b/doc/man/nvme_identify_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ctrl_list" 9 "nvme_identify_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ctrl_list" 9 "nvme_identify_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ctrl_list \- Retrieves identify controller list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_domain_list.2 b/doc/man/nvme_identify_domain_list.2
index c545fc4..259202e 100644
--- a/doc/man/nvme_identify_domain_list.2
+++ b/doc/man/nvme_identify_domain_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_domain_list" 9 "nvme_identify_domain_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_domain_list" 9 "nvme_identify_domain_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_domain_list \- Domain list data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_endurance_group_list.2 b/doc/man/nvme_identify_endurance_group_list.2
index d1969de..22fa5b8 100644
--- a/doc/man/nvme_identify_endurance_group_list.2
+++ b/doc/man/nvme_identify_endurance_group_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_endurance_group_list" 9 "nvme_identify_endurance_group_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_endurance_group_list" 9 "nvme_identify_endurance_group_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_endurance_group_list \- Endurance group list data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_independent_identify_ns.2 b/doc/man/nvme_identify_independent_identify_ns.2
index 09d07c0..1722250 100644
--- a/doc/man/nvme_identify_independent_identify_ns.2
+++ b/doc/man/nvme_identify_independent_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_independent_identify_ns" 9 "nvme_identify_independent_identify_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_independent_identify_ns" 9 "nvme_identify_independent_identify_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_independent_identify_ns \- I/O command set independent Identify namespace data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_iocs.2 b/doc/man/nvme_identify_iocs.2
index b91f85f..64a9424 100644
--- a/doc/man/nvme_identify_iocs.2
+++ b/doc/man/nvme_identify_iocs.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_iocs" 9 "nvme_identify_iocs" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_iocs" 9 "nvme_identify_iocs" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_iocs \- I/O command set data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2 b/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2
index 3ad7036..0fce601 100644
--- a/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2
+++ b/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_iocs_ns_csi_user_data_format" 9 "nvme_identify_iocs_ns_csi_user_data_format" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_iocs_ns_csi_user_data_format" 9 "nvme_identify_iocs_ns_csi_user_data_format" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_iocs_ns_csi_user_data_format \- Identify I/O command set namespace data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns.2 b/doc/man/nvme_identify_ns.2
index 8feba58..b195bf3 100644
--- a/doc/man/nvme_identify_ns.2
+++ b/doc/man/nvme_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns" 9 "nvme_identify_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns" 9 "nvme_identify_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns \- Retrieves nvme identify namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_csi.2 b/doc/man/nvme_identify_ns_csi.2
index 48bc8f7..44e6382 100644
--- a/doc/man/nvme_identify_ns_csi.2
+++ b/doc/man/nvme_identify_ns_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_csi" 9 "nvme_identify_ns_csi" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_csi" 9 "nvme_identify_ns_csi" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_csi \- I/O command set specific identify namespace data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_csi_user_data_format.2 b/doc/man/nvme_identify_ns_csi_user_data_format.2
index a511e2f..666b99a 100644
--- a/doc/man/nvme_identify_ns_csi_user_data_format.2
+++ b/doc/man/nvme_identify_ns_csi_user_data_format.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_csi_user_data_format" 9 "nvme_identify_ns_csi_user_data_format" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_csi_user_data_format" 9 "nvme_identify_ns_csi_user_data_format" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_csi_user_data_format \- Identify namespace user data format
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_descs.2 b/doc/man/nvme_identify_ns_descs.2
index 1e9c6f7..a305c23 100644
--- a/doc/man/nvme_identify_ns_descs.2
+++ b/doc/man/nvme_identify_ns_descs.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_descs" 9 "nvme_identify_ns_descs" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_descs" 9 "nvme_identify_ns_descs" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_descs \- Retrieves namespace descriptor list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_granularity.2 b/doc/man/nvme_identify_ns_granularity.2
index dd3d913..222a8bc 100644
--- a/doc/man/nvme_identify_ns_granularity.2
+++ b/doc/man/nvme_identify_ns_granularity.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_granularity" 9 "nvme_identify_ns_granularity" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_granularity" 9 "nvme_identify_ns_granularity" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_granularity \- Retrieves namespace granularity identification
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_nsid_ctrl_list.2 b/doc/man/nvme_identify_nsid_ctrl_list.2
index 4c766c9..bd82a59 100644
--- a/doc/man/nvme_identify_nsid_ctrl_list.2
+++ b/doc/man/nvme_identify_nsid_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_nsid_ctrl_list" 9 "nvme_identify_nsid_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_nsid_ctrl_list" 9 "nvme_identify_nsid_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_nsid_ctrl_list \- Retrieves controller list attached to an nsid
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_nvmset_list.2 b/doc/man/nvme_identify_nvmset_list.2
index 50c1886..892c5fe 100644
--- a/doc/man/nvme_identify_nvmset_list.2
+++ b/doc/man/nvme_identify_nvmset_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_nvmset_list" 9 "nvme_identify_nvmset_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_nvmset_list" 9 "nvme_identify_nvmset_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_nvmset_list \- Retrieves NVM Set List
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_primary_ctrl.2 b/doc/man/nvme_identify_primary_ctrl.2
index 6ce5585..6400010 100644
--- a/doc/man/nvme_identify_primary_ctrl.2
+++ b/doc/man/nvme_identify_primary_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_primary_ctrl" 9 "nvme_identify_primary_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_primary_ctrl" 9 "nvme_identify_primary_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_primary_ctrl \- Retrieve NVMe Primary Controller identification
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_secondary_ctrl_list.2 b/doc/man/nvme_identify_secondary_ctrl_list.2
index 784df58..f0cb0b5 100644
--- a/doc/man/nvme_identify_secondary_ctrl_list.2
+++ b/doc/man/nvme_identify_secondary_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_secondary_ctrl_list" 9 "nvme_identify_secondary_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_secondary_ctrl_list" 9 "nvme_identify_secondary_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_secondary_ctrl_list \- Retrieves secondary controller list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_uuid.2 b/doc/man/nvme_identify_uuid.2
index d95629c..34744f2 100644
--- a/doc/man/nvme_identify_uuid.2
+++ b/doc/man/nvme_identify_uuid.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_uuid" 9 "nvme_identify_uuid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_uuid" 9 "nvme_identify_uuid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_uuid \- Retrieves device's UUIDs
.SH SYNOPSIS
diff --git a/doc/man/nvme_import_tls_key.2 b/doc/man/nvme_import_tls_key.2
index 0c548fd..2fb16a1 100644
--- a/doc/man/nvme_import_tls_key.2
+++ b/doc/man/nvme_import_tls_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_import_tls_key" 9 "nvme_import_tls_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_import_tls_key" 9 "nvme_import_tls_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_import_tls_key \- Import a TLS key
.SH SYNOPSIS
diff --git a/doc/man/nvme_import_tls_key_versioned.2 b/doc/man/nvme_import_tls_key_versioned.2
new file mode 100644
index 0000000..080c17c
--- /dev/null
+++ b/doc/man/nvme_import_tls_key_versioned.2
@@ -0,0 +1,25 @@
+.TH "nvme_import_tls_key_versioned" 9 "nvme_import_tls_key_versioned" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_import_tls_key_versioned \- Import a TLS key
+.SH SYNOPSIS
+.B "unsigned char *" nvme_import_tls_key_versioned
+.BI "(const char *encoded_key " ","
+.BI "unsigned char *version " ","
+.BI "unsigned char *hmac " ","
+.BI "size_t *key_len " ");"
+.SH ARGUMENTS
+.IP "encoded_key" 12
+TLS key in PSK interchange format
+.IP "version" 12
+Indicated the representation of the TLS PSK
+.IP "hmac" 12
+HMAC algorithm used to transfor the configured
+PSK in a retained PSK
+.IP "key_len" 12
+Length of the resulting key data
+.SH "DESCRIPTION"
+Imports \fIkey_data\fP in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+.SH "RETURN"
+The raw data of the PSK or NULL with errno set on error. It is
+the responsibility of the caller to free the returned string.
diff --git a/doc/man/nvme_init_copy_range.2 b/doc/man/nvme_init_copy_range.2
index 5bdc130..be2fba2 100644
--- a/doc/man/nvme_init_copy_range.2
+++ b/doc/man/nvme_init_copy_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range" 9 "nvme_init_copy_range" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range" 9 "nvme_init_copy_range" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range \- Constructs a copy range structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_copy_range_f1.2 b/doc/man/nvme_init_copy_range_f1.2
index 70f75b3..56f7e3c 100644
--- a/doc/man/nvme_init_copy_range_f1.2
+++ b/doc/man/nvme_init_copy_range_f1.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range_f1" 9 "nvme_init_copy_range_f1" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range_f1" 9 "nvme_init_copy_range_f1" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range_f1 \- Constructs a copy range f1 structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_copy_range_f2.2 b/doc/man/nvme_init_copy_range_f2.2
index e404eab..190ee9f 100644
--- a/doc/man/nvme_init_copy_range_f2.2
+++ b/doc/man/nvme_init_copy_range_f2.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range_f2" 9 "nvme_init_copy_range_f2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range_f2" 9 "nvme_init_copy_range_f2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range_f2 \- Constructs a copy range f2 structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_copy_range_f3.2 b/doc/man/nvme_init_copy_range_f3.2
index 2f1f819..94dbaf1 100644
--- a/doc/man/nvme_init_copy_range_f3.2
+++ b/doc/man/nvme_init_copy_range_f3.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range_f3" 9 "nvme_init_copy_range_f3" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range_f3" 9 "nvme_init_copy_range_f3" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range_f3 \- Constructs a copy range f3 structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_ctrl.2 b/doc/man/nvme_init_ctrl.2
index b372651..59cf5ad 100644
--- a/doc/man/nvme_init_ctrl.2
+++ b/doc/man/nvme_init_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_ctrl" 9 "nvme_init_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_ctrl" 9 "nvme_init_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_ctrl \- Initialize nvme_ctrl_t object for an existing controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_ctrl_list.2 b/doc/man/nvme_init_ctrl_list.2
index be973d2..6fbc50e 100644
--- a/doc/man/nvme_init_ctrl_list.2
+++ b/doc/man/nvme_init_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_ctrl_list" 9 "nvme_init_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_ctrl_list" 9 "nvme_init_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_ctrl_list \- Initialize an nvme_ctrl_list structure from an array.
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_default_logging.2 b/doc/man/nvme_init_default_logging.2
index 5d20b57..c6c7b06 100644
--- a/doc/man/nvme_init_default_logging.2
+++ b/doc/man/nvme_init_default_logging.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_default_logging" 9 "nvme_init_default_logging" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_default_logging" 9 "nvme_init_default_logging" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_default_logging \- Initialize default (fallback) logging
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_dsm_range.2 b/doc/man/nvme_init_dsm_range.2
index 2e0a052..f780c7e 100644
--- a/doc/man/nvme_init_dsm_range.2
+++ b/doc/man/nvme_init_dsm_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_dsm_range" 9 "nvme_init_dsm_range" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_dsm_range" 9 "nvme_init_dsm_range" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_dsm_range \- Constructs a data set range structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_logging.2 b/doc/man/nvme_init_logging.2
index 0022338..46d420d 100644
--- a/doc/man/nvme_init_logging.2
+++ b/doc/man/nvme_init_logging.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_logging" 9 "nvme_init_logging" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_init_logging" 9 "nvme_init_logging" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_logging \- Initialize logging
.SH SYNOPSIS
diff --git a/doc/man/nvme_insert_tls_key.2 b/doc/man/nvme_insert_tls_key.2
index 6171bf3..bb62ef4 100644
--- a/doc/man/nvme_insert_tls_key.2
+++ b/doc/man/nvme_insert_tls_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_insert_tls_key" 9 "nvme_insert_tls_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_insert_tls_key" 9 "nvme_insert_tls_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_insert_tls_key \- Derive and insert TLS key
.SH SYNOPSIS
diff --git a/doc/man/nvme_insert_tls_key_versioned.2 b/doc/man/nvme_insert_tls_key_versioned.2
index 5d486a6..bf48cbe 100644
--- a/doc/man/nvme_insert_tls_key_versioned.2
+++ b/doc/man/nvme_insert_tls_key_versioned.2
@@ -1,4 +1,4 @@
-.TH "nvme_insert_tls_key_versioned" 9 "nvme_insert_tls_key_versioned" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_insert_tls_key_versioned" 9 "nvme_insert_tls_key_versioned" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_insert_tls_key_versioned \- Derive and insert TLS key
.SH SYNOPSIS
diff --git a/doc/man/nvme_io.2 b/doc/man/nvme_io.2
index 35d79d6..4ac72ce 100644
--- a/doc/man/nvme_io.2
+++ b/doc/man/nvme_io.2
@@ -1,4 +1,4 @@
-.TH "nvme_io" 9 "nvme_io" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_io" 9 "nvme_io" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io \- Submit an nvme user I/O command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_control_flags.2 b/doc/man/nvme_io_control_flags.2
index f734187..351ff9b 100644
--- a/doc/man/nvme_io_control_flags.2
+++ b/doc/man/nvme_io_control_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_control_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_control_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_control_flags \- I/O control flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_dsm_flags.2 b/doc/man/nvme_io_dsm_flags.2
index 8e751ff..6198e83 100644
--- a/doc/man/nvme_io_dsm_flags.2
+++ b/doc/man/nvme_io_dsm_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_dsm_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_dsm_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_dsm_flags \- Dataset Management flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_recv.2 b/doc/man/nvme_io_mgmt_recv.2
index 7ff00f4..e00efcb 100644
--- a/doc/man/nvme_io_mgmt_recv.2
+++ b/doc/man/nvme_io_mgmt_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_mgmt_recv" 9 "nvme_io_mgmt_recv" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_io_mgmt_recv" 9 "nvme_io_mgmt_recv" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_mgmt_recv \- I/O Management Receive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_recv_mo.2 b/doc/man/nvme_io_mgmt_recv_mo.2
index 08f2358..5e63db9 100644
--- a/doc/man/nvme_io_mgmt_recv_mo.2
+++ b/doc/man/nvme_io_mgmt_recv_mo.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_mgmt_recv_mo" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_mgmt_recv_mo" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_mgmt_recv_mo \- I/O Management Receive - Management Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_send.2 b/doc/man/nvme_io_mgmt_send.2
index 39e4ecc..c208da5 100644
--- a/doc/man/nvme_io_mgmt_send.2
+++ b/doc/man/nvme_io_mgmt_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_mgmt_send" 9 "nvme_io_mgmt_send" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_io_mgmt_send" 9 "nvme_io_mgmt_send" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_mgmt_send \- I/O Management Send command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_send_mo.2 b/doc/man/nvme_io_mgmt_send_mo.2
index 3a59bc4..991d95d 100644
--- a/doc/man/nvme_io_mgmt_send_mo.2
+++ b/doc/man/nvme_io_mgmt_send_mo.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_mgmt_send_mo" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_mgmt_send_mo" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_mgmt_send_mo \- I/O Management Send - Management Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_opcode.2 b/doc/man/nvme_io_opcode.2
index 7813077..ac2ba36 100644
--- a/doc/man/nvme_io_opcode.2
+++ b/doc/man/nvme_io_opcode.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_opcode" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_opcode" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_opcode \- Opcodes for I/O Commands
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_passthru.2 b/doc/man/nvme_io_passthru.2
index 41efe60..f75a69d 100644
--- a/doc/man/nvme_io_passthru.2
+++ b/doc/man/nvme_io_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_passthru" 9 "nvme_io_passthru" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_io_passthru" 9 "nvme_io_passthru" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_passthru \- Submit an nvme io passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_passthru64.2 b/doc/man/nvme_io_passthru64.2
index 13b2fa0..99e15c7 100644
--- a/doc/man/nvme_io_passthru64.2
+++ b/doc/man/nvme_io_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_passthru64" 9 "nvme_io_passthru64" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_io_passthru64" 9 "nvme_io_passthru64" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_passthru64 \- Submit an nvme io passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_is_64bit_reg.2 b/doc/man/nvme_is_64bit_reg.2
index f11f012..e36bbb7 100644
--- a/doc/man/nvme_is_64bit_reg.2
+++ b/doc/man/nvme_is_64bit_reg.2
@@ -1,4 +1,4 @@
-.TH "nvme_is_64bit_reg" 9 "nvme_is_64bit_reg" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_is_64bit_reg" 9 "nvme_is_64bit_reg" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_is_64bit_reg \- Checks if offset of the controller register is a know 64bit value.
.SH SYNOPSIS
diff --git a/doc/man/nvme_kv_opcode.2 b/doc/man/nvme_kv_opcode.2
new file mode 100644
index 0000000..4ad07d2
--- /dev/null
+++ b/doc/man/nvme_kv_opcode.2
@@ -0,0 +1,66 @@
+.TH "libnvme" 9 "enum nvme_kv_opcode" "October 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_kv_opcode \- Opcodes for KV Commands
+.SH SYNOPSIS
+enum nvme_kv_opcode {
+.br
+.BI " nvme_kv_cmd_flush"
+,
+.br
+.br
+.BI " nvme_kv_cmd_store"
+,
+.br
+.br
+.BI " nvme_kv_cmd_retrieve"
+,
+.br
+.br
+.BI " nvme_kv_cmd_list"
+,
+.br
+.br
+.BI " nvme_kv_cmd_resv_register"
+,
+.br
+.br
+.BI " nvme_kv_cmd_resv_report"
+,
+.br
+.br
+.BI " nvme_kv_cmd_delete"
+,
+.br
+.br
+.BI " nvme_kv_cmd_resv_acquire"
+,
+.br
+.br
+.BI " nvme_kv_cmd_exist"
+,
+.br
+.br
+.BI " nvme_kv_cmd_resv_release"
+
+};
+.SH Constants
+.IP "nvme_kv_cmd_flush" 12
+Flush
+.IP "nvme_kv_cmd_store" 12
+Store
+.IP "nvme_kv_cmd_retrieve" 12
+Retrieve
+.IP "nvme_kv_cmd_list" 12
+List
+.IP "nvme_kv_cmd_resv_register" 12
+Reservation Register
+.IP "nvme_kv_cmd_resv_report" 12
+Reservation Report
+.IP "nvme_kv_cmd_delete" 12
+Delete
+.IP "nvme_kv_cmd_resv_acquire" 12
+Reservation Acquire
+.IP "nvme_kv_cmd_exist" 12
+Exist
+.IP "nvme_kv_cmd_resv_release" 12
+Reservation Release
diff --git a/doc/man/nvme_lba_range_type.2 b/doc/man/nvme_lba_range_type.2
index a50b34f..e5ab06c 100644
--- a/doc/man/nvme_lba_range_type.2
+++ b/doc/man/nvme_lba_range_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_range_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_range_type" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_range_type \- LBA Range Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_range_type_entry.2 b/doc/man/nvme_lba_range_type_entry.2
index 586d88c..925cacd 100644
--- a/doc/man/nvme_lba_range_type_entry.2
+++ b/doc/man/nvme_lba_range_type_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_range_type_entry" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_range_type_entry" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_range_type_entry \- LBA Range Type - Data Structure Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_rd.2 b/doc/man/nvme_lba_rd.2
index 6adbcbc..4833bf3 100644
--- a/doc/man/nvme_lba_rd.2
+++ b/doc/man/nvme_lba_rd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_rd" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_rd" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_rd \- LBA Range Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status.2 b/doc/man/nvme_lba_status.2
index 7e3375b..a5cfecd 100644
--- a/doc/man/nvme_lba_status.2
+++ b/doc/man/nvme_lba_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_status" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_status \- LBA Status Descriptor List
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status_atype.2 b/doc/man/nvme_lba_status_atype.2
index 40139ba..ed55991 100644
--- a/doc/man/nvme_lba_status_atype.2
+++ b/doc/man/nvme_lba_status_atype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_lba_status_atype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_lba_status_atype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_lba_status_atype \- Action type the controller uses to return LBA status
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status_cmpc.2 b/doc/man/nvme_lba_status_cmpc.2
new file mode 100644
index 0000000..868a44e
--- /dev/null
+++ b/doc/man/nvme_lba_status_cmpc.2
@@ -0,0 +1,28 @@
+.TH "libnvme" 9 "enum nvme_lba_status_cmpc" "October 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_lba_status_cmpc \- Get LBA Status Command Completion Condition
+.SH SYNOPSIS
+enum nvme_lba_status_cmpc {
+.br
+.BI " NVME_LBA_STATUS_CMPC_NO_CMPC"
+,
+.br
+.br
+.BI " NVME_LBA_STATUS_CMPC_INCOMPLETE"
+,
+.br
+.br
+.BI " NVME_LBA_STATUS_CMPC_COMPLETE"
+
+};
+.SH Constants
+.IP "NVME_LBA_STATUS_CMPC_NO_CMPC" 12
+No indication of the completion condition
+.IP "NVME_LBA_STATUS_CMPC_INCOMPLETE" 12
+Command completed, but additional LBA Status
+Descriptor Entries are available to transfer
+or scan did not complete (if ATYPE = 10h)
+.IP "NVME_LBA_STATUS_CMPC_COMPLETE" 12
+Completed the specified action over the number
+of LBAs specified in the Range Length field and
+transferred all available LBA Status Descriptors
diff --git a/doc/man/nvme_lba_status_desc.2 b/doc/man/nvme_lba_status_desc.2
index a8adec0..0afbbaf 100644
--- a/doc/man/nvme_lba_status_desc.2
+++ b/doc/man/nvme_lba_status_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_status_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_status_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_status_desc \- LBA Status Descriptor Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status_log.2 b/doc/man/nvme_lba_status_log.2
index 50ac600..82ba440 100644
--- a/doc/man/nvme_lba_status_log.2
+++ b/doc/man/nvme_lba_status_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_status_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_status_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_status_log \- LBA Status Information Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbaf.2 b/doc/man/nvme_lbaf.2
index b232c08..34e9e16 100644
--- a/doc/man/nvme_lbaf.2
+++ b/doc/man/nvme_lbaf.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lbaf" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lbaf" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lbaf \- LBA Format Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbaf_rp.2 b/doc/man/nvme_lbaf_rp.2
index d720610..83c6e4e 100644
--- a/doc/man/nvme_lbaf_rp.2
+++ b/doc/man/nvme_lbaf_rp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_lbaf_rp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_lbaf_rp" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_lbaf_rp \- This field indicates the relative performance of the LBA format indicated relative to other LBA formats supported by the controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbart.2 b/doc/man/nvme_lbart.2
index 20f3f56..d9db7ab 100644
--- a/doc/man/nvme_lbart.2
+++ b/doc/man/nvme_lbart.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_lbart" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_lbart" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_lbart \- LBA Range Type - Data Structure Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbas_ns_element.2 b/doc/man/nvme_lbas_ns_element.2
index a94f8cf..4e929b7 100644
--- a/doc/man/nvme_lbas_ns_element.2
+++ b/doc/man/nvme_lbas_ns_element.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lbas_ns_element" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lbas_ns_element" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_lbas_ns_element \- LBA Status Log Namespace Element
.SH SYNOPSIS
diff --git a/doc/man/nvme_lockdown.2 b/doc/man/nvme_lockdown.2
index d600d99..457bfa1 100644
--- a/doc/man/nvme_lockdown.2
+++ b/doc/man/nvme_lockdown.2
@@ -1,4 +1,4 @@
-.TH "nvme_lockdown" 9 "nvme_lockdown" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_lockdown" 9 "nvme_lockdown" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lockdown \- Issue lockdown command
.SH SYNOPSIS
diff --git a/doc/man/nvme_lockdown_log.2 b/doc/man/nvme_lockdown_log.2
new file mode 100644
index 0000000..6867a82
--- /dev/null
+++ b/doc/man/nvme_lockdown_log.2
@@ -0,0 +1,27 @@
+.TH "libnvme" 9 "struct nvme_lockdown_log" "October 2024" "API Manual" LINUX
+.SH NAME
+struct nvme_lockdown_log \- Command and Feature Lockdown Log
+.SH SYNOPSIS
+struct nvme_lockdown_log {
+.br
+.BI " __u8 cfila;"
+.br
+.BI " __u8 rsvd1[2];"
+.br
+.BI " __u8 lngth;"
+.br
+.BI " __u8 cfil[508];"
+.br
+.BI "
+};
+.br
+
+.SH Members
+.IP "cfila" 12
+Contents of the Command and Feature Identifier List field in the log page.
+.IP "rsvd1" 12
+Reserved
+.IP "lngth" 12
+Length of Command and Feature Identifier List field
+.IP "cfil" 12
+Command and Feature Identifier List
diff --git a/doc/man/nvme_lockdown_log_contents.2 b/doc/man/nvme_lockdown_log_contents.2
new file mode 100644
index 0000000..db6f5da
--- /dev/null
+++ b/doc/man/nvme_lockdown_log_contents.2
@@ -0,0 +1,24 @@
+.TH "libnvme" 9 "enum nvme_lockdown_log_contents" "October 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_lockdown_log_contents \- lockdown log page content attributes
+.SH SYNOPSIS
+enum nvme_lockdown_log_contents {
+.br
+.BI " NVME_LOCKDOWN_SUPPORTED_CMD"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_PROHIBITED_CMD"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_PROHIBITED_OUTOFBAND_CMD"
+
+};
+.SH Constants
+.IP "NVME_LOCKDOWN_SUPPORTED_CMD" 12
+Content value for Supported commands
+.IP "NVME_LOCKDOWN_PROHIBITED_CMD" 12
+Content value for prohibited commands
+.IP "NVME_LOCKDOWN_PROHIBITED_OUTOFBAND_CMD" 12
+Content value for prohibited side band commands
diff --git a/doc/man/nvme_lockdown_log_scope.2 b/doc/man/nvme_lockdown_log_scope.2
new file mode 100644
index 0000000..1ffeaed
--- /dev/null
+++ b/doc/man/nvme_lockdown_log_scope.2
@@ -0,0 +1,30 @@
+.TH "libnvme" 9 "enum nvme_lockdown_log_scope" "October 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_lockdown_log_scope \- lockdown log page scope attributes
+.SH SYNOPSIS
+enum nvme_lockdown_log_scope {
+.br
+.BI " NVME_LOCKDOWN_ADMIN_CMD"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_FEATURE_ID"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_MI_CMD_SET"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_PCI_CMD_SET"
+
+};
+.SH Constants
+.IP "NVME_LOCKDOWN_ADMIN_CMD" 12
+Scope value for Admin commandS
+.IP "NVME_LOCKDOWN_FEATURE_ID" 12
+Scope value for Feature ID
+.IP "NVME_LOCKDOWN_MI_CMD_SET" 12
+Scope value for Management Interface commands
+.IP "NVME_LOCKDOWN_PCI_CMD_SET" 12
+Scope value for PCI commands
diff --git a/doc/man/nvme_lockdown_scope_contents.2 b/doc/man/nvme_lockdown_scope_contents.2
new file mode 100644
index 0000000..c6a32e4
--- /dev/null
+++ b/doc/man/nvme_lockdown_scope_contents.2
@@ -0,0 +1,30 @@
+.TH "libnvme" 9 "enum nvme_lockdown_scope_contents" "October 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_lockdown_scope_contents \- Lockdown Log shift and mask
+.SH SYNOPSIS
+enum nvme_lockdown_scope_contents {
+.br
+.BI " NVME_LOCKDOWN_SS_SHIFT"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_SS_MASK"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_CS_SHIFT"
+,
+.br
+.br
+.BI " NVME_LOCKDOWN_CS_MASK"
+
+};
+.SH Constants
+.IP "NVME_LOCKDOWN_SS_SHIFT" 12
+Lockdown log scope select Shift
+.IP "NVME_LOCKDOWN_SS_MASK" 12
+Lockdown log scope select Mask
+.IP "NVME_LOCKDOWN_CS_SHIFT" 12
+Lockdown log contents Shift
+.IP "NVME_LOCKDOWN_CS_MASK" 12
+Lockdown log contents Mask
diff --git a/doc/man/nvme_log_ana_lsp.2 b/doc/man/nvme_log_ana_lsp.2
index 5f53e86..b1eea78 100644
--- a/doc/man/nvme_log_ana_lsp.2
+++ b/doc/man/nvme_log_ana_lsp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_log_ana_lsp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_log_ana_lsp" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_log_ana_lsp \- Asymmetric Namespace Access - Return Groups Only
.SH SYNOPSIS
diff --git a/doc/man/nvme_log_phy_rx_eom_action.2 b/doc/man/nvme_log_phy_rx_eom_action.2
index 61515c0..85fc087 100644
--- a/doc/man/nvme_log_phy_rx_eom_action.2
+++ b/doc/man/nvme_log_phy_rx_eom_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_action" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_action" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_log_phy_rx_eom_action \- Physical Interface Receiver Eye Opening Measurement Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_log_phy_rx_eom_quality.2 b/doc/man/nvme_log_phy_rx_eom_quality.2
index ab05c9a..adc8604 100644
--- a/doc/man/nvme_log_phy_rx_eom_quality.2
+++ b/doc/man/nvme_log_phy_rx_eom_quality.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_quality" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_quality" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_log_phy_rx_eom_quality \- Physical Interface Receiver Eye Opening Measurement Quality
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_ctrl.2 b/doc/man/nvme_lookup_ctrl.2
index d513766..5211147 100644
--- a/doc/man/nvme_lookup_ctrl.2
+++ b/doc/man/nvme_lookup_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_ctrl" 9 "nvme_lookup_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_ctrl" 9 "nvme_lookup_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_ctrl \- Lookup nvme_ctrl_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_host.2 b/doc/man/nvme_lookup_host.2
index 3497cac..57d4b37 100644
--- a/doc/man/nvme_lookup_host.2
+++ b/doc/man/nvme_lookup_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_host" 9 "nvme_lookup_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_host" 9 "nvme_lookup_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_host \- Lookup nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_key.2 b/doc/man/nvme_lookup_key.2
index a44f49a..a7b8aee 100644
--- a/doc/man/nvme_lookup_key.2
+++ b/doc/man/nvme_lookup_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_key" 9 "nvme_lookup_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_key" 9 "nvme_lookup_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_key \- Lookup key serial number
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_keyring.2 b/doc/man/nvme_lookup_keyring.2
index 1a366f9..f0cc41e 100644
--- a/doc/man/nvme_lookup_keyring.2
+++ b/doc/man/nvme_lookup_keyring.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_keyring" 9 "nvme_lookup_keyring" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_keyring" 9 "nvme_lookup_keyring" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_keyring \- Lookup keyring serial number
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_subsystem.2 b/doc/man/nvme_lookup_subsystem.2
index 9562066..c397efe 100644
--- a/doc/man/nvme_lookup_subsystem.2
+++ b/doc/man/nvme_lookup_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_subsystem" 9 "nvme_lookup_subsystem" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_subsystem" 9 "nvme_lookup_subsystem" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_subsystem \- Lookup nvme_subsystem_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_media_unit_config_desc.2 b/doc/man/nvme_media_unit_config_desc.2
index 8acebb6..7999d91 100644
--- a/doc/man/nvme_media_unit_config_desc.2
+++ b/doc/man/nvme_media_unit_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_media_unit_config_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_media_unit_config_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_media_unit_config_desc \- Media Unit Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_media_unit_stat_desc.2 b/doc/man/nvme_media_unit_stat_desc.2
index da635b9..ea6372b 100644
--- a/doc/man/nvme_media_unit_stat_desc.2
+++ b/doc/man/nvme_media_unit_stat_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_media_unit_stat_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_media_unit_stat_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_media_unit_stat_desc \- Media Unit Status Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_media_unit_stat_log.2 b/doc/man/nvme_media_unit_stat_log.2
index 6fc8d48..08b023e 100644
--- a/doc/man/nvme_media_unit_stat_log.2
+++ b/doc/man/nvme_media_unit_stat_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_media_unit_stat_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_media_unit_stat_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_media_unit_stat_log \- Media Unit Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_metadata_element_desc.2 b/doc/man/nvme_metadata_element_desc.2
index b72bf0f..7b9898c 100644
--- a/doc/man/nvme_metadata_element_desc.2
+++ b/doc/man/nvme_metadata_element_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_metadata_element_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_metadata_element_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_metadata_element_desc \- Metadata Element Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_admin_passthru.2 b/doc/man/nvme_mi_admin_admin_passthru.2
index 8fb6ee6..0d62076 100644
--- a/doc/man/nvme_mi_admin_admin_passthru.2
+++ b/doc/man/nvme_mi_admin_admin_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_admin_passthru" 9 "nvme_mi_admin_admin_passthru" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_admin_passthru" 9 "nvme_mi_admin_admin_passthru" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_admin_passthru \- Submit an nvme admin passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_format_nvm.2 b/doc/man/nvme_mi_admin_format_nvm.2
index 3a5507a..ee6a301 100644
--- a/doc/man/nvme_mi_admin_format_nvm.2
+++ b/doc/man/nvme_mi_admin_format_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_format_nvm" 9 "nvme_mi_admin_format_nvm" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_format_nvm" 9 "nvme_mi_admin_format_nvm" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_format_nvm \- Format NVMe namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_fw_commit.2 b/doc/man/nvme_mi_admin_fw_commit.2
index db077b0..d4e44a8 100644
--- a/doc/man/nvme_mi_admin_fw_commit.2
+++ b/doc/man/nvme_mi_admin_fw_commit.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_fw_commit" 9 "nvme_mi_admin_fw_commit" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_fw_commit" 9 "nvme_mi_admin_fw_commit" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_fw_commit \- Commit firmware using the specified action
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_fw_download.2 b/doc/man/nvme_mi_admin_fw_download.2
index d44ed41..3094917 100644
--- a/doc/man/nvme_mi_admin_fw_download.2
+++ b/doc/man/nvme_mi_admin_fw_download.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_fw_download" 9 "nvme_mi_admin_fw_download" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_fw_download" 9 "nvme_mi_admin_fw_download" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_fw_download \- Download part or all of a firmware image to the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_ana_log_atomic.2 b/doc/man/nvme_mi_admin_get_ana_log_atomic.2
index 6664761..ff54595 100644
--- a/doc/man/nvme_mi_admin_get_ana_log_atomic.2
+++ b/doc/man/nvme_mi_admin_get_ana_log_atomic.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_ana_log_atomic" 9 "nvme_mi_admin_get_ana_log_atomic" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_ana_log_atomic" 9 "nvme_mi_admin_get_ana_log_atomic" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_ana_log_atomic \- Retrieve Asymmetric Namespace Access log page atomically
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_features_data.2 b/doc/man/nvme_mi_admin_get_features_data.2
index 341e2eb..a7a239e 100644
--- a/doc/man/nvme_mi_admin_get_features_data.2
+++ b/doc/man/nvme_mi_admin_get_features_data.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_features_data" 9 "nvme_mi_admin_get_features_data" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_features_data" 9 "nvme_mi_admin_get_features_data" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_features_data \- Helper function for &nvme_mi_admin_get_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log.2 b/doc/man/nvme_mi_admin_get_log.2
index d88dc6b..85b1201 100644
--- a/doc/man/nvme_mi_admin_get_log.2
+++ b/doc/man/nvme_mi_admin_get_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log" 9 "nvme_mi_admin_get_log" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log" 9 "nvme_mi_admin_get_log" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log \- Retrieve log page data from controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_ana.2 b/doc/man/nvme_mi_admin_get_log_ana.2
index 29e27ab..42fa277 100644
--- a/doc/man/nvme_mi_admin_get_log_ana.2
+++ b/doc/man/nvme_mi_admin_get_log_ana.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_ana" 9 "nvme_mi_admin_get_log_ana" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_ana" 9 "nvme_mi_admin_get_log_ana" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_ana \- Retrieve Asymmetric Namespace Access log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_ana_groups.2 b/doc/man/nvme_mi_admin_get_log_ana_groups.2
index 98190d9..ee97218 100644
--- a/doc/man/nvme_mi_admin_get_log_ana_groups.2
+++ b/doc/man/nvme_mi_admin_get_log_ana_groups.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_ana_groups" 9 "nvme_mi_admin_get_log_ana_groups" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_ana_groups" 9 "nvme_mi_admin_get_log_ana_groups" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_ana_groups \- Retrieve Asymmetric Namespace Access groups only log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_boot_partition.2 b/doc/man/nvme_mi_admin_get_log_boot_partition.2
index 14824ef..68a6bda 100644
--- a/doc/man/nvme_mi_admin_get_log_boot_partition.2
+++ b/doc/man/nvme_mi_admin_get_log_boot_partition.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_boot_partition" 9 "nvme_mi_admin_get_log_boot_partition" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_boot_partition" 9 "nvme_mi_admin_get_log_boot_partition" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_boot_partition \- Retrieve Boot Partition
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_changed_ns_list.2 b/doc/man/nvme_mi_admin_get_log_changed_ns_list.2
index 6633c1b..7bf83f7 100644
--- a/doc/man/nvme_mi_admin_get_log_changed_ns_list.2
+++ b/doc/man/nvme_mi_admin_get_log_changed_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_changed_ns_list" 9 "nvme_mi_admin_get_log_changed_ns_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_changed_ns_list" 9 "nvme_mi_admin_get_log_changed_ns_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_changed_ns_list \- Retrieve namespace changed list
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_cmd_effects.2 b/doc/man/nvme_mi_admin_get_log_cmd_effects.2
index 8bffa02..a957669 100644
--- a/doc/man/nvme_mi_admin_get_log_cmd_effects.2
+++ b/doc/man/nvme_mi_admin_get_log_cmd_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_cmd_effects" 9 "nvme_mi_admin_get_log_cmd_effects" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_cmd_effects" 9 "nvme_mi_admin_get_log_cmd_effects" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_cmd_effects \- Retrieve nvme command effects log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2 b/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2
index 72148bd..eced0e6 100644
--- a/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2
+++ b/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_create_telemetry_host" 9 "nvme_mi_admin_get_log_create_telemetry_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_create_telemetry_host" 9 "nvme_mi_admin_get_log_create_telemetry_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_create_telemetry_host \- Create host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_device_self_test.2 b/doc/man/nvme_mi_admin_get_log_device_self_test.2
index 678bebb..259fc02 100644
--- a/doc/man/nvme_mi_admin_get_log_device_self_test.2
+++ b/doc/man/nvme_mi_admin_get_log_device_self_test.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_device_self_test" 9 "nvme_mi_admin_get_log_device_self_test" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_device_self_test" 9 "nvme_mi_admin_get_log_device_self_test" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_device_self_test \- Retrieve the device self test log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_discovery.2 b/doc/man/nvme_mi_admin_get_log_discovery.2
index 1ffa184..a63272a 100644
--- a/doc/man/nvme_mi_admin_get_log_discovery.2
+++ b/doc/man/nvme_mi_admin_get_log_discovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_discovery" 9 "nvme_mi_admin_get_log_discovery" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_discovery" 9 "nvme_mi_admin_get_log_discovery" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_discovery \- Retrieve Discovery log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_endurance_group.2 b/doc/man/nvme_mi_admin_get_log_endurance_group.2
index 30b4bba..30a38a1 100644
--- a/doc/man/nvme_mi_admin_get_log_endurance_group.2
+++ b/doc/man/nvme_mi_admin_get_log_endurance_group.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_endurance_group" 9 "nvme_mi_admin_get_log_endurance_group" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_endurance_group" 9 "nvme_mi_admin_get_log_endurance_group" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_endurance_group \- Get Endurance Group log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2 b/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2
index 4db995b..8e9ebef 100644
--- a/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2
+++ b/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_endurance_grp_evt" 9 "nvme_mi_admin_get_log_endurance_grp_evt" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_endurance_grp_evt" 9 "nvme_mi_admin_get_log_endurance_grp_evt" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_endurance_grp_evt \- Retrieve Rotational Media Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_error.2 b/doc/man/nvme_mi_admin_get_log_error.2
index 0368743..8fcd9f1 100644
--- a/doc/man/nvme_mi_admin_get_log_error.2
+++ b/doc/man/nvme_mi_admin_get_log_error.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_error" 9 "nvme_mi_admin_get_log_error" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_error" 9 "nvme_mi_admin_get_log_error" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_error \- Retrieve nvme error log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2 b/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2
index 1ad2ff7..17b2184 100644
--- a/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2
+++ b/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_fid_supported_effects" 9 "nvme_mi_admin_get_log_fid_supported_effects" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_fid_supported_effects" 9 "nvme_mi_admin_get_log_fid_supported_effects" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_fid_supported_effects \- Retrieve Feature Identifiers Supported and Effects
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_fw_slot.2 b/doc/man/nvme_mi_admin_get_log_fw_slot.2
index da73aaa..a3f444c 100644
--- a/doc/man/nvme_mi_admin_get_log_fw_slot.2
+++ b/doc/man/nvme_mi_admin_get_log_fw_slot.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_fw_slot" 9 "nvme_mi_admin_get_log_fw_slot" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_fw_slot" 9 "nvme_mi_admin_get_log_fw_slot" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_fw_slot \- Retrieves the controller firmware log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_lba_status.2 b/doc/man/nvme_mi_admin_get_log_lba_status.2
index 3bd127c..72384fa 100644
--- a/doc/man/nvme_mi_admin_get_log_lba_status.2
+++ b/doc/man/nvme_mi_admin_get_log_lba_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_lba_status" 9 "nvme_mi_admin_get_log_lba_status" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_lba_status" 9 "nvme_mi_admin_get_log_lba_status" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_lba_status \- Retrieve LBA Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_lockdown.2 b/doc/man/nvme_mi_admin_get_log_lockdown.2
new file mode 100644
index 0000000..0befbeb
--- /dev/null
+++ b/doc/man/nvme_mi_admin_get_log_lockdown.2
@@ -0,0 +1,18 @@
+.TH "nvme_mi_admin_get_log_lockdown" 9 "nvme_mi_admin_get_log_lockdown" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_mi_admin_get_log_lockdown \- Retrieve lockdown Log
+.SH SYNOPSIS
+.B "int" nvme_mi_admin_get_log_lockdown
+.BI "(nvme_mi_ctrl_t ctrl " ","
+.BI "__u8 cnscp " ","
+.BI "struct nvme_lockdown_log *lockdown_log " ");"
+.SH ARGUMENTS
+.IP "ctrl" 12
+Controller to query
+.IP "cnscp" 12
+Contents and Scope of Command and Feature Identifier Lists
+.IP "lockdown_log" 12
+Buffer to store the lockdown log
+.SH "RETURN"
+The nvme command status if a response was received (see
+\fIenum nvme_status_field\fP) or -1 with errno set otherwise.
diff --git a/doc/man/nvme_mi_admin_get_log_media_unit_stat.2 b/doc/man/nvme_mi_admin_get_log_media_unit_stat.2
index 352c47d..12b990a 100644
--- a/doc/man/nvme_mi_admin_get_log_media_unit_stat.2
+++ b/doc/man/nvme_mi_admin_get_log_media_unit_stat.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_media_unit_stat" 9 "nvme_mi_admin_get_log_media_unit_stat" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_media_unit_stat" 9 "nvme_mi_admin_get_log_media_unit_stat" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_media_unit_stat \- Retrieve Media Unit Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2 b/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2
index a07d0dc..333e3c6 100644
--- a/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2
+++ b/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_mi_cmd_supported_effects" 9 "nvme_mi_admin_get_log_mi_cmd_supported_effects" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_mi_cmd_supported_effects" 9 "nvme_mi_admin_get_log_mi_cmd_supported_effects" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_mi_cmd_supported_effects \- displays the MI Commands Supported by the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_page.2 b/doc/man/nvme_mi_admin_get_log_page.2
index 9717bc1..20daeed 100644
--- a/doc/man/nvme_mi_admin_get_log_page.2
+++ b/doc/man/nvme_mi_admin_get_log_page.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_page" 9 "nvme_mi_admin_get_log_page" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_page" 9 "nvme_mi_admin_get_log_page" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_page \- Retrieve log page data from controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_persistent_event.2 b/doc/man/nvme_mi_admin_get_log_persistent_event.2
index f5bf8c5..3d4fc36 100644
--- a/doc/man/nvme_mi_admin_get_log_persistent_event.2
+++ b/doc/man/nvme_mi_admin_get_log_persistent_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_persistent_event" 9 "nvme_mi_admin_get_log_persistent_event" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_persistent_event" 9 "nvme_mi_admin_get_log_persistent_event" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_persistent_event \- Retrieve Persistent Event Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2 b/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2
index 548688a..eff4b01 100644
--- a/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2
+++ b/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_phy_rx_eom" 9 "nvme_mi_admin_get_log_phy_rx_eom" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_phy_rx_eom" 9 "nvme_mi_admin_get_log_phy_rx_eom" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_phy_rx_eom \- Retrieve Physical Interface Receiver Eye Opening Measurement Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2 b/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2
index 80ed6d2..1c4ff71 100644
--- a/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2
+++ b/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_predictable_lat_event" 9 "nvme_mi_admin_get_log_predictable_lat_event" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_predictable_lat_event" 9 "nvme_mi_admin_get_log_predictable_lat_event" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_predictable_lat_event \- Retrieve Predictable Latency Event Aggregate Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2 b/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2
index 0032d5f..4d7eb7d 100644
--- a/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2
+++ b/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_predictable_lat_nvmset" 9 "nvme_mi_admin_get_log_predictable_lat_nvmset" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_predictable_lat_nvmset" 9 "nvme_mi_admin_get_log_predictable_lat_nvmset" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_predictable_lat_nvmset \- Predictable Latency Per NVM Set
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_reservation.2 b/doc/man/nvme_mi_admin_get_log_reservation.2
index 2fa9e3c..383f5b2 100644
--- a/doc/man/nvme_mi_admin_get_log_reservation.2
+++ b/doc/man/nvme_mi_admin_get_log_reservation.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_reservation" 9 "nvme_mi_admin_get_log_reservation" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_reservation" 9 "nvme_mi_admin_get_log_reservation" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_reservation \- Retrieve Reservation Notification
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_sanitize.2 b/doc/man/nvme_mi_admin_get_log_sanitize.2
index 4656ff3..61a605f 100644
--- a/doc/man/nvme_mi_admin_get_log_sanitize.2
+++ b/doc/man/nvme_mi_admin_get_log_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_sanitize" 9 "nvme_mi_admin_get_log_sanitize" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_sanitize" 9 "nvme_mi_admin_get_log_sanitize" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_sanitize \- Retrieve Sanitize Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_simple.2 b/doc/man/nvme_mi_admin_get_log_simple.2
index cf40f85..3b736c7 100644
--- a/doc/man/nvme_mi_admin_get_log_simple.2
+++ b/doc/man/nvme_mi_admin_get_log_simple.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_simple" 9 "nvme_mi_admin_get_log_simple" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_simple" 9 "nvme_mi_admin_get_log_simple" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_simple \- Helper for Get Log Page functions with no NSID or RAE requirements
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_smart.2 b/doc/man/nvme_mi_admin_get_log_smart.2
index f5cad36..05083bc 100644
--- a/doc/man/nvme_mi_admin_get_log_smart.2
+++ b/doc/man/nvme_mi_admin_get_log_smart.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_smart" 9 "nvme_mi_admin_get_log_smart" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_smart" 9 "nvme_mi_admin_get_log_smart" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_smart \- Retrieve nvme smart log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2 b/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2
index a32b34f..48e8a2e 100644
--- a/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2
+++ b/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_support_cap_config_list" 9 "nvme_mi_admin_get_log_support_cap_config_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_support_cap_config_list" 9 "nvme_mi_admin_get_log_support_cap_config_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_support_cap_config_list \- Retrieve Supported Capacity Configuration List
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_supported_log_pages.2 b/doc/man/nvme_mi_admin_get_log_supported_log_pages.2
index d97b695..0134f38 100644
--- a/doc/man/nvme_mi_admin_get_log_supported_log_pages.2
+++ b/doc/man/nvme_mi_admin_get_log_supported_log_pages.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_supported_log_pages" 9 "nvme_mi_admin_get_log_supported_log_pages" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_supported_log_pages" 9 "nvme_mi_admin_get_log_supported_log_pages" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_supported_log_pages \- Retrieve nmve supported log pages
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2 b/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2
index 4e91b24..b8f534a 100644
--- a/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2
+++ b/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_telemetry_ctrl" 9 "nvme_mi_admin_get_log_telemetry_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_telemetry_ctrl" 9 "nvme_mi_admin_get_log_telemetry_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_telemetry_ctrl \- Get Telemetry Controller-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_telemetry_host.2 b/doc/man/nvme_mi_admin_get_log_telemetry_host.2
index 52f672b..b0bf90f 100644
--- a/doc/man/nvme_mi_admin_get_log_telemetry_host.2
+++ b/doc/man/nvme_mi_admin_get_log_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_telemetry_host" 9 "nvme_mi_admin_get_log_telemetry_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_telemetry_host" 9 "nvme_mi_admin_get_log_telemetry_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_telemetry_host \- Get Telemetry Host-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2 b/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2
index 8e2a607..99eff0d 100644
--- a/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2
+++ b/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_zns_changed_zones" 9 "nvme_mi_admin_get_log_zns_changed_zones" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_zns_changed_zones" 9 "nvme_mi_admin_get_log_zns_changed_zones" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_zns_changed_zones \- Retrieve list of zones that have changed
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_nsid_log.2 b/doc/man/nvme_mi_admin_get_nsid_log.2
index e7a4e92..021d9ed 100644
--- a/doc/man/nvme_mi_admin_get_nsid_log.2
+++ b/doc/man/nvme_mi_admin_get_nsid_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_nsid_log" 9 "nvme_mi_admin_get_nsid_log" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_nsid_log" 9 "nvme_mi_admin_get_nsid_log" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_nsid_log \- Helper for Get Log Page functions
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify.2 b/doc/man/nvme_mi_admin_identify.2
index 7b6c6f8..3a8103e 100644
--- a/doc/man/nvme_mi_admin_identify.2
+++ b/doc/man/nvme_mi_admin_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify" 9 "nvme_mi_admin_identify" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify" 9 "nvme_mi_admin_identify" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify \- Perform an Admin identify command.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_active_ns_list.2 b/doc/man/nvme_mi_admin_identify_active_ns_list.2
index 6c5281e..12c3840 100644
--- a/doc/man/nvme_mi_admin_identify_active_ns_list.2
+++ b/doc/man/nvme_mi_admin_identify_active_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_active_ns_list" 9 "nvme_mi_admin_identify_active_ns_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_active_ns_list" 9 "nvme_mi_admin_identify_active_ns_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_active_ns_list \- Perform an Admin identify for an active namespace list
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_allocated_ns.2 b/doc/man/nvme_mi_admin_identify_allocated_ns.2
index 3a55e0d..9ebef1e 100644
--- a/doc/man/nvme_mi_admin_identify_allocated_ns.2
+++ b/doc/man/nvme_mi_admin_identify_allocated_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_allocated_ns" 9 "nvme_mi_admin_identify_allocated_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_allocated_ns" 9 "nvme_mi_admin_identify_allocated_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_allocated_ns \- Perform an Admin identify command for an allocated namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_allocated_ns_list.2 b/doc/man/nvme_mi_admin_identify_allocated_ns_list.2
index fa01298..37587aa 100644
--- a/doc/man/nvme_mi_admin_identify_allocated_ns_list.2
+++ b/doc/man/nvme_mi_admin_identify_allocated_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_allocated_ns_list" 9 "nvme_mi_admin_identify_allocated_ns_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_allocated_ns_list" 9 "nvme_mi_admin_identify_allocated_ns_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_allocated_ns_list \- Perform an Admin identify for an allocated namespace list
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_cns_nsid.2 b/doc/man/nvme_mi_admin_identify_cns_nsid.2
index 123977f..7ec56e6 100644
--- a/doc/man/nvme_mi_admin_identify_cns_nsid.2
+++ b/doc/man/nvme_mi_admin_identify_cns_nsid.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_cns_nsid" 9 "nvme_mi_admin_identify_cns_nsid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_cns_nsid" 9 "nvme_mi_admin_identify_cns_nsid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_cns_nsid \- Perform an Admin identify command using specific CNS/NSID parameters.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ctrl.2 b/doc/man/nvme_mi_admin_identify_ctrl.2
index dfe7ea8..5417cf9 100644
--- a/doc/man/nvme_mi_admin_identify_ctrl.2
+++ b/doc/man/nvme_mi_admin_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ctrl" 9 "nvme_mi_admin_identify_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ctrl" 9 "nvme_mi_admin_identify_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ctrl \- Perform an Admin identify for a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ctrl_list.2 b/doc/man/nvme_mi_admin_identify_ctrl_list.2
index 5a0a452..7ffe644 100644
--- a/doc/man/nvme_mi_admin_identify_ctrl_list.2
+++ b/doc/man/nvme_mi_admin_identify_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ctrl_list" 9 "nvme_mi_admin_identify_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ctrl_list" 9 "nvme_mi_admin_identify_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ctrl_list \- Perform an Admin identify for a controller list.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ns.2 b/doc/man/nvme_mi_admin_identify_ns.2
index 119a98c..1e99262 100644
--- a/doc/man/nvme_mi_admin_identify_ns.2
+++ b/doc/man/nvme_mi_admin_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ns" 9 "nvme_mi_admin_identify_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ns" 9 "nvme_mi_admin_identify_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ns \- Perform an Admin identify command for a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ns_descs.2 b/doc/man/nvme_mi_admin_identify_ns_descs.2
index 565e134..817c813 100644
--- a/doc/man/nvme_mi_admin_identify_ns_descs.2
+++ b/doc/man/nvme_mi_admin_identify_ns_descs.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ns_descs" 9 "nvme_mi_admin_identify_ns_descs" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ns_descs" 9 "nvme_mi_admin_identify_ns_descs" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ns_descs \- Perform an Admin identify Namespace Identification Descriptor list command for a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2 b/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2
index c56ee7c..321d0a4 100644
--- a/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2
+++ b/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_nsid_ctrl_list" 9 "nvme_mi_admin_identify_nsid_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_nsid_ctrl_list" 9 "nvme_mi_admin_identify_nsid_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_nsid_ctrl_list \- Perform an Admin identify for a controller list with specific namespace ID
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_partial.2 b/doc/man/nvme_mi_admin_identify_partial.2
index 179b9cb..4f99d39 100644
--- a/doc/man/nvme_mi_admin_identify_partial.2
+++ b/doc/man/nvme_mi_admin_identify_partial.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_partial" 9 "nvme_mi_admin_identify_partial" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_partial" 9 "nvme_mi_admin_identify_partial" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_partial \- Perform an Admin identify command, and retrieve partial response data.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_primary_ctrl.2 b/doc/man/nvme_mi_admin_identify_primary_ctrl.2
index f27fc7c..ce22bba 100644
--- a/doc/man/nvme_mi_admin_identify_primary_ctrl.2
+++ b/doc/man/nvme_mi_admin_identify_primary_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_primary_ctrl" 9 "nvme_mi_admin_identify_primary_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_primary_ctrl" 9 "nvme_mi_admin_identify_primary_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_primary_ctrl \- Perform an Admin identify for primary controller capabilities data structure.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2 b/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2
index 1f6c8ad..d12e078 100644
--- a/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2
+++ b/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_secondary_ctrl_list" 9 "nvme_mi_admin_identify_secondary_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_secondary_ctrl_list" 9 "nvme_mi_admin_identify_secondary_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_secondary_ctrl_list \- Perform an Admin identify for a secondary controller list.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_ns_attach.2 b/doc/man/nvme_mi_admin_ns_attach.2
index 2e5aedc..499b34a 100644
--- a/doc/man/nvme_mi_admin_ns_attach.2
+++ b/doc/man/nvme_mi_admin_ns_attach.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_ns_attach" 9 "nvme_mi_admin_ns_attach" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_ns_attach" 9 "nvme_mi_admin_ns_attach" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_ns_attach \- Attach or detach namespace to controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_ns_attach_ctrls.2 b/doc/man/nvme_mi_admin_ns_attach_ctrls.2
index be89dba..1c2ab57 100644
--- a/doc/man/nvme_mi_admin_ns_attach_ctrls.2
+++ b/doc/man/nvme_mi_admin_ns_attach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_ns_attach_ctrls" 9 "nvme_mi_admin_ns_attach_ctrls" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_ns_attach_ctrls" 9 "nvme_mi_admin_ns_attach_ctrls" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_ns_attach_ctrls \- Attach namespace to controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_ns_detach_ctrls.2 b/doc/man/nvme_mi_admin_ns_detach_ctrls.2
index 9e89e7f..3ac0b35 100644
--- a/doc/man/nvme_mi_admin_ns_detach_ctrls.2
+++ b/doc/man/nvme_mi_admin_ns_detach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_ns_detach_ctrls" 9 "nvme_mi_admin_ns_detach_ctrls" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_ns_detach_ctrls" 9 "nvme_mi_admin_ns_detach_ctrls" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_ns_detach_ctrls \- Detach namespace from controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_req_hdr.2 b/doc/man/nvme_mi_admin_req_hdr.2
index d19ed85..e6419df 100644
--- a/doc/man/nvme_mi_admin_req_hdr.2
+++ b/doc/man/nvme_mi_admin_req_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_admin_req_hdr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_admin_req_hdr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_admin_req_hdr \- Admin command request header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_resp_hdr.2 b/doc/man/nvme_mi_admin_resp_hdr.2
index 26c68a3..d7bf037 100644
--- a/doc/man/nvme_mi_admin_resp_hdr.2
+++ b/doc/man/nvme_mi_admin_resp_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_admin_resp_hdr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_admin_resp_hdr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_admin_resp_hdr \- Admin command response header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_sanitize_nvm.2 b/doc/man/nvme_mi_admin_sanitize_nvm.2
index cfe5441..5e6cfea 100644
--- a/doc/man/nvme_mi_admin_sanitize_nvm.2
+++ b/doc/man/nvme_mi_admin_sanitize_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_sanitize_nvm" 9 "nvme_mi_admin_sanitize_nvm" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_sanitize_nvm" 9 "nvme_mi_admin_sanitize_nvm" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_sanitize_nvm \- Start a subsystem Sanitize operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_security_recv.2 b/doc/man/nvme_mi_admin_security_recv.2
index 123f7d2..fd4360e 100644
--- a/doc/man/nvme_mi_admin_security_recv.2
+++ b/doc/man/nvme_mi_admin_security_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_security_recv" 9 "nvme_mi_admin_security_recv" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_security_recv" 9 "nvme_mi_admin_security_recv" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_security_recv \- Perform a Security Receive command on a controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_security_send.2 b/doc/man/nvme_mi_admin_security_send.2
index e6b9648..38e7b4b 100644
--- a/doc/man/nvme_mi_admin_security_send.2
+++ b/doc/man/nvme_mi_admin_security_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_security_send" 9 "nvme_mi_admin_security_send" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_security_send" 9 "nvme_mi_admin_security_send" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_security_send \- Perform a Security Send command on a controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_xfer.2 b/doc/man/nvme_mi_admin_xfer.2
index 3d0ca8a..e325816 100644
--- a/doc/man/nvme_mi_admin_xfer.2
+++ b/doc/man/nvme_mi_admin_xfer.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_xfer" 9 "nvme_mi_admin_xfer" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_xfer" 9 "nvme_mi_admin_xfer" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_xfer \- Raw admin transfer interface.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_ccs.2 b/doc/man/nvme_mi_ccs.2
index 4c72056..b729561 100644
--- a/doc/man/nvme_mi_ccs.2
+++ b/doc/man/nvme_mi_ccs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_ccs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_ccs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_ccs \- Get State Control Primitive Success Response Fields - Control Primitive Specific Response
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_close.2 b/doc/man/nvme_mi_close.2
index a938e49..adce3d1 100644
--- a/doc/man/nvme_mi_close.2
+++ b/doc/man/nvme_mi_close.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_close" 9 "nvme_mi_close" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_close" 9 "nvme_mi_close" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_close \- Close an endpoint connection and release resources, including controller objects.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_close_ctrl.2 b/doc/man/nvme_mi_close_ctrl.2
index 035bf46..962548f 100644
--- a/doc/man/nvme_mi_close_ctrl.2
+++ b/doc/man/nvme_mi_close_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_close_ctrl" 9 "nvme_mi_close_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_close_ctrl" 9 "nvme_mi_close_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_close_ctrl \- free a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_cmd_supported_effects.2 b/doc/man/nvme_mi_cmd_supported_effects.2
index 872329a..874e5fb 100644
--- a/doc/man/nvme_mi_cmd_supported_effects.2
+++ b/doc/man/nvme_mi_cmd_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_cmd_supported_effects" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_cmd_supported_effects" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_cmd_supported_effects \- MI Command Supported and Effects Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_cmd_supported_effects_log.2 b/doc/man/nvme_mi_cmd_supported_effects_log.2
index 9c751e2..bf034b2 100644
--- a/doc/man/nvme_mi_cmd_supported_effects_log.2
+++ b/doc/man/nvme_mi_cmd_supported_effects_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_cmd_supported_effects_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_cmd_supported_effects_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_cmd_supported_effects_log \- NVMe-MI Commands Supported and Effects Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_config_id.2 b/doc/man/nvme_mi_config_id.2
index fdfbd14..da83aef 100644
--- a/doc/man/nvme_mi_config_id.2
+++ b/doc/man/nvme_mi_config_id.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_config_id" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_config_id" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_config_id \- NVMe-MI Configuration identifier.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_config_smbus_freq.2 b/doc/man/nvme_mi_config_smbus_freq.2
index 841c53a..44f81f6 100644
--- a/doc/man/nvme_mi_config_smbus_freq.2
+++ b/doc/man/nvme_mi_config_smbus_freq.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_config_smbus_freq" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_config_smbus_freq" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_config_smbus_freq \- SMBus/I2C frequency values
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_control.2 b/doc/man/nvme_mi_control.2
new file mode 100644
index 0000000..1e0c524
--- /dev/null
+++ b/doc/man/nvme_mi_control.2
@@ -0,0 +1,25 @@
+.TH "nvme_mi_control" 9 "nvme_mi_control" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_mi_control \- Perform a Control Primitive command
+.SH SYNOPSIS
+.B "int" nvme_mi_control
+.BI "(nvme_mi_ep_t ep " ","
+.BI "__u8 opcode " ","
+.BI "__u16 cpsp " ","
+.BI "__u16 *result_cpsr " ");"
+.SH ARGUMENTS
+.IP "ep" 12
+endpoint for MI communication
+.IP "opcode" 12
+Control Primitive opcode (using \fIenum nvme_mi_control_opcode\fP)
+.IP "cpsp" 12
+Control Primitive Specific Parameter
+.IP "result_cpsr" 12
+Optional field to return the result from the CPSR field
+.SH "DESCRIPTION"
+Perform a Control Primitive command, using the opcode specified in \fIopcode\fP
+Stores the result from the CPSR field in \fIresult_cpsr\fP if set.
+
+See: \fIenum nvme_mi_control_opcode\fP
+.SH "RETURN"
+0 on success, non-zero on failure
diff --git a/doc/man/nvme_mi_control_opcode.2 b/doc/man/nvme_mi_control_opcode.2
new file mode 100644
index 0000000..a9b8736
--- /dev/null
+++ b/doc/man/nvme_mi_control_opcode.2
@@ -0,0 +1,36 @@
+.TH "libnvme" 9 "enum nvme_mi_control_opcode" "October 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_mi_control_opcode \- Operation code for Control Primitives.
+.SH SYNOPSIS
+enum nvme_mi_control_opcode {
+.br
+.BI " nvme_mi_control_opcode_pause"
+,
+.br
+.br
+.BI " nvme_mi_control_opcode_resume"
+,
+.br
+.br
+.BI " nvme_mi_control_opcode_abort"
+,
+.br
+.br
+.BI " nvme_mi_control_opcode_get_state"
+,
+.br
+.br
+.BI " nvme_mi_control_opcode_replay"
+
+};
+.SH Constants
+.IP "nvme_mi_control_opcode_pause" 12
+Suspend response transmission/timeout
+.IP "nvme_mi_control_opcode_resume" 12
+Resume from a paused condition
+.IP "nvme_mi_control_opcode_abort" 12
+Re-initialize a Command Slot to the Idle state
+.IP "nvme_mi_control_opcode_get_state" 12
+Get the state of a Command Slot
+.IP "nvme_mi_control_opcode_replay" 12
+Retransmit the Response Message
diff --git a/doc/man/nvme_mi_control_req.2 b/doc/man/nvme_mi_control_req.2
new file mode 100644
index 0000000..eb93dd2
--- /dev/null
+++ b/doc/man/nvme_mi_control_req.2
@@ -0,0 +1,27 @@
+.TH "libnvme" 9 "struct nvme_mi_control_req" "October 2024" "API Manual" LINUX
+.SH NAME
+struct nvme_mi_control_req \- The Control Primitive request.
+.SH SYNOPSIS
+struct nvme_mi_control_req {
+.br
+.BI " struct nvme_mi_msg_hdr hdr;"
+.br
+.BI " __u8 opcode;"
+.br
+.BI " __u8 tag;"
+.br
+.BI " __le16 cpsp;"
+.br
+.BI "
+};
+.br
+
+.SH Members
+.IP "hdr" 12
+Generic MI message header
+.IP "opcode" 12
+Control Primitive Opcodes (using \fIenum nvme_mi_control_opcode\fP)
+.IP "tag" 12
+flag - Opaque value passed from request to response
+.IP "cpsp" 12
+Control Primitive Specific Parameter
diff --git a/doc/man/nvme_mi_create_root.2 b/doc/man/nvme_mi_create_root.2
index 8c84276..5dc1665 100644
--- a/doc/man/nvme_mi_create_root.2
+++ b/doc/man/nvme_mi_create_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_create_root" 9 "nvme_mi_create_root" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_create_root" 9 "nvme_mi_create_root" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_create_root \- Create top-level MI (root) handle.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_csts.2 b/doc/man/nvme_mi_csts.2
index 6be72a5..b8771a9 100644
--- a/doc/man/nvme_mi_csts.2
+++ b/doc/man/nvme_mi_csts.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_csts" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_csts" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_csts \- Controller Health Data Structure (CHDS) - Controller Status (CSTS)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_ctrl_health_status.2 b/doc/man/nvme_mi_ctrl_health_status.2
index 90aca94..338b3b5 100644
--- a/doc/man/nvme_mi_ctrl_health_status.2
+++ b/doc/man/nvme_mi_ctrl_health_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_ctrl_health_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_ctrl_health_status" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_ctrl_health_status \- Controller Health Data Structure (CHDS)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_ctrl_id.2 b/doc/man/nvme_mi_ctrl_id.2
index a27ffa7..49f55f2 100644
--- a/doc/man/nvme_mi_ctrl_id.2
+++ b/doc/man/nvme_mi_ctrl_id.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_ctrl_id" 9 "nvme_mi_ctrl_id" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_ctrl_id" 9 "nvme_mi_ctrl_id" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_ctrl_id \- get the ID of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_cwarn.2 b/doc/man/nvme_mi_cwarn.2
index 3f525c0..36cdff8 100644
--- a/doc/man/nvme_mi_cwarn.2
+++ b/doc/man/nvme_mi_cwarn.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_cwarn" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_cwarn" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_cwarn \- Controller Health Data Structure (CHDS) - Critical Warning (CWARN)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_dtyp.2 b/doc/man/nvme_mi_dtyp.2
index 7aa06e6..e78fc94 100644
--- a/doc/man/nvme_mi_dtyp.2
+++ b/doc/man/nvme_mi_dtyp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_dtyp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_dtyp" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_dtyp \- Data Structure Type field.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_elem.2 b/doc/man/nvme_mi_elem.2
index db24d77..1428d72 100644
--- a/doc/man/nvme_mi_elem.2
+++ b/doc/man/nvme_mi_elem.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_elem" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_elem" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_elem \- Element Descriptor Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_free_root.2 b/doc/man/nvme_mi_free_root.2
index 06ff547..7b878b8 100644
--- a/doc/man/nvme_mi_free_root.2
+++ b/doc/man/nvme_mi_free_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_free_root" 9 "nvme_mi_free_root" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_free_root" 9 "nvme_mi_free_root" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_free_root \- Free root object.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_init_ctrl.2 b/doc/man/nvme_mi_init_ctrl.2
index 7381b8b..240c268 100644
--- a/doc/man/nvme_mi_init_ctrl.2
+++ b/doc/man/nvme_mi_init_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_init_ctrl" 9 "nvme_mi_init_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_init_ctrl" 9 "nvme_mi_init_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_init_ctrl \- initialise a NVMe controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_message_type.2 b/doc/man/nvme_mi_message_type.2
index e00b547..7f8cb6c 100644
--- a/doc/man/nvme_mi_message_type.2
+++ b/doc/man/nvme_mi_message_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_message_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_message_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_message_type \- NVMe-MI message type field.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_opcode.2 b/doc/man/nvme_mi_mi_opcode.2
index 42fccda..a5adf2b 100644
--- a/doc/man/nvme_mi_mi_opcode.2
+++ b/doc/man/nvme_mi_mi_opcode.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_mi_opcode" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_mi_opcode" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_mi_opcode \- Operation code for supported NVMe-MI commands.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_ctrl.2 b/doc/man/nvme_mi_mi_read_mi_data_ctrl.2
index 7886139..94364e6 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_ctrl.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_ctrl" 9 "nvme_mi_mi_read_mi_data_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_ctrl" 9 "nvme_mi_mi_read_mi_data_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_ctrl \- Perform a Read MI Data Structure command, retrieving controller information
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2 b/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2
index 68aa8c9..23d78eb 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_ctrl_list" 9 "nvme_mi_mi_read_mi_data_ctrl_list" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_ctrl_list" 9 "nvme_mi_mi_read_mi_data_ctrl_list" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_ctrl_list \- Perform a Read MI Data Structure command, retrieving the list of attached controllers.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_port.2 b/doc/man/nvme_mi_mi_read_mi_data_port.2
index 961f99a..621924e 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_port.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_port.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_port" 9 "nvme_mi_mi_read_mi_data_port" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_port" 9 "nvme_mi_mi_read_mi_data_port" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_port \- Perform a Read MI Data Structure command, retrieving port data.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_subsys.2 b/doc/man/nvme_mi_mi_read_mi_data_subsys.2
index 6e571c6..92aaf81 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_subsys.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_subsys.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_subsys" 9 "nvme_mi_mi_read_mi_data_subsys" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_subsys" 9 "nvme_mi_mi_read_mi_data_subsys" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_subsys \- Perform a Read MI Data Structure command, retrieving subsystem data.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_req_hdr.2 b/doc/man/nvme_mi_mi_req_hdr.2
index d2a332f..47d66c6 100644
--- a/doc/man/nvme_mi_mi_req_hdr.2
+++ b/doc/man/nvme_mi_mi_req_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_mi_req_hdr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_mi_req_hdr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_mi_req_hdr \- MI request message header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_resp_hdr.2 b/doc/man/nvme_mi_mi_resp_hdr.2
index 63164c5..c793905 100644
--- a/doc/man/nvme_mi_mi_resp_hdr.2
+++ b/doc/man/nvme_mi_mi_resp_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_mi_resp_hdr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_mi_resp_hdr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_mi_resp_hdr \- MI response message header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_subsystem_health_status_poll.2 b/doc/man/nvme_mi_mi_subsystem_health_status_poll.2
index aa703ac..babe592 100644
--- a/doc/man/nvme_mi_mi_subsystem_health_status_poll.2
+++ b/doc/man/nvme_mi_mi_subsystem_health_status_poll.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_subsystem_health_status_poll" 9 "nvme_mi_mi_subsystem_health_status_poll" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_subsystem_health_status_poll" 9 "nvme_mi_mi_subsystem_health_status_poll" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_subsystem_health_status_poll \- Read the Subsystem Health Data Structure from the NVM subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_msg_hdr.2 b/doc/man/nvme_mi_msg_hdr.2
index 39cdfd2..3663481 100644
--- a/doc/man/nvme_mi_msg_hdr.2
+++ b/doc/man/nvme_mi_msg_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_msg_hdr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_msg_hdr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_msg_hdr \- General MI message header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_msg_resp.2 b/doc/man/nvme_mi_msg_resp.2
index b885151..c4019ac 100644
--- a/doc/man/nvme_mi_msg_resp.2
+++ b/doc/man/nvme_mi_msg_resp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_msg_resp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_msg_resp" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_msg_resp \- Generic response type.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_nvm_ss_health_status.2 b/doc/man/nvme_mi_nvm_ss_health_status.2
index 900c57c..b0a8823 100644
--- a/doc/man/nvme_mi_nvm_ss_health_status.2
+++ b/doc/man/nvme_mi_nvm_ss_health_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_nvm_ss_health_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_nvm_ss_health_status" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_nvm_ss_health_status \- Subsystem Management Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_open_mctp.2 b/doc/man/nvme_mi_open_mctp.2
index d13c9d6..374336a 100644
--- a/doc/man/nvme_mi_open_mctp.2
+++ b/doc/man/nvme_mi_open_mctp.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_open_mctp" 9 "nvme_mi_open_mctp" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_open_mctp" 9 "nvme_mi_open_mctp" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_open_mctp \- Create an endpoint using a MCTP connection.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_osc.2 b/doc/man/nvme_mi_osc.2
index 766b9d0..02147b6 100644
--- a/doc/man/nvme_mi_osc.2
+++ b/doc/man/nvme_mi_osc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_osc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_osc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_osc \- Optionally Supported Command Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_port_pcie.2 b/doc/man/nvme_mi_port_pcie.2
index 95060c0..805ad6c 100644
--- a/doc/man/nvme_mi_port_pcie.2
+++ b/doc/man/nvme_mi_port_pcie.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_port_pcie" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_port_pcie" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_port_pcie \- PCIe Port Specific Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_port_smb.2 b/doc/man/nvme_mi_port_smb.2
index 42e0466..11cd3f9 100644
--- a/doc/man/nvme_mi_port_smb.2
+++ b/doc/man/nvme_mi_port_smb.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_port_smb" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_port_smb" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_port_smb \- SMBus Port Specific Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_ctrl_info.2 b/doc/man/nvme_mi_read_ctrl_info.2
index 0b526c4..e1ac427 100644
--- a/doc/man/nvme_mi_read_ctrl_info.2
+++ b/doc/man/nvme_mi_read_ctrl_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_ctrl_info" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_ctrl_info" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_ctrl_info \- Controller Information Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_nvm_ss_info.2 b/doc/man/nvme_mi_read_nvm_ss_info.2
index 2a31c4c..aad5603 100644
--- a/doc/man/nvme_mi_read_nvm_ss_info.2
+++ b/doc/man/nvme_mi_read_nvm_ss_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_nvm_ss_info" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_nvm_ss_info" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_nvm_ss_info \- NVM Subsystem Information Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_port_info.2 b/doc/man/nvme_mi_read_port_info.2
index 5782511..bbb4dce 100644
--- a/doc/man/nvme_mi_read_port_info.2
+++ b/doc/man/nvme_mi_read_port_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_port_info" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_port_info" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_port_info \- Port Information Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_sc_list.2 b/doc/man/nvme_mi_read_sc_list.2
index 2cb198d..3890711 100644
--- a/doc/man/nvme_mi_read_sc_list.2
+++ b/doc/man/nvme_mi_read_sc_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_sc_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_sc_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_sc_list \- Management Endpoint Buffer Supported Command List Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_resp_status.2 b/doc/man/nvme_mi_resp_status.2
index 1cf8f30..ae2ce01 100644
--- a/doc/man/nvme_mi_resp_status.2
+++ b/doc/man/nvme_mi_resp_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_resp_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_resp_status" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_resp_status \- values for the response status field
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_set_probe_enabled.2 b/doc/man/nvme_mi_set_probe_enabled.2
index 27bd685..466848f 100644
--- a/doc/man/nvme_mi_set_probe_enabled.2
+++ b/doc/man/nvme_mi_set_probe_enabled.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_set_probe_enabled" 9 "nvme_mi_set_probe_enabled" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_set_probe_enabled" 9 "nvme_mi_set_probe_enabled" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_set_probe_enabled \- enable/disable the probe for new endpoints
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_status_to_string.2 b/doc/man/nvme_mi_status_to_string.2
index 513cb48..1b16604 100644
--- a/doc/man/nvme_mi_status_to_string.2
+++ b/doc/man/nvme_mi_status_to_string.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_status_to_string" 9 "nvme_mi_status_to_string" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_status_to_string" 9 "nvme_mi_status_to_string" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_status_to_string \- return a string representation of the MI status.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_hdr.2 b/doc/man/nvme_mi_vpd_hdr.2
index c5400a1..d2f1208 100644
--- a/doc/man/nvme_mi_vpd_hdr.2
+++ b/doc/man/nvme_mi_vpd_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_hdr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_hdr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_hdr \- Vital Product Data Common Header
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_mr_common.2 b/doc/man/nvme_mi_vpd_mr_common.2
index 884fcd9..5d3fb67 100644
--- a/doc/man/nvme_mi_vpd_mr_common.2
+++ b/doc/man/nvme_mi_vpd_mr_common.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_mr_common" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_mr_common" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_mr_common \- NVMe MultiRecord Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_mra.2 b/doc/man/nvme_mi_vpd_mra.2
index e2b59ee..0433aba 100644
--- a/doc/man/nvme_mi_vpd_mra.2
+++ b/doc/man/nvme_mi_vpd_mra.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_mra" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_mra" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_mra \- NVMe MultiRecord Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_ppmra.2 b/doc/man/nvme_mi_vpd_ppmra.2
index a8e9ac1..3c4debc 100644
--- a/doc/man/nvme_mi_vpd_ppmra.2
+++ b/doc/man/nvme_mi_vpd_ppmra.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_ppmra" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_ppmra" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_ppmra \- NVMe PCIe Port MultiRecord Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_telem.2 b/doc/man/nvme_mi_vpd_telem.2
index 0ecffd6..e6d167a 100644
--- a/doc/man/nvme_mi_vpd_telem.2
+++ b/doc/man/nvme_mi_vpd_telem.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_telem" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_telem" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_telem \- Vital Product Data Element Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_tra.2 b/doc/man/nvme_mi_vpd_tra.2
index be83c77..160c5b3 100644
--- a/doc/man/nvme_mi_vpd_tra.2
+++ b/doc/man/nvme_mi_vpd_tra.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_tra" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_tra" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_tra \- Vital Product Data Topology MultiRecord
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_attach_ctrls.2 b/doc/man/nvme_namespace_attach_ctrls.2
index 316c908..9b42da6 100644
--- a/doc/man/nvme_namespace_attach_ctrls.2
+++ b/doc/man/nvme_namespace_attach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_attach_ctrls" 9 "nvme_namespace_attach_ctrls" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_attach_ctrls" 9 "nvme_namespace_attach_ctrls" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_attach_ctrls \- Attach namespace to controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_detach_ctrls.2 b/doc/man/nvme_namespace_detach_ctrls.2
index 2018ca8..9606bc2 100644
--- a/doc/man/nvme_namespace_detach_ctrls.2
+++ b/doc/man/nvme_namespace_detach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_detach_ctrls" 9 "nvme_namespace_detach_ctrls" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_detach_ctrls" 9 "nvme_namespace_detach_ctrls" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_detach_ctrls \- Detach namespace from controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_filter.2 b/doc/man/nvme_namespace_filter.2
index 2d4d5e4..f95985f 100644
--- a/doc/man/nvme_namespace_filter.2
+++ b/doc/man/nvme_namespace_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_filter" 9 "nvme_namespace_filter" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_filter" 9 "nvme_namespace_filter" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_filter \- Filter for namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_first_path.2 b/doc/man/nvme_namespace_first_path.2
index c67a1b1..2a67457 100644
--- a/doc/man/nvme_namespace_first_path.2
+++ b/doc/man/nvme_namespace_first_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_first_path" 9 "nvme_namespace_first_path" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_first_path" 9 "nvme_namespace_first_path" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_first_path \- Start path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_for_each_path.2 b/doc/man/nvme_namespace_for_each_path.2
index 3d474b8..8abcc9d 100644
--- a/doc/man/nvme_namespace_for_each_path.2
+++ b/doc/man/nvme_namespace_for_each_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_for_each_path" 9 "nvme_namespace_for_each_path" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_for_each_path" 9 "nvme_namespace_for_each_path" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_for_each_path \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_for_each_path_safe.2 b/doc/man/nvme_namespace_for_each_path_safe.2
index 3800809..763da68 100644
--- a/doc/man/nvme_namespace_for_each_path_safe.2
+++ b/doc/man/nvme_namespace_for_each_path_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_for_each_path_safe" 9 "nvme_namespace_for_each_path_safe" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_for_each_path_safe" 9 "nvme_namespace_for_each_path_safe" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_for_each_path_safe \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_next_path.2 b/doc/man/nvme_namespace_next_path.2
index 5749c9c..9ad4857 100644
--- a/doc/man/nvme_namespace_next_path.2
+++ b/doc/man/nvme_namespace_next_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_next_path" 9 "nvme_namespace_next_path" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_next_path" 9 "nvme_namespace_next_path" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_next_path \- Next path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_nbft_free.2 b/doc/man/nvme_nbft_free.2
index f59ac2c..d5527fd 100644
--- a/doc/man/nvme_nbft_free.2
+++ b/doc/man/nvme_nbft_free.2
@@ -1,4 +1,4 @@
-.TH "nvme_nbft_free" 9 "nvme_nbft_free" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_nbft_free" 9 "nvme_nbft_free" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_nbft_free \- Free the struct nbft_info and its contents
.SH SYNOPSIS
diff --git a/doc/man/nvme_nbft_read.2 b/doc/man/nvme_nbft_read.2
index 8c84988..ea7c9f5 100644
--- a/doc/man/nvme_nbft_read.2
+++ b/doc/man/nvme_nbft_read.2
@@ -1,4 +1,4 @@
-.TH "nvme_nbft_read" 9 "nvme_nbft_read" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_nbft_read" 9 "nvme_nbft_read" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_nbft_read \- Read and parse contents of an ACPI NBFT table
.SH SYNOPSIS
diff --git a/doc/man/nvme_nd_ns_fpi.2 b/doc/man/nvme_nd_ns_fpi.2
index 649e0c2..4f139d6 100644
--- a/doc/man/nvme_nd_ns_fpi.2
+++ b/doc/man/nvme_nd_ns_fpi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nd_ns_fpi" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nd_ns_fpi" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_nd_ns_fpi \- If a format operation is in progress, this field indicates the percentage of the namespace that remains to be formatted.
.SH SYNOPSIS
diff --git a/doc/man/nvme_next_host.2 b/doc/man/nvme_next_host.2
index 62a6e98..83a101f 100644
--- a/doc/man/nvme_next_host.2
+++ b/doc/man/nvme_next_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_next_host" 9 "nvme_next_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_next_host" 9 "nvme_next_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_next_host \- Next host iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_next_subsystem.2 b/doc/man/nvme_next_subsystem.2
index 4fec85f..7596a69 100644
--- a/doc/man/nvme_next_subsystem.2
+++ b/doc/man/nvme_next_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_next_subsystem" 9 "nvme_next_subsystem" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_next_subsystem" 9 "nvme_next_subsystem" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_next_subsystem \- Next subsystem iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_attach.2 b/doc/man/nvme_ns_attach.2
index 3a46f9b..5a49e69 100644
--- a/doc/man/nvme_ns_attach.2
+++ b/doc/man/nvme_ns_attach.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_attach" 9 "nvme_ns_attach" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_attach" 9 "nvme_ns_attach" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_attach \- Attach or detach namespace to controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_attach_ctrls.2 b/doc/man/nvme_ns_attach_ctrls.2
index fe9d7f7..3f29a6d 100644
--- a/doc/man/nvme_ns_attach_ctrls.2
+++ b/doc/man/nvme_ns_attach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_attach_ctrls" 9 "nvme_ns_attach_ctrls" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_attach_ctrls" 9 "nvme_ns_attach_ctrls" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_attach_ctrls \- Attach namespace to controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_attach_sel.2 b/doc/man/nvme_ns_attach_sel.2
index 81dc8e2..580de4b 100644
--- a/doc/man/nvme_ns_attach_sel.2
+++ b/doc/man/nvme_ns_attach_sel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_attach_sel" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_attach_sel" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_attach_sel \- Namespace Attachment - Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_compare.2 b/doc/man/nvme_ns_compare.2
index 15dec88..61738cc 100644
--- a/doc/man/nvme_ns_compare.2
+++ b/doc/man/nvme_ns_compare.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_compare" 9 "nvme_ns_compare" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_compare" 9 "nvme_ns_compare" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_compare \- Compare data on a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_detach_ctrls.2 b/doc/man/nvme_ns_detach_ctrls.2
index 83e5b6b..c0a4fb9 100644
--- a/doc/man/nvme_ns_detach_ctrls.2
+++ b/doc/man/nvme_ns_detach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_detach_ctrls" 9 "nvme_ns_detach_ctrls" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_detach_ctrls" 9 "nvme_ns_detach_ctrls" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_detach_ctrls \- Detach namespace from controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_flush.2 b/doc/man/nvme_ns_flush.2
index a1e1403..d14be33 100644
--- a/doc/man/nvme_ns_flush.2
+++ b/doc/man/nvme_ns_flush.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_flush" 9 "nvme_ns_flush" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_flush" 9 "nvme_ns_flush" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_flush \- Flush data to a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_csi.2 b/doc/man/nvme_ns_get_csi.2
index 810cf78..36aa093 100644
--- a/doc/man/nvme_ns_get_csi.2
+++ b/doc/man/nvme_ns_get_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_csi" 9 "nvme_ns_get_csi" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_csi" 9 "nvme_ns_get_csi" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_csi \- Command set identifier of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_ctrl.2 b/doc/man/nvme_ns_get_ctrl.2
index a9497d5..765c822 100644
--- a/doc/man/nvme_ns_get_ctrl.2
+++ b/doc/man/nvme_ns_get_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_ctrl" 9 "nvme_ns_get_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_ctrl" 9 "nvme_ns_get_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_ctrl \- &nvme_ctrl_t of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_eui64.2 b/doc/man/nvme_ns_get_eui64.2
index 639aa4e..ee7dcbc 100644
--- a/doc/man/nvme_ns_get_eui64.2
+++ b/doc/man/nvme_ns_get_eui64.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_eui64" 9 "nvme_ns_get_eui64" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_eui64" 9 "nvme_ns_get_eui64" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_eui64 \- 64-bit eui of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_fd.2 b/doc/man/nvme_ns_get_fd.2
index 213179a..f336aa7 100644
--- a/doc/man/nvme_ns_get_fd.2
+++ b/doc/man/nvme_ns_get_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_fd" 9 "nvme_ns_get_fd" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_fd" 9 "nvme_ns_get_fd" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_fd \- Get associated file descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_firmware.2 b/doc/man/nvme_ns_get_firmware.2
index 02a0243..766d165 100644
--- a/doc/man/nvme_ns_get_firmware.2
+++ b/doc/man/nvme_ns_get_firmware.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_firmware" 9 "nvme_ns_get_firmware" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_firmware" 9 "nvme_ns_get_firmware" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_firmware \- Firmware string of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_generic_name.2 b/doc/man/nvme_ns_get_generic_name.2
index dbe912c..c202dbc 100644
--- a/doc/man/nvme_ns_get_generic_name.2
+++ b/doc/man/nvme_ns_get_generic_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_generic_name" 9 "nvme_ns_get_generic_name" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_generic_name" 9 "nvme_ns_get_generic_name" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_generic_name \- Returns name of generic namespace chardev.
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_lba_count.2 b/doc/man/nvme_ns_get_lba_count.2
index f812e4e..9b6f608 100644
--- a/doc/man/nvme_ns_get_lba_count.2
+++ b/doc/man/nvme_ns_get_lba_count.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_lba_count" 9 "nvme_ns_get_lba_count" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_lba_count" 9 "nvme_ns_get_lba_count" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_lba_count \- LBA count of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_lba_size.2 b/doc/man/nvme_ns_get_lba_size.2
index 43d5019..7d2ff59 100644
--- a/doc/man/nvme_ns_get_lba_size.2
+++ b/doc/man/nvme_ns_get_lba_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_lba_size" 9 "nvme_ns_get_lba_size" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_lba_size" 9 "nvme_ns_get_lba_size" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_lba_size \- LBA size of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_lba_util.2 b/doc/man/nvme_ns_get_lba_util.2
index 06d2d79..c6ff9a5 100644
--- a/doc/man/nvme_ns_get_lba_util.2
+++ b/doc/man/nvme_ns_get_lba_util.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_lba_util" 9 "nvme_ns_get_lba_util" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_lba_util" 9 "nvme_ns_get_lba_util" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_lba_util \- LBA utilization of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_meta_size.2 b/doc/man/nvme_ns_get_meta_size.2
index 3f9b080..52958ae 100644
--- a/doc/man/nvme_ns_get_meta_size.2
+++ b/doc/man/nvme_ns_get_meta_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_meta_size" 9 "nvme_ns_get_meta_size" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_meta_size" 9 "nvme_ns_get_meta_size" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_meta_size \- Metadata size of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_model.2 b/doc/man/nvme_ns_get_model.2
index cf92221..958e559 100644
--- a/doc/man/nvme_ns_get_model.2
+++ b/doc/man/nvme_ns_get_model.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_model" 9 "nvme_ns_get_model" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_model" 9 "nvme_ns_get_model" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_model \- Model of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_name.2 b/doc/man/nvme_ns_get_name.2
index fb6fe13..b265e2b 100644
--- a/doc/man/nvme_ns_get_name.2
+++ b/doc/man/nvme_ns_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_name" 9 "nvme_ns_get_name" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_name" 9 "nvme_ns_get_name" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_name \- sysfs name of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_nguid.2 b/doc/man/nvme_ns_get_nguid.2
index 8d35ae6..ccec070 100644
--- a/doc/man/nvme_ns_get_nguid.2
+++ b/doc/man/nvme_ns_get_nguid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_nguid" 9 "nvme_ns_get_nguid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_nguid" 9 "nvme_ns_get_nguid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_nguid \- 128-bit nguid of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_nsid.2 b/doc/man/nvme_ns_get_nsid.2
index c283e18..63369fe 100644
--- a/doc/man/nvme_ns_get_nsid.2
+++ b/doc/man/nvme_ns_get_nsid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_nsid" 9 "nvme_ns_get_nsid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_nsid" 9 "nvme_ns_get_nsid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_nsid \- NSID of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_serial.2 b/doc/man/nvme_ns_get_serial.2
index 47c27ca..1721e02 100644
--- a/doc/man/nvme_ns_get_serial.2
+++ b/doc/man/nvme_ns_get_serial.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_serial" 9 "nvme_ns_get_serial" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_serial" 9 "nvme_ns_get_serial" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_serial \- Serial number of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_subsystem.2 b/doc/man/nvme_ns_get_subsystem.2
index 6735255..4d5e47b 100644
--- a/doc/man/nvme_ns_get_subsystem.2
+++ b/doc/man/nvme_ns_get_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_subsystem" 9 "nvme_ns_get_subsystem" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_subsystem" 9 "nvme_ns_get_subsystem" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_subsystem \- &nvme_subsystem_t of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_sysfs_dir.2 b/doc/man/nvme_ns_get_sysfs_dir.2
index c50233f..8303b4f 100644
--- a/doc/man/nvme_ns_get_sysfs_dir.2
+++ b/doc/man/nvme_ns_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_sysfs_dir" 9 "nvme_ns_get_sysfs_dir" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_sysfs_dir" 9 "nvme_ns_get_sysfs_dir" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_sysfs_dir \- sysfs directory of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_uuid.2 b/doc/man/nvme_ns_get_uuid.2
index 009a62d..661f76e 100644
--- a/doc/man/nvme_ns_get_uuid.2
+++ b/doc/man/nvme_ns_get_uuid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_uuid" 9 "nvme_ns_get_uuid" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_uuid" 9 "nvme_ns_get_uuid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_uuid \- UUID of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_id_desc.2 b/doc/man/nvme_ns_id_desc.2
index ecf27ec..5eeecb3 100644
--- a/doc/man/nvme_ns_id_desc.2
+++ b/doc/man/nvme_ns_id_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ns_id_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ns_id_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_ns_id_desc \- Namespace identifier type descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_id_desc_nidt.2 b/doc/man/nvme_ns_id_desc_nidt.2
index d89f89a..8c74ac1 100644
--- a/doc/man/nvme_ns_id_desc_nidt.2
+++ b/doc/man/nvme_ns_id_desc_nidt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_id_desc_nidt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_id_desc_nidt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_id_desc_nidt \- Known namespace identifier types
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_identify.2 b/doc/man/nvme_ns_identify.2
index a9d502a..df2df23 100644
--- a/doc/man/nvme_ns_identify.2
+++ b/doc/man/nvme_ns_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_identify" 9 "nvme_ns_identify" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_identify" 9 "nvme_ns_identify" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_identify \- Issue an 'identify namespace' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_identify_descs.2 b/doc/man/nvme_ns_identify_descs.2
index c45dcf1..8ad90ab 100644
--- a/doc/man/nvme_ns_identify_descs.2
+++ b/doc/man/nvme_ns_identify_descs.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_identify_descs" 9 "nvme_ns_identify_descs" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_identify_descs" 9 "nvme_ns_identify_descs" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_identify_descs \- Issue an 'identify descriptors' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_list.2 b/doc/man/nvme_ns_list.2
index 565bee2..df820e9 100644
--- a/doc/man/nvme_ns_list.2
+++ b/doc/man/nvme_ns_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ns_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ns_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_ns_list \- Namespace List
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_metadata_type.2 b/doc/man/nvme_ns_metadata_type.2
index 068e3eb..93e940d 100644
--- a/doc/man/nvme_ns_metadata_type.2
+++ b/doc/man/nvme_ns_metadata_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_metadata_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_metadata_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_metadata_type \- Namespace Metadata Element Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt.2 b/doc/man/nvme_ns_mgmt.2
index 34a0bcc..b01b441 100644
--- a/doc/man/nvme_ns_mgmt.2
+++ b/doc/man/nvme_ns_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_mgmt" 9 "nvme_ns_mgmt" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_mgmt" 9 "nvme_ns_mgmt" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_mgmt \- Issue a Namespace management command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_create.2 b/doc/man/nvme_ns_mgmt_create.2
index 695bdda..87f8b20 100644
--- a/doc/man/nvme_ns_mgmt_create.2
+++ b/doc/man/nvme_ns_mgmt_create.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_mgmt_create" 9 "nvme_ns_mgmt_create" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_mgmt_create" 9 "nvme_ns_mgmt_create" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_mgmt_create \- Create a non attached namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_delete.2 b/doc/man/nvme_ns_mgmt_delete.2
index 6bc8f0d..a6dab18 100644
--- a/doc/man/nvme_ns_mgmt_delete.2
+++ b/doc/man/nvme_ns_mgmt_delete.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_mgmt_delete" 9 "nvme_ns_mgmt_delete" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_mgmt_delete" 9 "nvme_ns_mgmt_delete" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_mgmt_delete \- Delete a non attached namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_delete_timeout.2 b/doc/man/nvme_ns_mgmt_delete_timeout.2
index 5693bd4..ab6f28b 100644
--- a/doc/man/nvme_ns_mgmt_delete_timeout.2
+++ b/doc/man/nvme_ns_mgmt_delete_timeout.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_mgmt_delete_timeout" 9 "nvme_ns_mgmt_delete_timeout" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_mgmt_delete_timeout" 9 "nvme_ns_mgmt_delete_timeout" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_mgmt_delete_timeout \- Delete a non attached namespace with timeout
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_host_sw_specified.2 b/doc/man/nvme_ns_mgmt_host_sw_specified.2
index 4c34212..d523ade 100644
--- a/doc/man/nvme_ns_mgmt_host_sw_specified.2
+++ b/doc/man/nvme_ns_mgmt_host_sw_specified.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ns_mgmt_host_sw_specified" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ns_mgmt_host_sw_specified" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_ns_mgmt_host_sw_specified \- Namespace management Host Software Specified Fields.
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_sel.2 b/doc/man/nvme_ns_mgmt_sel.2
index e624a0d..9d93d50 100644
--- a/doc/man/nvme_ns_mgmt_sel.2
+++ b/doc/man/nvme_ns_mgmt_sel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_mgmt_sel" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_mgmt_sel" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_mgmt_sel \- Namespace Management - Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_read.2 b/doc/man/nvme_ns_read.2
index a628863..51aafc7 100644
--- a/doc/man/nvme_ns_read.2
+++ b/doc/man/nvme_ns_read.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_read" 9 "nvme_ns_read" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_read" 9 "nvme_ns_read" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_read \- Read from a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_release_fd.2 b/doc/man/nvme_ns_release_fd.2
index b318700..be2d6e9 100644
--- a/doc/man/nvme_ns_release_fd.2
+++ b/doc/man/nvme_ns_release_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_release_fd" 9 "nvme_ns_release_fd" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_release_fd" 9 "nvme_ns_release_fd" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_release_fd \- Close fd and clear fd from ns object
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_rescan.2 b/doc/man/nvme_ns_rescan.2
index 1526a29..bd463ac 100644
--- a/doc/man/nvme_ns_rescan.2
+++ b/doc/man/nvme_ns_rescan.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_rescan" 9 "nvme_ns_rescan" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_rescan" 9 "nvme_ns_rescan" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_rescan \- Initiate a controller rescan
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_verify.2 b/doc/man/nvme_ns_verify.2
index ea9c1f6..b89eff9 100644
--- a/doc/man/nvme_ns_verify.2
+++ b/doc/man/nvme_ns_verify.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_verify" 9 "nvme_ns_verify" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_verify" 9 "nvme_ns_verify" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_verify \- Verify data on a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write.2 b/doc/man/nvme_ns_write.2
index 72b3282..f9999ac 100644
--- a/doc/man/nvme_ns_write.2
+++ b/doc/man/nvme_ns_write.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_write" 9 "nvme_ns_write" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_write" 9 "nvme_ns_write" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_write \- Write to a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write_protect_cfg.2 b/doc/man/nvme_ns_write_protect_cfg.2
index b809d0a..53fa5e8 100644
--- a/doc/man/nvme_ns_write_protect_cfg.2
+++ b/doc/man/nvme_ns_write_protect_cfg.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_write_protect_cfg" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_write_protect_cfg" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_write_protect_cfg \- Write Protection - Write Protection State
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write_uncorrectable.2 b/doc/man/nvme_ns_write_uncorrectable.2
index 9d37afe..eca2e34 100644
--- a/doc/man/nvme_ns_write_uncorrectable.2
+++ b/doc/man/nvme_ns_write_uncorrectable.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_write_uncorrectable" 9 "nvme_ns_write_uncorrectable" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_write_uncorrectable" 9 "nvme_ns_write_uncorrectable" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_write_uncorrectable \- Issus a 'write uncorrectable' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write_zeros.2 b/doc/man/nvme_ns_write_zeros.2
index ab4f989..cbe7a22 100644
--- a/doc/man/nvme_ns_write_zeros.2
+++ b/doc/man/nvme_ns_write_zeros.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_write_zeros" 9 "nvme_ns_write_zeros" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_write_zeros" 9 "nvme_ns_write_zeros" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_write_zeros \- Write zeros to a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_nss_hw_err_event.2 b/doc/man/nvme_nss_hw_err_event.2
index 18701fd..a57c6ec 100644
--- a/doc/man/nvme_nss_hw_err_event.2
+++ b/doc/man/nvme_nss_hw_err_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nss_hw_err_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nss_hw_err_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_nss_hw_err_event \- NVM Subsystem Hardware Error Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvm_id_ns.2 b/doc/man/nvme_nvm_id_ns.2
index 5acea53..686c916 100644
--- a/doc/man/nvme_nvm_id_ns.2
+++ b/doc/man/nvme_nvm_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nvm_id_ns" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nvm_id_ns" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_nvm_id_ns \- NVME Command Set I/O Command Set Specific Identify Namespace Data Structure
.SH SYNOPSIS
@@ -16,7 +16,15 @@ struct nvme_nvm_id_ns {
.br
.BI " __le32 npdgl;"
.br
-.BI " __u8 rsvd272[20];"
+.BI " __le32 nprg;"
+.br
+.BI " __le32 npra;"
+.br
+.BI " __le32 nors;"
+.br
+.BI " __le32 npdal;"
+.br
+.BI " __le32 lbapss;"
.br
.BI " __le32 tlbaag;"
.br
@@ -39,8 +47,16 @@ Reserved
List of Extended LBA Format Support
.IP "npdgl" 12
Namespace Preferred Deallocate Granularity Large
-.IP "rsvd272" 12
-Reserved
+.IP "nprg" 12
+Namespace Preferred Read Granularity
+.IP "npra" 12
+Namespace Preferred Read Alignment
+.IP "nors" 12
+Namespace Optimal Read Size
+.IP "npdal" 12
+Namespace Preferred Deallocate Alignment Large
+.IP "lbapss" 12
+LBA Format Placement Shard Size
.IP "tlbaag" 12
Tracked LBA Allocation Granularity
.IP "rsvd296" 12
diff --git a/doc/man/nvme_nvm_id_ns_elbaf.2 b/doc/man/nvme_nvm_id_ns_elbaf.2
index bda2ab2..1765567 100644
--- a/doc/man/nvme_nvm_id_ns_elbaf.2
+++ b/doc/man/nvme_nvm_id_ns_elbaf.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nvm_id_ns_elbaf" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nvm_id_ns_elbaf" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_nvm_id_ns_elbaf \- This field indicates the extended LBA format
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvm_id_ns_pif.2 b/doc/man/nvme_nvm_id_ns_pif.2
index 7dbe5d9..10108c6 100644
--- a/doc/man/nvme_nvm_id_ns_pif.2
+++ b/doc/man/nvme_nvm_id_ns_pif.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nvm_id_ns_pif" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nvm_id_ns_pif" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_nvm_id_ns_pif \- This field indicates the type of the Protection Information Format
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvm_identify_ctrl.2 b/doc/man/nvme_nvm_identify_ctrl.2
index e2a5a0a..2f565dd 100644
--- a/doc/man/nvme_nvm_identify_ctrl.2
+++ b/doc/man/nvme_nvm_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_nvm_identify_ctrl" 9 "nvme_nvm_identify_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_nvm_identify_ctrl" 9 "nvme_nvm_identify_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_nvm_identify_ctrl \- Identify controller data
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmeset_pl_status.2 b/doc/man/nvme_nvmeset_pl_status.2
index 6a31dd0..93bbcaa 100644
--- a/doc/man/nvme_nvmeset_pl_status.2
+++ b/doc/man/nvme_nvmeset_pl_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nvmeset_pl_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nvmeset_pl_status" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_nvmeset_pl_status \- Predictable Latency Per NVM Set Log - Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmset_attr.2 b/doc/man/nvme_nvmset_attr.2
index 1827a61..72bba7d 100644
--- a/doc/man/nvme_nvmset_attr.2
+++ b/doc/man/nvme_nvmset_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nvmset_attr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nvmset_attr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_nvmset_attr \- NVM Set Attributes Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmset_pl_events.2 b/doc/man/nvme_nvmset_pl_events.2
index e52134c..3df0cfd 100644
--- a/doc/man/nvme_nvmset_pl_events.2
+++ b/doc/man/nvme_nvmset_pl_events.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nvmset_pl_events" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nvmset_pl_events" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_nvmset_pl_events \- Predictable Latency Per NVM Set Log - Event Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmset_predictable_lat_log.2 b/doc/man/nvme_nvmset_predictable_lat_log.2
index 4cbacf6..0c73ab1 100644
--- a/doc/man/nvme_nvmset_predictable_lat_log.2
+++ b/doc/man/nvme_nvmset_predictable_lat_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nvmset_predictable_lat_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nvmset_predictable_lat_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_nvmset_predictable_lat_log \- Predictable Latency Mode - Deterministic Threshold Configuration Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_open.2 b/doc/man/nvme_open.2
index 138e98d..2940eb4 100644
--- a/doc/man/nvme_open.2
+++ b/doc/man/nvme_open.2
@@ -1,4 +1,4 @@
-.TH "nvme_open" 9 "nvme_open" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_open" 9 "nvme_open" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_open \- Open an nvme controller or namespace device
.SH SYNOPSIS
diff --git a/doc/man/nvme_parse_uri.2 b/doc/man/nvme_parse_uri.2
index 3c3302a..53d0b56 100644
--- a/doc/man/nvme_parse_uri.2
+++ b/doc/man/nvme_parse_uri.2
@@ -1,4 +1,4 @@
-.TH "nvme_parse_uri" 9 "nvme_parse_uri" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_parse_uri" 9 "nvme_parse_uri" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_parse_uri \- Parse the URI string
.SH SYNOPSIS
diff --git a/doc/man/nvme_passthru_cmd.2 b/doc/man/nvme_passthru_cmd.2
index fe3b63f..4fbfbcd 100644
--- a/doc/man/nvme_passthru_cmd.2
+++ b/doc/man/nvme_passthru_cmd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_passthru_cmd" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_passthru_cmd" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_passthru_cmd \- nvme passthrough command structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_passthru_cmd64.2 b/doc/man/nvme_passthru_cmd64.2
index 67fad6c..4b93706 100644
--- a/doc/man/nvme_passthru_cmd64.2
+++ b/doc/man/nvme_passthru_cmd64.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_passthru_cmd64" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_passthru_cmd64" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_passthru_cmd64 \- 64-bit nvme passthrough command structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_ana_state.2 b/doc/man/nvme_path_get_ana_state.2
index 6a9fe4d..3d32fc6 100644
--- a/doc/man/nvme_path_get_ana_state.2
+++ b/doc/man/nvme_path_get_ana_state.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_ana_state" 9 "nvme_path_get_ana_state" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_ana_state" 9 "nvme_path_get_ana_state" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_ana_state \- ANA state of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_ctrl.2 b/doc/man/nvme_path_get_ctrl.2
index 47b5b91..d6f4cf7 100644
--- a/doc/man/nvme_path_get_ctrl.2
+++ b/doc/man/nvme_path_get_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_ctrl" 9 "nvme_path_get_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_ctrl" 9 "nvme_path_get_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_ctrl \- Parent controller of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_name.2 b/doc/man/nvme_path_get_name.2
index f335f5c..999f990 100644
--- a/doc/man/nvme_path_get_name.2
+++ b/doc/man/nvme_path_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_name" 9 "nvme_path_get_name" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_name" 9 "nvme_path_get_name" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_name \- sysfs name of an &nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_ns.2 b/doc/man/nvme_path_get_ns.2
index fccf70c..5d646f4 100644
--- a/doc/man/nvme_path_get_ns.2
+++ b/doc/man/nvme_path_get_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_ns" 9 "nvme_path_get_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_ns" 9 "nvme_path_get_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_ns \- Parent namespace of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_sysfs_dir.2 b/doc/man/nvme_path_get_sysfs_dir.2
index b2a9629..a8254b6 100644
--- a/doc/man/nvme_path_get_sysfs_dir.2
+++ b/doc/man/nvme_path_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_sysfs_dir" 9 "nvme_path_get_sysfs_dir" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_sysfs_dir" 9 "nvme_path_get_sysfs_dir" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_sysfs_dir \- sysfs directory of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_paths_filter.2 b/doc/man/nvme_paths_filter.2
index 0a66e37..f35f0a1 100644
--- a/doc/man/nvme_paths_filter.2
+++ b/doc/man/nvme_paths_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_paths_filter" 9 "nvme_paths_filter" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_paths_filter" 9 "nvme_paths_filter" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_paths_filter \- Filter for paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_pel_ehai.2 b/doc/man/nvme_pel_ehai.2
index e8b9b99..df50f2d 100644
--- a/doc/man/nvme_pel_ehai.2
+++ b/doc/man/nvme_pel_ehai.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pel_ehai" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pel_ehai" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pel_ehai \- This field indicates the persistent event header additional information
.SH SYNOPSIS
diff --git a/doc/man/nvme_pel_ehai_pit.2 b/doc/man/nvme_pel_ehai_pit.2
index 3d107a2..e29f060 100644
--- a/doc/man/nvme_pel_ehai_pit.2
+++ b/doc/man/nvme_pel_ehai_pit.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pel_ehai_pit" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pel_ehai_pit" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pel_ehai_pit \- Persistent Event Header Additional Information - Port Identifier Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_pel_rci.2 b/doc/man/nvme_pel_rci.2
index 54df6f0..df574d6 100644
--- a/doc/man/nvme_pel_rci.2
+++ b/doc/man/nvme_pel_rci.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pel_rci" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pel_rci" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pel_rci \- This field indicates the persistent event log reporting context
.SH SYNOPSIS
diff --git a/doc/man/nvme_pel_rci_rcpit.2 b/doc/man/nvme_pel_rci_rcpit.2
index 28ea1ce..11468ec 100644
--- a/doc/man/nvme_pel_rci_rcpit.2
+++ b/doc/man/nvme_pel_rci_rcpit.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pel_rci_rcpit" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pel_rci_rcpit" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pel_rci_rcpit \- Persistent Event Log Reporting Context - Port Identifier Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_persistent_event_entry.2 b/doc/man/nvme_persistent_event_entry.2
index c9623ea..1390ed3 100644
--- a/doc/man/nvme_persistent_event_entry.2
+++ b/doc/man/nvme_persistent_event_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_persistent_event_entry" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_persistent_event_entry" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_persistent_event_entry \- Persistent Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_persistent_event_log.2 b/doc/man/nvme_persistent_event_log.2
index 81a61a5..fe94ea8 100644
--- a/doc/man/nvme_persistent_event_log.2
+++ b/doc/man/nvme_persistent_event_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_persistent_event_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_persistent_event_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_persistent_event_log \- Persistent Event Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_persistent_event_types.2 b/doc/man/nvme_persistent_event_types.2
index a9d07e8..e5eeff8 100644
--- a/doc/man/nvme_persistent_event_types.2
+++ b/doc/man/nvme_persistent_event_types.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_persistent_event_types" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_persistent_event_types" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_persistent_event_types \- Persistent event log events
.SH SYNOPSIS
@@ -56,6 +56,10 @@ enum nvme_persistent_event_types {
,
.br
.br
+.BI " NVME_PEL_SANITIZE_MEDIA_VERIF_EVENT"
+,
+.br
+.br
.BI " NVME_PEL_VENDOR_SPECIFIC_EVENT"
,
.br
@@ -90,6 +94,8 @@ Set Feature Event
Telemetry Log Create Event
.IP "NVME_PEL_THERMAL_EXCURSION_EVENT" 12
Thermal Excursion Event
+.IP "NVME_PEL_SANITIZE_MEDIA_VERIF_EVENT" 12
+Sanitize Media Verification Event
.IP "NVME_PEL_VENDOR_SPECIFIC_EVENT" 12
Vendor Specific Event
.IP "NVME_PEL_TCG_DEFINED_EVENT" 12
diff --git a/doc/man/nvme_pevent_log_action.2 b/doc/man/nvme_pevent_log_action.2
index 54070ab..db7e1db 100644
--- a/doc/man/nvme_pevent_log_action.2
+++ b/doc/man/nvme_pevent_log_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pevent_log_action" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pevent_log_action" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pevent_log_action \- Persistent Event Log - Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_phy_rx_eom_log.2 b/doc/man/nvme_phy_rx_eom_log.2
index 2e97d7a..a63f8b7 100644
--- a/doc/man/nvme_phy_rx_eom_log.2
+++ b/doc/man/nvme_phy_rx_eom_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_phy_rx_eom_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_phy_rx_eom_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_phy_rx_eom_log \- Physical Interface Receiver Eye Opening Measurement Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_phy_rx_eom_progress.2 b/doc/man/nvme_phy_rx_eom_progress.2
index 96b2c1e..286b1d7 100644
--- a/doc/man/nvme_phy_rx_eom_progress.2
+++ b/doc/man/nvme_phy_rx_eom_progress.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_phy_rx_eom_progress" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_phy_rx_eom_progress" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_phy_rx_eom_progress \- EOM In Progress Values
.SH SYNOPSIS
diff --git a/doc/man/nvme_plm_config.2 b/doc/man/nvme_plm_config.2
index 51afe9d..d3c15e3 100644
--- a/doc/man/nvme_plm_config.2
+++ b/doc/man/nvme_plm_config.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_plm_config" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_plm_config" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_plm_config \- Predictable Latency Mode - Deterministic Threshold Configuration Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmr_size.2 b/doc/man/nvme_pmr_size.2
index 64db221..4b21123 100644
--- a/doc/man/nvme_pmr_size.2
+++ b/doc/man/nvme_pmr_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_pmr_size" 9 "nvme_pmr_size" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_pmr_size" 9 "nvme_pmr_size" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_pmr_size \- Calculate size of persistent memory region elasticity buffer
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmr_throughput.2 b/doc/man/nvme_pmr_throughput.2
index 3ba8dcb..59b27fe 100644
--- a/doc/man/nvme_pmr_throughput.2
+++ b/doc/man/nvme_pmr_throughput.2
@@ -1,4 +1,4 @@
-.TH "nvme_pmr_throughput" 9 "nvme_pmr_throughput" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_pmr_throughput" 9 "nvme_pmr_throughput" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_pmr_throughput \- Calculate throughput of persistent memory buffer
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmrcap.2 b/doc/man/nvme_pmrcap.2
index 0d76563..7be23ab 100644
--- a/doc/man/nvme_pmrcap.2
+++ b/doc/man/nvme_pmrcap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pmrcap" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pmrcap" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pmrcap \- This field indicates the persistent memory region capabilities
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmrctl.2 b/doc/man/nvme_pmrctl.2
index 95c5fd3..67b1b77 100644
--- a/doc/man/nvme_pmrctl.2
+++ b/doc/man/nvme_pmrctl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pmrctl" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pmrctl" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pmrctl \- This field indicates the persistent memory region control
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmrebs.2 b/doc/man/nvme_pmrebs.2
index 3535e44..1399a2d 100644
--- a/doc/man/nvme_pmrebs.2
+++ b/doc/man/nvme_pmrebs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pmrebs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pmrebs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pmrebs \- This field indicates the persistent memory region elasticity buffer size
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmrmsc.2 b/doc/man/nvme_pmrmsc.2
index 120ce56..eb1d0e2 100644
--- a/doc/man/nvme_pmrmsc.2
+++ b/doc/man/nvme_pmrmsc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pmrmsc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pmrmsc" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pmrmsc \- This field indicates the persistent memory region memory space control
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmrsts.2 b/doc/man/nvme_pmrsts.2
index 95bb8cb..3d9f895 100644
--- a/doc/man/nvme_pmrsts.2
+++ b/doc/man/nvme_pmrsts.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pmrsts" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pmrsts" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pmrsts \- This field indicates the persistent memory region status
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmrswtp.2 b/doc/man/nvme_pmrswtp.2
index e8612ea..9b62136 100644
--- a/doc/man/nvme_pmrswtp.2
+++ b/doc/man/nvme_pmrswtp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pmrswtp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pmrswtp" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_pmrswtp \- This field indicates the persistent memory region sustained write throughput
.SH SYNOPSIS
diff --git a/doc/man/nvme_power_on_reset_info_list.2 b/doc/man/nvme_power_on_reset_info_list.2
index 9875eda..dd64e32 100644
--- a/doc/man/nvme_power_on_reset_info_list.2
+++ b/doc/man/nvme_power_on_reset_info_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_power_on_reset_info_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_power_on_reset_info_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_power_on_reset_info_list \- Controller Reset Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_primary_ctrl_cap.2 b/doc/man/nvme_primary_ctrl_cap.2
index 3df1bbe..a044547 100644
--- a/doc/man/nvme_primary_ctrl_cap.2
+++ b/doc/man/nvme_primary_ctrl_cap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_primary_ctrl_cap" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_primary_ctrl_cap" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_primary_ctrl_cap \- Identify - Controller Capabilities Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_flags.2 b/doc/man/nvme_psd_flags.2
index 2b22d97..5e407f1 100644
--- a/doc/man/nvme_psd_flags.2
+++ b/doc/man/nvme_psd_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_psd_flags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_psd_flags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_psd_flags \- Possible flag values in nvme power state descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_power_scale.2 b/doc/man/nvme_psd_power_scale.2
index 2c63211..49f1e73 100644
--- a/doc/man/nvme_psd_power_scale.2
+++ b/doc/man/nvme_psd_power_scale.2
@@ -1,4 +1,4 @@
-.TH "nvme_psd_power_scale" 9 "nvme_psd_power_scale" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_psd_power_scale" 9 "nvme_psd_power_scale" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_psd_power_scale \- power scale occupies the upper 3 bits
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_ps.2 b/doc/man/nvme_psd_ps.2
index 77c26bd..a7d1602 100644
--- a/doc/man/nvme_psd_ps.2
+++ b/doc/man/nvme_psd_ps.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_psd_ps" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_psd_ps" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_psd_ps \- Known values for &struct nvme_psd %ips and %aps. Use with nvme_psd_power_scale() to extract the power scale field to match this enum.
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_workload.2 b/doc/man/nvme_psd_workload.2
index 5eb59b3..6fbb12f 100644
--- a/doc/man/nvme_psd_workload.2
+++ b/doc/man/nvme_psd_workload.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_psd_workload" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_psd_workload" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_psd_workload \- Specifies a workload hint in the Power Management Feature (see &struct nvme_psd.apw) to inform the NVM subsystem or indicate the conditions for the active power level.
.SH SYNOPSIS
diff --git a/doc/man/nvme_read.2 b/doc/man/nvme_read.2
index 5afc747..435ad63 100644
--- a/doc/man/nvme_read.2
+++ b/doc/man/nvme_read.2
@@ -1,4 +1,4 @@
-.TH "nvme_read" 9 "nvme_read" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_read" 9 "nvme_read" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_read \- Submit an nvme user read command
.SH SYNOPSIS
diff --git a/doc/man/nvme_read_config.2 b/doc/man/nvme_read_config.2
index efa4c71..94f9473 100644
--- a/doc/man/nvme_read_config.2
+++ b/doc/man/nvme_read_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_read_config" 9 "nvme_read_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_read_config" 9 "nvme_read_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_read_config \- Read NVMe JSON configuration file
.SH SYNOPSIS
diff --git a/doc/man/nvme_read_key.2 b/doc/man/nvme_read_key.2
index de40d4b..b20248a 100644
--- a/doc/man/nvme_read_key.2
+++ b/doc/man/nvme_read_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_read_key" 9 "nvme_read_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_read_key" 9 "nvme_read_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_read_key \- Read key raw data
.SH SYNOPSIS
diff --git a/doc/man/nvme_refresh_topology.2 b/doc/man/nvme_refresh_topology.2
index 6f003e6..9b8dbd6 100644
--- a/doc/man/nvme_refresh_topology.2
+++ b/doc/man/nvme_refresh_topology.2
@@ -1,4 +1,4 @@
-.TH "nvme_refresh_topology" 9 "nvme_refresh_topology" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_refresh_topology" 9 "nvme_refresh_topology" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_refresh_topology \- Refresh nvme_root_t object contents
.SH SYNOPSIS
diff --git a/doc/man/nvme_register_offsets.2 b/doc/man/nvme_register_offsets.2
index 59ecced..5a1433c 100644
--- a/doc/man/nvme_register_offsets.2
+++ b/doc/man/nvme_register_offsets.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_register_offsets" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_register_offsets" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_register_offsets \- controller registers for all transports. This is the layout of BAR0/1 for PCIe, and properties for fabrics.
.SH SYNOPSIS
diff --git a/doc/man/nvme_registered_ctrl.2 b/doc/man/nvme_registered_ctrl.2
index 4fa8bd9..a280930 100644
--- a/doc/man/nvme_registered_ctrl.2
+++ b/doc/man/nvme_registered_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_registered_ctrl" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_registered_ctrl" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_registered_ctrl \- Registered Controller Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_registered_ctrl_ext.2 b/doc/man/nvme_registered_ctrl_ext.2
index bb914a7..b0fd288 100644
--- a/doc/man/nvme_registered_ctrl_ext.2
+++ b/doc/man/nvme_registered_ctrl_ext.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_registered_ctrl_ext" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_registered_ctrl_ext" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_registered_ctrl_ext \- Registered Controller Extended Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_rescan_ctrl.2 b/doc/man/nvme_rescan_ctrl.2
index 20a3dcb..174c495 100644
--- a/doc/man/nvme_rescan_ctrl.2
+++ b/doc/man/nvme_rescan_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_rescan_ctrl" 9 "nvme_rescan_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_rescan_ctrl" 9 "nvme_rescan_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_rescan_ctrl \- Rescan an existing controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_acquire.2 b/doc/man/nvme_resv_acquire.2
index 1f02434..3f5bb3c 100644
--- a/doc/man/nvme_resv_acquire.2
+++ b/doc/man/nvme_resv_acquire.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_acquire" 9 "nvme_resv_acquire" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_acquire" 9 "nvme_resv_acquire" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_acquire \- Send an nvme reservation acquire
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_cptpl.2 b/doc/man/nvme_resv_cptpl.2
index 5ee28ab..1779c86 100644
--- a/doc/man/nvme_resv_cptpl.2
+++ b/doc/man/nvme_resv_cptpl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_cptpl" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_cptpl" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_cptpl \- Reservation Register - Change Persist Through Power Loss State
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_notification_log.2 b/doc/man/nvme_resv_notification_log.2
index 4a4bafd..5b4155b 100644
--- a/doc/man/nvme_resv_notification_log.2
+++ b/doc/man/nvme_resv_notification_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_resv_notification_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_resv_notification_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_resv_notification_log \- Reservation Notification Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_notify_rnlpt.2 b/doc/man/nvme_resv_notify_rnlpt.2
index 603f9d7..d1d8d38 100644
--- a/doc/man/nvme_resv_notify_rnlpt.2
+++ b/doc/man/nvme_resv_notify_rnlpt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_notify_rnlpt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_notify_rnlpt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_notify_rnlpt \- Reservation Notification Log - Reservation Notification Log Page Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_racqa.2 b/doc/man/nvme_resv_racqa.2
index ea194d8..90b50ce 100644
--- a/doc/man/nvme_resv_racqa.2
+++ b/doc/man/nvme_resv_racqa.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_racqa" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_racqa" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_racqa \- Reservation Acquire - Reservation Acquire Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_register.2 b/doc/man/nvme_resv_register.2
index df6bbc6..b295ea1 100644
--- a/doc/man/nvme_resv_register.2
+++ b/doc/man/nvme_resv_register.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_register" 9 "nvme_resv_register" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_register" 9 "nvme_resv_register" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_register \- Send an nvme reservation register
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_release.2 b/doc/man/nvme_resv_release.2
index 561ef9e..b8e1101 100644
--- a/doc/man/nvme_resv_release.2
+++ b/doc/man/nvme_resv_release.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_release" 9 "nvme_resv_release" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_release" 9 "nvme_resv_release" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_release \- Send an nvme reservation release
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_report.2 b/doc/man/nvme_resv_report.2
index d5296d4..e7ce5c0 100644
--- a/doc/man/nvme_resv_report.2
+++ b/doc/man/nvme_resv_report.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_report" 9 "nvme_resv_report" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_report" 9 "nvme_resv_report" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_report \- Send an nvme reservation report
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_rrega.2 b/doc/man/nvme_resv_rrega.2
index c5a579d..f9df05b 100644
--- a/doc/man/nvme_resv_rrega.2
+++ b/doc/man/nvme_resv_rrega.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_rrega" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_rrega" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_rrega \- Reservation Register - Reservation Register Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_rrela.2 b/doc/man/nvme_resv_rrela.2
index f6ba7bf..e801971 100644
--- a/doc/man/nvme_resv_rrela.2
+++ b/doc/man/nvme_resv_rrela.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_rrela" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_rrela" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_rrela \- Reservation Release - Reservation Release Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_rtype.2 b/doc/man/nvme_resv_rtype.2
index 0632fd0..ca81cd1 100644
--- a/doc/man/nvme_resv_rtype.2
+++ b/doc/man/nvme_resv_rtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_rtype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_rtype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_rtype \- Reservation Type Encoding
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_status.2 b/doc/man/nvme_resv_status.2
index 4232634..aceed27 100644
--- a/doc/man/nvme_resv_status.2
+++ b/doc/man/nvme_resv_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_resv_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_resv_status" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_resv_status \- Reservation Status Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_revoke_tls_key.2 b/doc/man/nvme_revoke_tls_key.2
index 56dde5f..db4de4c 100644
--- a/doc/man/nvme_revoke_tls_key.2
+++ b/doc/man/nvme_revoke_tls_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_revoke_tls_key" 9 "nvme_revoke_tls_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_revoke_tls_key" 9 "nvme_revoke_tls_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_revoke_tls_key \- Revoke TLS key from keyring
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_compln_event.2 b/doc/man/nvme_sanitize_compln_event.2
index 9229961..5a0dabc 100644
--- a/doc/man/nvme_sanitize_compln_event.2
+++ b/doc/man/nvme_sanitize_compln_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_sanitize_compln_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_sanitize_compln_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_sanitize_compln_event \- Sanitize Completion Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_log_page.2 b/doc/man/nvme_sanitize_log_page.2
index 6002610..80fa0ce 100644
--- a/doc/man/nvme_sanitize_log_page.2
+++ b/doc/man/nvme_sanitize_log_page.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_sanitize_log_page" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_sanitize_log_page" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_sanitize_log_page \- Sanitize Status (Log Identifier 81h)
.SH SYNOPSIS
@@ -22,7 +22,11 @@ struct nvme_sanitize_log_page {
.br
.BI " __le32 etcend;"
.br
-.BI " __u8 rsvd32[480];"
+.BI " __le32 etpvds;"
+.br
+.BI " __u8 ssi;"
+.br
+.BI " __u8 rsvd37[475];"
.br
.BI "
};
@@ -102,5 +106,15 @@ A value of 0h indicates that the sanitize operation is expected
to be completed in the background when the Sanitize command that
started that operation is completed. A value of FFFFFFFFh indicates
that no time period is reported.
-.IP "rsvd32" 12
+.IP "etpvds" 12
+Estimated Time For Post-Verification Deallocation State: indicates the
+number of seconds required to deallocate all media allocated for user data
+after exiting the Media Verification state (i.e., the time difference between
+entering and exiting the Post-Verification Deallocation state), if that state
+is entered as part of the sanitize operation. A value of FFFFFFFFh indicates
+that no time period is reported.
+.IP "ssi" 12
+Sanitize State Information: indicate the state of the Sanitize Operation
+State Machine.
+.IP "rsvd37" 12
Reserved
diff --git a/doc/man/nvme_sanitize_nvm.2 b/doc/man/nvme_sanitize_nvm.2
index 155dac0..93e0817 100644
--- a/doc/man/nvme_sanitize_nvm.2
+++ b/doc/man/nvme_sanitize_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_sanitize_nvm" 9 "nvme_sanitize_nvm" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_sanitize_nvm" 9 "nvme_sanitize_nvm" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_sanitize_nvm \- Start a sanitize operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_sanact.2 b/doc/man/nvme_sanitize_sanact.2
index 806410e..15ae3d8 100644
--- a/doc/man/nvme_sanitize_sanact.2
+++ b/doc/man/nvme_sanitize_sanact.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_sanitize_sanact" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_sanitize_sanact" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_sanitize_sanact \- Sanitize Action
.SH SYNOPSIS
@@ -17,6 +17,10 @@ enum nvme_sanitize_sanact {
.br
.br
.BI " NVME_SANITIZE_SANACT_START_CRYPTO_ERASE"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SANACT_EXIT_MEDIA_VERIF"
};
.SH Constants
@@ -28,3 +32,5 @@ Start a Block Erase sanitize operation.
Start an Overwrite sanitize operation.
.IP "NVME_SANITIZE_SANACT_START_CRYPTO_ERASE" 12
Start a Crypto Erase sanitize operation.
+.IP "NVME_SANITIZE_SANACT_EXIT_MEDIA_VERIF" 12
+Exit Media Verification State
diff --git a/doc/man/nvme_sanitize_ssi.2 b/doc/man/nvme_sanitize_ssi.2
new file mode 100644
index 0000000..8117d7f
--- /dev/null
+++ b/doc/man/nvme_sanitize_ssi.2
@@ -0,0 +1,95 @@
+.TH "libnvme" 9 "enum nvme_sanitize_ssi" "October 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_sanitize_ssi \- Sanitize State Information (SSI)
+.SH SYNOPSIS
+enum nvme_sanitize_ssi {
+.br
+.BI " NVME_SANITIZE_SSI_SANS_SHIFT"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_SANS_MASK"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_FAILS_SHIFT"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_FAILS_MASK"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_IDLE"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_RESTRICT_PROCESSING"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_RESTRICT_FAILURE"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_UNRESTRICT_PROCESSING"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_UNRESTRICT_FAILURE"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_MEDIA_VERIFICATION"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSI_POST_VERIF_DEALLOC"
+
+};
+.SH Constants
+.IP "NVME_SANITIZE_SSI_SANS_SHIFT" 12
+Shift amount to get the value of Sanitize State
+from Sanitize State Information (SSI) field.
+.IP "NVME_SANITIZE_SSI_SANS_MASK" 12
+Mask to get the value of Sanitize State from
+Sanitize State Information (SSI) field.
+.IP "NVME_SANITIZE_SSI_FAILS_SHIFT" 12
+Shift amount to get the value of Failure State
+from Sanitize State Information (SSI) field.
+.IP "NVME_SANITIZE_SSI_FAILS_MASK" 12
+Mask to get the value of Failure State from
+Sanitize State Information (SSI) field.
+.IP "NVME_SANITIZE_SSI_IDLE" 12
+No sanitize operation is in process.
+.IP "NVME_SANITIZE_SSI_RESTRICT_PROCESSING" 12
+The Sanitize operation is in Restricted Processing
+State.
+.IP "NVME_SANITIZE_SSI_RESTRICT_FAILURE" 12
+The Sanitize operation is in Restricted Failure
+State. This state is entered if sanitize processing
+was performed in the Restricted Processing state and
+sanitize processing failed or a failure occurred
+during deallocation of media allocated for user data
+in the Post-Verification Deallocation state.
+.IP "NVME_SANITIZE_SSI_UNRESTRICT_PROCESSING" 12
+The Sanitize operation is in Unrestricted Processing
+State.
+.IP "NVME_SANITIZE_SSI_UNRESTRICT_FAILURE" 12
+The Sanitize operation is in Unrestricted Failure
+State. This state is entered if sanitize processing
+was performed in the Unrestricted Processing state
+and sanitize processing failed or a failure occurred
+during deallocation of media allocated for user data
+in the Post-Verification.
+.IP "NVME_SANITIZE_SSI_MEDIA_VERIFICATION" 12
+The Sanitize operation is in Media Verification
+State. In this state, the sanitize processing
+completed successfully, and all media allocated for
+user data in the sanitization target is readable by
+the host for purposes of verifying sanitization.
+.IP "NVME_SANITIZE_SSI_POST_VERIF_DEALLOC" 12
+The Sanitize operation is in Post-Verification
+Deallocation State. In this state, the controller
+shall deallocate all media allocated for user data
+in the sanitization target.
diff --git a/doc/man/nvme_sanitize_sstat.2 b/doc/man/nvme_sanitize_sstat.2
index 662d175..b2599d6 100644
--- a/doc/man/nvme_sanitize_sstat.2
+++ b/doc/man/nvme_sanitize_sstat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_sanitize_sstat" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_sanitize_sstat" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_sanitize_sstat \- Sanitize Status (SSTAT)
.SH SYNOPSIS
@@ -49,6 +49,14 @@ enum nvme_sanitize_sstat {
.br
.br
.BI " NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSTAT_MVCNCLD_SHIFT"
+,
+.br
+.br
+.BI " NVME_SANITIZE_SSTAT_MVCNCLD_MASK"
};
.SH Constants
@@ -103,3 +111,9 @@ been enabled since being manufactured and
the NVM subsystem has never been sanitized;
or since the most recent successful sanitize
operation.
+.IP "NVME_SANITIZE_SSTAT_MVCNCLD_SHIFT" 12
+Shift amount to get the value of Media Verification
+Canceled bit of Sanitize status field.
+.IP "NVME_SANITIZE_SSTAT_MVCNCLD_MASK" 12
+Mask to get the value of Media Verification Canceled
+bit of Sanitize status field.
diff --git a/doc/man/nvme_sanitize_start_event.2 b/doc/man/nvme_sanitize_start_event.2
index 8ed8c89..32b25e9 100644
--- a/doc/man/nvme_sanitize_start_event.2
+++ b/doc/man/nvme_sanitize_start_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_sanitize_start_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_sanitize_start_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_sanitize_start_event \- Sanitize Start Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan.2 b/doc/man/nvme_scan.2
index f897412..f29cc4b 100644
--- a/doc/man/nvme_scan.2
+++ b/doc/man/nvme_scan.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan" 9 "nvme_scan" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan" 9 "nvme_scan" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan \- Scan NVMe topology
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrl.2 b/doc/man/nvme_scan_ctrl.2
index 34a0967..50298ed 100644
--- a/doc/man/nvme_scan_ctrl.2
+++ b/doc/man/nvme_scan_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrl" 9 "nvme_scan_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrl" 9 "nvme_scan_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrl \- Scan on a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrl_namespace_paths.2 b/doc/man/nvme_scan_ctrl_namespace_paths.2
index 2c7792b..b9b2e89 100644
--- a/doc/man/nvme_scan_ctrl_namespace_paths.2
+++ b/doc/man/nvme_scan_ctrl_namespace_paths.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrl_namespace_paths" 9 "nvme_scan_ctrl_namespace_paths" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrl_namespace_paths" 9 "nvme_scan_ctrl_namespace_paths" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrl_namespace_paths \- Scan for namespace paths in a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrl_namespaces.2 b/doc/man/nvme_scan_ctrl_namespaces.2
index 39240a2..d19e2f9 100644
--- a/doc/man/nvme_scan_ctrl_namespaces.2
+++ b/doc/man/nvme_scan_ctrl_namespaces.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrl_namespaces" 9 "nvme_scan_ctrl_namespaces" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrl_namespaces" 9 "nvme_scan_ctrl_namespaces" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrl_namespaces \- Scan for namespaces in a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrls.2 b/doc/man/nvme_scan_ctrls.2
index 0a3570c..070ae57 100644
--- a/doc/man/nvme_scan_ctrls.2
+++ b/doc/man/nvme_scan_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrls" 9 "nvme_scan_ctrls" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrls" 9 "nvme_scan_ctrls" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrls \- Scan for controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_namespace.2 b/doc/man/nvme_scan_namespace.2
index 0d040a9..3c19133 100644
--- a/doc/man/nvme_scan_namespace.2
+++ b/doc/man/nvme_scan_namespace.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_namespace" 9 "nvme_scan_namespace" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_namespace" 9 "nvme_scan_namespace" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_namespace \- scan namespace based on sysfs name
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_subsystem_namespaces.2 b/doc/man/nvme_scan_subsystem_namespaces.2
index a177a0e..ff418c4 100644
--- a/doc/man/nvme_scan_subsystem_namespaces.2
+++ b/doc/man/nvme_scan_subsystem_namespaces.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_subsystem_namespaces" 9 "nvme_scan_subsystem_namespaces" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_subsystem_namespaces" 9 "nvme_scan_subsystem_namespaces" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_subsystem_namespaces \- Scan for namespaces in a subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_subsystems.2 b/doc/man/nvme_scan_subsystems.2
index b40eb1e..f7f57ff 100644
--- a/doc/man/nvme_scan_subsystems.2
+++ b/doc/man/nvme_scan_subsystems.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_subsystems" 9 "nvme_scan_subsystems" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_subsystems" 9 "nvme_scan_subsystems" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_subsystems \- Scan for subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_tls_keys.2 b/doc/man/nvme_scan_tls_keys.2
index 69ee15e..2c48542 100644
--- a/doc/man/nvme_scan_tls_keys.2
+++ b/doc/man/nvme_scan_tls_keys.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_tls_keys" 9 "nvme_scan_tls_keys" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_tls_keys" 9 "nvme_scan_tls_keys" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_tls_keys \- Iterate over TLS keys in a keyring
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_topology.2 b/doc/man/nvme_scan_topology.2
index 6eed008..b679d5b 100644
--- a/doc/man/nvme_scan_topology.2
+++ b/doc/man/nvme_scan_topology.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_topology" 9 "nvme_scan_topology" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_topology" 9 "nvme_scan_topology" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_topology \- Scan NVMe topology and apply filter
.SH SYNOPSIS
diff --git a/doc/man/nvme_secondary_ctrl.2 b/doc/man/nvme_secondary_ctrl.2
index d2e19f6..f6976f1 100644
--- a/doc/man/nvme_secondary_ctrl.2
+++ b/doc/man/nvme_secondary_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_secondary_ctrl" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_secondary_ctrl" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_secondary_ctrl \- Secondary Controller Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_secondary_ctrl_list.2 b/doc/man/nvme_secondary_ctrl_list.2
index 73e1402..f4fd161 100644
--- a/doc/man/nvme_secondary_ctrl_list.2
+++ b/doc/man/nvme_secondary_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_secondary_ctrl_list" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_secondary_ctrl_list" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_secondary_ctrl_list \- Secondary Controller List
.SH SYNOPSIS
diff --git a/doc/man/nvme_security_receive.2 b/doc/man/nvme_security_receive.2
index 26f2782..c9603c1 100644
--- a/doc/man/nvme_security_receive.2
+++ b/doc/man/nvme_security_receive.2
@@ -1,4 +1,4 @@
-.TH "nvme_security_receive" 9 "nvme_security_receive" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_security_receive" 9 "nvme_security_receive" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_security_receive \- Security Receive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_security_send.2 b/doc/man/nvme_security_send.2
index e4fc0eb..b2b66d6 100644
--- a/doc/man/nvme_security_send.2
+++ b/doc/man/nvme_security_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_security_send" 9 "nvme_security_send" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_security_send" 9 "nvme_security_send" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_security_send \- Security Send command
.SH SYNOPSIS
diff --git a/doc/man/nvme_self_test_log.2 b/doc/man/nvme_self_test_log.2
index c07c2b5..de3f5b4 100644
--- a/doc/man/nvme_self_test_log.2
+++ b/doc/man/nvme_self_test_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_self_test_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_self_test_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_self_test_log \- Device Self-test (Log Identifier 06h)
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_feat_event_layout.2 b/doc/man/nvme_set_feat_event_layout.2
index 5781071..88ff849 100644
--- a/doc/man/nvme_set_feat_event_layout.2
+++ b/doc/man/nvme_set_feat_event_layout.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_set_feat_event_layout" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_set_feat_event_layout" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_set_feat_event_layout \- This field indicates the set feature event layout
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_feature_event.2 b/doc/man/nvme_set_feature_event.2
index 817f90b..b9b906d 100644
--- a/doc/man/nvme_set_feature_event.2
+++ b/doc/man/nvme_set_feature_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_set_feature_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_set_feature_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_set_feature_event \- Set Feature Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features.2 b/doc/man/nvme_set_features.2
index 0adb1b8..0349c90 100644
--- a/doc/man/nvme_set_features.2
+++ b/doc/man/nvme_set_features.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features" 9 "nvme_set_features" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features" 9 "nvme_set_features" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features \- Set a feature attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_arbitration.2 b/doc/man/nvme_set_features_arbitration.2
index cd60b1d..2a1335e 100644
--- a/doc/man/nvme_set_features_arbitration.2
+++ b/doc/man/nvme_set_features_arbitration.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_arbitration" 9 "nvme_set_features_arbitration" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_arbitration" 9 "nvme_set_features_arbitration" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_arbitration \- Set arbitration features
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_async_event.2 b/doc/man/nvme_set_features_async_event.2
index cf66570..63756a3 100644
--- a/doc/man/nvme_set_features_async_event.2
+++ b/doc/man/nvme_set_features_async_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_async_event" 9 "nvme_set_features_async_event" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_async_event" 9 "nvme_set_features_async_event" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_async_event \- Set asynchronous event feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_auto_pst.2 b/doc/man/nvme_set_features_auto_pst.2
index b43b090..7f52664 100644
--- a/doc/man/nvme_set_features_auto_pst.2
+++ b/doc/man/nvme_set_features_auto_pst.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_auto_pst" 9 "nvme_set_features_auto_pst" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_auto_pst" 9 "nvme_set_features_auto_pst" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_auto_pst \- Set autonomous power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_data.2 b/doc/man/nvme_set_features_data.2
index 3eceac7..f385a28 100644
--- a/doc/man/nvme_set_features_data.2
+++ b/doc/man/nvme_set_features_data.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_data" 9 "nvme_set_features_data" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_data" 9 "nvme_set_features_data" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_data \- Helper function for @nvme_set_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_endurance_evt_cfg.2 b/doc/man/nvme_set_features_endurance_evt_cfg.2
index 8cf7a7e..4c00317 100644
--- a/doc/man/nvme_set_features_endurance_evt_cfg.2
+++ b/doc/man/nvme_set_features_endurance_evt_cfg.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_endurance_evt_cfg" 9 "nvme_set_features_endurance_evt_cfg" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_endurance_evt_cfg" 9 "nvme_set_features_endurance_evt_cfg" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_endurance_evt_cfg \- Set endurance event config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_err_recovery.2 b/doc/man/nvme_set_features_err_recovery.2
index d0917b6..f231ccc 100644
--- a/doc/man/nvme_set_features_err_recovery.2
+++ b/doc/man/nvme_set_features_err_recovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_err_recovery" 9 "nvme_set_features_err_recovery" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_err_recovery" 9 "nvme_set_features_err_recovery" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_err_recovery \- Set error recovery feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_hctm.2 b/doc/man/nvme_set_features_hctm.2
index cd84acc..aea0c0e 100644
--- a/doc/man/nvme_set_features_hctm.2
+++ b/doc/man/nvme_set_features_hctm.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_hctm" 9 "nvme_set_features_hctm" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_hctm" 9 "nvme_set_features_hctm" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_hctm \- Set thermal management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_host_behavior.2 b/doc/man/nvme_set_features_host_behavior.2
index 027ab93..1e6abad 100644
--- a/doc/man/nvme_set_features_host_behavior.2
+++ b/doc/man/nvme_set_features_host_behavior.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_host_behavior" 9 "nvme_set_features_host_behavior" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_host_behavior" 9 "nvme_set_features_host_behavior" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_host_behavior \- Set host behavior feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_host_id.2 b/doc/man/nvme_set_features_host_id.2
index b5dec9c..553fd87 100644
--- a/doc/man/nvme_set_features_host_id.2
+++ b/doc/man/nvme_set_features_host_id.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_host_id" 9 "nvme_set_features_host_id" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_host_id" 9 "nvme_set_features_host_id" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_host_id \- Set enable extended host identifiers feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_iocs_profile.2 b/doc/man/nvme_set_features_iocs_profile.2
index 1cf6084..ee4e91a 100644
--- a/doc/man/nvme_set_features_iocs_profile.2
+++ b/doc/man/nvme_set_features_iocs_profile.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_iocs_profile" 9 "nvme_set_features_iocs_profile" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_iocs_profile" 9 "nvme_set_features_iocs_profile" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_iocs_profile \- Set I/O command set profile feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_irq_coalesce.2 b/doc/man/nvme_set_features_irq_coalesce.2
index b57fc98..d628f7d 100644
--- a/doc/man/nvme_set_features_irq_coalesce.2
+++ b/doc/man/nvme_set_features_irq_coalesce.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_irq_coalesce" 9 "nvme_set_features_irq_coalesce" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_irq_coalesce" 9 "nvme_set_features_irq_coalesce" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_irq_coalesce \- Set IRQ coalesce feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_irq_config.2 b/doc/man/nvme_set_features_irq_config.2
index 9f40e99..6ce815e 100644
--- a/doc/man/nvme_set_features_irq_config.2
+++ b/doc/man/nvme_set_features_irq_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_irq_config" 9 "nvme_set_features_irq_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_irq_config" 9 "nvme_set_features_irq_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_irq_config \- Set IRQ config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_lba_range.2 b/doc/man/nvme_set_features_lba_range.2
index 9101e4c..f558390 100644
--- a/doc/man/nvme_set_features_lba_range.2
+++ b/doc/man/nvme_set_features_lba_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_lba_range" 9 "nvme_set_features_lba_range" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_lba_range" 9 "nvme_set_features_lba_range" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_lba_range \- Set LBA range feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_lba_sts_interval.2 b/doc/man/nvme_set_features_lba_sts_interval.2
index dd0f902..19682d1 100644
--- a/doc/man/nvme_set_features_lba_sts_interval.2
+++ b/doc/man/nvme_set_features_lba_sts_interval.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_lba_sts_interval" 9 "nvme_set_features_lba_sts_interval" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_lba_sts_interval" 9 "nvme_set_features_lba_sts_interval" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_lba_sts_interval \- Set LBA status information feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_nopsc.2 b/doc/man/nvme_set_features_nopsc.2
index 9796ec8..b3772d0 100644
--- a/doc/man/nvme_set_features_nopsc.2
+++ b/doc/man/nvme_set_features_nopsc.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_nopsc" 9 "nvme_set_features_nopsc" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_nopsc" 9 "nvme_set_features_nopsc" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_nopsc \- Set non-operational power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_plm_config.2 b/doc/man/nvme_set_features_plm_config.2
index f30890e..aab238c 100644
--- a/doc/man/nvme_set_features_plm_config.2
+++ b/doc/man/nvme_set_features_plm_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_plm_config" 9 "nvme_set_features_plm_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_plm_config" 9 "nvme_set_features_plm_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_plm_config \- Set predictable latency feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_plm_window.2 b/doc/man/nvme_set_features_plm_window.2
index 7770c22..648a2d0 100644
--- a/doc/man/nvme_set_features_plm_window.2
+++ b/doc/man/nvme_set_features_plm_window.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_plm_window" 9 "nvme_set_features_plm_window" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_plm_window" 9 "nvme_set_features_plm_window" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_plm_window \- Set window select feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_power_mgmt.2 b/doc/man/nvme_set_features_power_mgmt.2
index 69ea4f9..8593b8c 100644
--- a/doc/man/nvme_set_features_power_mgmt.2
+++ b/doc/man/nvme_set_features_power_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_power_mgmt" 9 "nvme_set_features_power_mgmt" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_power_mgmt" 9 "nvme_set_features_power_mgmt" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_power_mgmt \- Set power management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_mask.2 b/doc/man/nvme_set_features_resv_mask.2
index 78fdd27..9295601 100644
--- a/doc/man/nvme_set_features_resv_mask.2
+++ b/doc/man/nvme_set_features_resv_mask.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_mask" 9 "nvme_set_features_resv_mask" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_mask" 9 "nvme_set_features_resv_mask" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_mask \- Set reservation notification mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_mask2.2 b/doc/man/nvme_set_features_resv_mask2.2
index 2c1cecf..3238c72 100644
--- a/doc/man/nvme_set_features_resv_mask2.2
+++ b/doc/man/nvme_set_features_resv_mask2.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_mask2" 9 "nvme_set_features_resv_mask2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_mask2" 9 "nvme_set_features_resv_mask2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_mask2 \- Set reservation notification mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_persist.2 b/doc/man/nvme_set_features_resv_persist.2
index 4b73dee..09faf82 100644
--- a/doc/man/nvme_set_features_resv_persist.2
+++ b/doc/man/nvme_set_features_resv_persist.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_persist" 9 "nvme_set_features_resv_persist" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_persist" 9 "nvme_set_features_resv_persist" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_persist \- Set persist through power loss feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_persist2.2 b/doc/man/nvme_set_features_resv_persist2.2
index b02f82d..29e3a34 100644
--- a/doc/man/nvme_set_features_resv_persist2.2
+++ b/doc/man/nvme_set_features_resv_persist2.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_persist2" 9 "nvme_set_features_resv_persist2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_persist2" 9 "nvme_set_features_resv_persist2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_persist2 \- Set persist through power loss feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_rrl.2 b/doc/man/nvme_set_features_rrl.2
index c4f0318..147c62b 100644
--- a/doc/man/nvme_set_features_rrl.2
+++ b/doc/man/nvme_set_features_rrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_rrl" 9 "nvme_set_features_rrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_rrl" 9 "nvme_set_features_rrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_rrl \- Set read recovery level feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_sanitize.2 b/doc/man/nvme_set_features_sanitize.2
index 1b138e8..3fd24be 100644
--- a/doc/man/nvme_set_features_sanitize.2
+++ b/doc/man/nvme_set_features_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_sanitize" 9 "nvme_set_features_sanitize" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_sanitize" 9 "nvme_set_features_sanitize" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_sanitize \- Set sanitize feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_simple.2 b/doc/man/nvme_set_features_simple.2
index 4ba9d4b..5e7ba27 100644
--- a/doc/man/nvme_set_features_simple.2
+++ b/doc/man/nvme_set_features_simple.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_simple" 9 "nvme_set_features_simple" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_simple" 9 "nvme_set_features_simple" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_simple \- Helper function for @nvme_set_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_sw_progress.2 b/doc/man/nvme_set_features_sw_progress.2
index 5a4628f..c638e79 100644
--- a/doc/man/nvme_set_features_sw_progress.2
+++ b/doc/man/nvme_set_features_sw_progress.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_sw_progress" 9 "nvme_set_features_sw_progress" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_sw_progress" 9 "nvme_set_features_sw_progress" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_sw_progress \- Set pre-boot software load count feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_temp_thresh.2 b/doc/man/nvme_set_features_temp_thresh.2
index 8220084..c46b460 100644
--- a/doc/man/nvme_set_features_temp_thresh.2
+++ b/doc/man/nvme_set_features_temp_thresh.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_temp_thresh" 9 "nvme_set_features_temp_thresh" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_temp_thresh" 9 "nvme_set_features_temp_thresh" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_temp_thresh \- Set temperature threshold feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_timestamp.2 b/doc/man/nvme_set_features_timestamp.2
index 2b2ccae..66b4e2a 100644
--- a/doc/man/nvme_set_features_timestamp.2
+++ b/doc/man/nvme_set_features_timestamp.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_timestamp" 9 "nvme_set_features_timestamp" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_timestamp" 9 "nvme_set_features_timestamp" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_timestamp \- Set timestamp feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_volatile_wc.2 b/doc/man/nvme_set_features_volatile_wc.2
index 4ed14ef..f579498 100644
--- a/doc/man/nvme_set_features_volatile_wc.2
+++ b/doc/man/nvme_set_features_volatile_wc.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_volatile_wc" 9 "nvme_set_features_volatile_wc" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_volatile_wc" 9 "nvme_set_features_volatile_wc" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_volatile_wc \- Set volatile write cache feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_write_atomic.2 b/doc/man/nvme_set_features_write_atomic.2
index 1233bc1..791641f 100644
--- a/doc/man/nvme_set_features_write_atomic.2
+++ b/doc/man/nvme_set_features_write_atomic.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_write_atomic" 9 "nvme_set_features_write_atomic" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_write_atomic" 9 "nvme_set_features_write_atomic" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_write_atomic \- Set write atomic feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_write_protect.2 b/doc/man/nvme_set_features_write_protect.2
index 22f59d6..2f396c6 100644
--- a/doc/man/nvme_set_features_write_protect.2
+++ b/doc/man/nvme_set_features_write_protect.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_write_protect" 9 "nvme_set_features_write_protect" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_write_protect" 9 "nvme_set_features_write_protect" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_write_protect \- Set write protect feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_write_protect2.2 b/doc/man/nvme_set_features_write_protect2.2
index ba2ef2e..703e221 100644
--- a/doc/man/nvme_set_features_write_protect2.2
+++ b/doc/man/nvme_set_features_write_protect2.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_write_protect2" 9 "nvme_set_features_write_protect2" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_write_protect2" 9 "nvme_set_features_write_protect2" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_write_protect2 \- Set write protect feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_keyring.2 b/doc/man/nvme_set_keyring.2
index 0161605..d329ca6 100644
--- a/doc/man/nvme_set_keyring.2
+++ b/doc/man/nvme_set_keyring.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_keyring" 9 "nvme_set_keyring" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_keyring" 9 "nvme_set_keyring" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_keyring \- Link keyring for lookup
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_property.2 b/doc/man/nvme_set_property.2
index 51d2240..811c2c9 100644
--- a/doc/man/nvme_set_property.2
+++ b/doc/man/nvme_set_property.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_property" 9 "nvme_set_property" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_property" 9 "nvme_set_property" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_property \- Set controller property
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_root.2 b/doc/man/nvme_set_root.2
index c03de4a..a334eb3 100644
--- a/doc/man/nvme_set_root.2
+++ b/doc/man/nvme_set_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_root" 9 "nvme_set_root" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_set_root" 9 "nvme_set_root" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_root \- Set nvme_root_t context
.SH SYNOPSIS
diff --git a/doc/man/nvme_smart_crit.2 b/doc/man/nvme_smart_crit.2
index 2dee75a..f7ee31b 100644
--- a/doc/man/nvme_smart_crit.2
+++ b/doc/man/nvme_smart_crit.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_smart_crit" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_smart_crit" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_smart_crit \- Critical Warning
.SH SYNOPSIS
diff --git a/doc/man/nvme_smart_egcw.2 b/doc/man/nvme_smart_egcw.2
index bbb666b..7ce26e1 100644
--- a/doc/man/nvme_smart_egcw.2
+++ b/doc/man/nvme_smart_egcw.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_smart_egcw" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_smart_egcw" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_smart_egcw \- Endurance Group Critical Warning Summary
.SH SYNOPSIS
diff --git a/doc/man/nvme_smart_log.2 b/doc/man/nvme_smart_log.2
index d19627f..bcb2e26 100644
--- a/doc/man/nvme_smart_log.2
+++ b/doc/man/nvme_smart_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_smart_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_smart_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_smart_log \- SMART / Health Information Log (Log Identifier 02h)
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_code.2 b/doc/man/nvme_st_code.2
index 6d594c6..2cb7da8 100644
--- a/doc/man/nvme_st_code.2
+++ b/doc/man/nvme_st_code.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_st_code" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_st_code" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_st_code \- Self-test Code value
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_curr_op.2 b/doc/man/nvme_st_curr_op.2
index 160f9c3..ff5aae2 100644
--- a/doc/man/nvme_st_curr_op.2
+++ b/doc/man/nvme_st_curr_op.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_st_curr_op" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_st_curr_op" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_st_curr_op \- Current Device Self-Test Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_result.2 b/doc/man/nvme_st_result.2
index 52d2630..c9669f8 100644
--- a/doc/man/nvme_st_result.2
+++ b/doc/man/nvme_st_result.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_st_result" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_st_result" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_st_result \- Self-test Result
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_valid_diag_info.2 b/doc/man/nvme_st_valid_diag_info.2
index 77b9dc3..b240b9b 100644
--- a/doc/man/nvme_st_valid_diag_info.2
+++ b/doc/man/nvme_st_valid_diag_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_st_valid_diag_info" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_st_valid_diag_info" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_st_valid_diag_info \- Valid Diagnostic Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_code.2 b/doc/man/nvme_status_code.2
index 4067f97..1e2ed7c 100644
--- a/doc/man/nvme_status_code.2
+++ b/doc/man/nvme_status_code.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_code" 9 "nvme_status_code" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_status_code" 9 "nvme_status_code" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_code \- Returns the NVMe Status Code
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_code_type.2 b/doc/man/nvme_status_code_type.2
index 5e71cff..1639d87 100644
--- a/doc/man/nvme_status_code_type.2
+++ b/doc/man/nvme_status_code_type.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_code_type" 9 "nvme_status_code_type" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_status_code_type" 9 "nvme_status_code_type" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_code_type \- Returns the NVMe Status Code Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_equals.2 b/doc/man/nvme_status_equals.2
index d58bd08..08bcb5a 100644
--- a/doc/man/nvme_status_equals.2
+++ b/doc/man/nvme_status_equals.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_equals" 9 "nvme_status_equals" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_status_equals" 9 "nvme_status_equals" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_equals \- helper to check a status against a type and value
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_field.2 b/doc/man/nvme_status_field.2
index 827664e..327b131 100644
--- a/doc/man/nvme_status_field.2
+++ b/doc/man/nvme_status_field.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_status_field" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_status_field" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_status_field \- Defines all parts of the nvme status field: status code, status code type, and additional flags.
.SH SYNOPSIS
@@ -416,6 +416,26 @@ enum nvme_status_field {
,
.br
.br
+.BI " NVME_SC_INVALID_CONTROLER_DATA_QUEUE"
+,
+.br
+.br
+.BI " NVME_SC_NOT_ENOUGH_RESOURCES"
+,
+.br
+.br
+.BI " NVME_SC_CONTROLLER_SUSPENDED"
+,
+.br
+.br
+.BI " NVME_SC_CONTROLLER_NOT_SUSPENDED"
+,
+.br
+.br
+.BI " NVME_SC_CONTROLLER_DATA_QUEUE_FULL"
+,
+.br
+.br
.BI " NVME_SC_BAD_ATTRIBUTES"
,
.br
@@ -1035,6 +1055,25 @@ The NQN contained in the ZoneGroup
Originator field does not match the
Host NQN used by the DDC to connect
to the CDC.
+.IP "NVME_SC_INVALID_CONTROLER_DATA_QUEUE" 12
+This error indicates that the
+specified Controller Data Queue
+Identifier is invalid for the controller
+processing the command.
+.IP "NVME_SC_NOT_ENOUGH_RESOURCES" 12
+This error indicates that there is not
+enough resources in the controller to
+process the command.
+.IP "NVME_SC_CONTROLLER_SUSPENDED" 12
+The operation requested is not allowed if
+the specified controller is suspended.
+.IP "NVME_SC_CONTROLLER_NOT_SUSPENDED" 12
+The operation requested is not allowed if
+the specified controller is not
+suspended.
+.IP "NVME_SC_CONTROLLER_DATA_QUEUE_FULL" 12
+The controller detected that a
+Controller Data Queue became full.
.IP "NVME_SC_BAD_ATTRIBUTES" 12
Conflicting Dataset Management Attributes
.IP "NVME_SC_INVALID_PI" 12
diff --git a/doc/man/nvme_status_get_type.2 b/doc/man/nvme_status_get_type.2
index 7b8c55b..70a6c44 100644
--- a/doc/man/nvme_status_get_type.2
+++ b/doc/man/nvme_status_get_type.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_get_type" 9 "nvme_status_get_type" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_status_get_type" 9 "nvme_status_get_type" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_get_type \- extract the type from a nvme_* return value
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_get_value.2 b/doc/man/nvme_status_get_value.2
index 5577113..f216c19 100644
--- a/doc/man/nvme_status_get_value.2
+++ b/doc/man/nvme_status_get_value.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_get_value" 9 "nvme_status_get_value" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_status_get_value" 9 "nvme_status_get_value" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_get_value \- extract the status value from a nvme_* return value
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_result.2 b/doc/man/nvme_status_result.2
index 66fc97c..78e9160 100644
--- a/doc/man/nvme_status_result.2
+++ b/doc/man/nvme_status_result.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_status_result" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_status_result" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_status_result \- Result of the device self-test operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_to_errno.2 b/doc/man/nvme_status_to_errno.2
index e38ee34..35cb451 100644
--- a/doc/man/nvme_status_to_errno.2
+++ b/doc/man/nvme_status_to_errno.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_to_errno" 9 "nvme_status_to_errno" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_status_to_errno" 9 "nvme_status_to_errno" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_to_errno \- Converts nvme return status to errno
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_to_string.2 b/doc/man/nvme_status_to_string.2
index 7895f13..95d76d0 100644
--- a/doc/man/nvme_status_to_string.2
+++ b/doc/man/nvme_status_to_string.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_to_string" 9 "nvme_status_to_string" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_status_to_string" 9 "nvme_status_to_string" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_to_string \- Returns string describing nvme return status.
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_type.2 b/doc/man/nvme_status_type.2
index 5107a0e..5613ea6 100644
--- a/doc/man/nvme_status_type.2
+++ b/doc/man/nvme_status_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_status_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_status_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_status_type \- type encoding for NVMe return values, when represented as an int.
.SH SYNOPSIS
diff --git a/doc/man/nvme_streams_directive_params.2 b/doc/man/nvme_streams_directive_params.2
index 218375a..3ac1e9d 100644
--- a/doc/man/nvme_streams_directive_params.2
+++ b/doc/man/nvme_streams_directive_params.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_streams_directive_params" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_streams_directive_params" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_streams_directive_params \- Streams Directive - Return Parameters Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_streams_directive_status.2 b/doc/man/nvme_streams_directive_status.2
index 5ae90df..b2f18de 100644
--- a/doc/man/nvme_streams_directive_status.2
+++ b/doc/man/nvme_streams_directive_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_streams_directive_status" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_streams_directive_status" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_streams_directive_status \- Streams Directive - Get Status Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_admin_passthru.2 b/doc/man/nvme_submit_admin_passthru.2
index 0511b59..ff5a065 100644
--- a/doc/man/nvme_submit_admin_passthru.2
+++ b/doc/man/nvme_submit_admin_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_admin_passthru" 9 "nvme_submit_admin_passthru" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_admin_passthru" 9 "nvme_submit_admin_passthru" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_admin_passthru \- Submit an nvme passthrough admin command
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_admin_passthru64.2 b/doc/man/nvme_submit_admin_passthru64.2
index 39eec4a..afc1fcb 100644
--- a/doc/man/nvme_submit_admin_passthru64.2
+++ b/doc/man/nvme_submit_admin_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_admin_passthru64" 9 "nvme_submit_admin_passthru64" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_admin_passthru64" 9 "nvme_submit_admin_passthru64" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_admin_passthru64 \- Submit a 64-bit nvme passthrough admin command
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_io_passthru.2 b/doc/man/nvme_submit_io_passthru.2
index 4a2a594..abaa4d2 100644
--- a/doc/man/nvme_submit_io_passthru.2
+++ b/doc/man/nvme_submit_io_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_io_passthru" 9 "nvme_submit_io_passthru" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_io_passthru" 9 "nvme_submit_io_passthru" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_io_passthru \- Submit an nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_io_passthru64.2 b/doc/man/nvme_submit_io_passthru64.2
index 0acb1b9..afb3f99 100644
--- a/doc/man/nvme_submit_io_passthru64.2
+++ b/doc/man/nvme_submit_io_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_io_passthru64" 9 "nvme_submit_io_passthru64" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_io_passthru64" 9 "nvme_submit_io_passthru64" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_io_passthru64 \- Submit a 64-bit nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsys_filter.2 b/doc/man/nvme_subsys_filter.2
index 5464003..fc54c45 100644
--- a/doc/man/nvme_subsys_filter.2
+++ b/doc/man/nvme_subsys_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsys_filter" 9 "nvme_subsys_filter" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsys_filter" 9 "nvme_subsys_filter" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsys_filter \- Filter for subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsys_type.2 b/doc/man/nvme_subsys_type.2
index 41cd5d7..84bdbac 100644
--- a/doc/man/nvme_subsys_type.2
+++ b/doc/man/nvme_subsys_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_subsys_type" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_subsys_type" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_subsys_type \- Type of the NVM subsystem.
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_first_ctrl.2 b/doc/man/nvme_subsystem_first_ctrl.2
index cd280df..7f2d512 100644
--- a/doc/man/nvme_subsystem_first_ctrl.2
+++ b/doc/man/nvme_subsystem_first_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_first_ctrl" 9 "nvme_subsystem_first_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_first_ctrl" 9 "nvme_subsystem_first_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_first_ctrl \- First ctrl iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_first_ns.2 b/doc/man/nvme_subsystem_first_ns.2
index 9028f41..8dc2d80 100644
--- a/doc/man/nvme_subsystem_first_ns.2
+++ b/doc/man/nvme_subsystem_first_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_first_ns" 9 "nvme_subsystem_first_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_first_ns" 9 "nvme_subsystem_first_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_first_ns \- Start namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ctrl.2 b/doc/man/nvme_subsystem_for_each_ctrl.2
index e36a47e..8f3f9af 100644
--- a/doc/man/nvme_subsystem_for_each_ctrl.2
+++ b/doc/man/nvme_subsystem_for_each_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ctrl" 9 "nvme_subsystem_for_each_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ctrl" 9 "nvme_subsystem_for_each_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ctrl \- Traverse controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ctrl_safe.2 b/doc/man/nvme_subsystem_for_each_ctrl_safe.2
index d3916eb..4f1b004 100644
--- a/doc/man/nvme_subsystem_for_each_ctrl_safe.2
+++ b/doc/man/nvme_subsystem_for_each_ctrl_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ctrl_safe" 9 "nvme_subsystem_for_each_ctrl_safe" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ctrl_safe" 9 "nvme_subsystem_for_each_ctrl_safe" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ctrl_safe \- Traverse controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ns.2 b/doc/man/nvme_subsystem_for_each_ns.2
index a0fa707..fc6d174 100644
--- a/doc/man/nvme_subsystem_for_each_ns.2
+++ b/doc/man/nvme_subsystem_for_each_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ns" 9 "nvme_subsystem_for_each_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ns" 9 "nvme_subsystem_for_each_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ns \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ns_safe.2 b/doc/man/nvme_subsystem_for_each_ns_safe.2
index 5d005af..3951698 100644
--- a/doc/man/nvme_subsystem_for_each_ns_safe.2
+++ b/doc/man/nvme_subsystem_for_each_ns_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ns_safe" 9 "nvme_subsystem_for_each_ns_safe" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ns_safe" 9 "nvme_subsystem_for_each_ns_safe" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ns_safe \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_application.2 b/doc/man/nvme_subsystem_get_application.2
index a1ce1bc..2d196bd 100644
--- a/doc/man/nvme_subsystem_get_application.2
+++ b/doc/man/nvme_subsystem_get_application.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_application" 9 "nvme_subsystem_get_application" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_application" 9 "nvme_subsystem_get_application" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_application \- Return the application string
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_host.2 b/doc/man/nvme_subsystem_get_host.2
index 1b4ca02..2528163 100644
--- a/doc/man/nvme_subsystem_get_host.2
+++ b/doc/man/nvme_subsystem_get_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_host" 9 "nvme_subsystem_get_host" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_host" 9 "nvme_subsystem_get_host" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_host \- Returns nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_iopolicy.2 b/doc/man/nvme_subsystem_get_iopolicy.2
index f9624a5..92c1037 100644
--- a/doc/man/nvme_subsystem_get_iopolicy.2
+++ b/doc/man/nvme_subsystem_get_iopolicy.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_iopolicy" 9 "nvme_subsystem_get_iopolicy" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_iopolicy" 9 "nvme_subsystem_get_iopolicy" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_iopolicy \- Return the IO policy of subsytem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_name.2 b/doc/man/nvme_subsystem_get_name.2
index a38aedb..6b38c1c 100644
--- a/doc/man/nvme_subsystem_get_name.2
+++ b/doc/man/nvme_subsystem_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_name" 9 "nvme_subsystem_get_name" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_name" 9 "nvme_subsystem_get_name" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_name \- sysfs name of an nvme_subsystem_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_nqn.2 b/doc/man/nvme_subsystem_get_nqn.2
index 723f313..10d155f 100644
--- a/doc/man/nvme_subsystem_get_nqn.2
+++ b/doc/man/nvme_subsystem_get_nqn.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_nqn" 9 "nvme_subsystem_get_nqn" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_nqn" 9 "nvme_subsystem_get_nqn" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_nqn \- Retrieve NQN from subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_sysfs_dir.2 b/doc/man/nvme_subsystem_get_sysfs_dir.2
index 9b13109..1157d4a 100644
--- a/doc/man/nvme_subsystem_get_sysfs_dir.2
+++ b/doc/man/nvme_subsystem_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_sysfs_dir" 9 "nvme_subsystem_get_sysfs_dir" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_sysfs_dir" 9 "nvme_subsystem_get_sysfs_dir" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_sysfs_dir \- sysfs directory of an nvme_subsystem_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_type.2 b/doc/man/nvme_subsystem_get_type.2
index 4104c3f..f23e6f2 100644
--- a/doc/man/nvme_subsystem_get_type.2
+++ b/doc/man/nvme_subsystem_get_type.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_type" 9 "nvme_subsystem_get_type" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_type" 9 "nvme_subsystem_get_type" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_type \- Returns the type of a subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_lookup_namespace.2 b/doc/man/nvme_subsystem_lookup_namespace.2
index b72632e..cb0915c 100644
--- a/doc/man/nvme_subsystem_lookup_namespace.2
+++ b/doc/man/nvme_subsystem_lookup_namespace.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_lookup_namespace" 9 "nvme_subsystem_lookup_namespace" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_lookup_namespace" 9 "nvme_subsystem_lookup_namespace" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_lookup_namespace \- lookup namespace by NSID
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_next_ctrl.2 b/doc/man/nvme_subsystem_next_ctrl.2
index 5e34cf8..c931bc9 100644
--- a/doc/man/nvme_subsystem_next_ctrl.2
+++ b/doc/man/nvme_subsystem_next_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_next_ctrl" 9 "nvme_subsystem_next_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_next_ctrl" 9 "nvme_subsystem_next_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_next_ctrl \- Next ctrl iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_next_ns.2 b/doc/man/nvme_subsystem_next_ns.2
index 7c16720..fc426cc 100644
--- a/doc/man/nvme_subsystem_next_ns.2
+++ b/doc/man/nvme_subsystem_next_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_next_ns" 9 "nvme_subsystem_next_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_next_ns" 9 "nvme_subsystem_next_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_next_ns \- Next namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_release_fds.2 b/doc/man/nvme_subsystem_release_fds.2
index 9b5cc67..71c82b7 100644
--- a/doc/man/nvme_subsystem_release_fds.2
+++ b/doc/man/nvme_subsystem_release_fds.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_release_fds" 9 "nvme_subsystem_release_fds" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_release_fds" 9 "nvme_subsystem_release_fds" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_release_fds \- Close all opened fds under subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_reset.2 b/doc/man/nvme_subsystem_reset.2
index 4191e4d..8832547 100644
--- a/doc/man/nvme_subsystem_reset.2
+++ b/doc/man/nvme_subsystem_reset.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_reset" 9 "nvme_subsystem_reset" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_reset" 9 "nvme_subsystem_reset" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_reset \- Initiate a subsystem reset
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_set_application.2 b/doc/man/nvme_subsystem_set_application.2
index 9069d36..e3bfd5e 100644
--- a/doc/man/nvme_subsystem_set_application.2
+++ b/doc/man/nvme_subsystem_set_application.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_set_application" 9 "nvme_subsystem_set_application" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_set_application" 9 "nvme_subsystem_set_application" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_set_application \- Set the application string
.SH SYNOPSIS
diff --git a/doc/man/nvme_supported_cap_config_list_log.2 b/doc/man/nvme_supported_cap_config_list_log.2
index f178220..030b303 100644
--- a/doc/man/nvme_supported_cap_config_list_log.2
+++ b/doc/man/nvme_supported_cap_config_list_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_supported_cap_config_list_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_supported_cap_config_list_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_supported_cap_config_list_log \- Supported Capacity Configuration list log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_supported_log_pages.2 b/doc/man/nvme_supported_log_pages.2
index 0e3527d..abaa2e4 100644
--- a/doc/man/nvme_supported_log_pages.2
+++ b/doc/man/nvme_supported_log_pages.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_supported_log_pages" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_supported_log_pages" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_supported_log_pages \- Supported Log Pages - Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_telemetry_da.2 b/doc/man/nvme_telemetry_da.2
index dc486cf..dc0d01a 100644
--- a/doc/man/nvme_telemetry_da.2
+++ b/doc/man/nvme_telemetry_da.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_telemetry_da" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_telemetry_da" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_telemetry_da \- Telemetry Log Data Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_telemetry_log.2 b/doc/man/nvme_telemetry_log.2
index de977bf..69a2f91 100644
--- a/doc/man/nvme_telemetry_log.2
+++ b/doc/man/nvme_telemetry_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_telemetry_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_telemetry_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_telemetry_log \- Retrieve internal data specific to the manufacturer.
.SH SYNOPSIS
diff --git a/doc/man/nvme_thermal_exc_event.2 b/doc/man/nvme_thermal_exc_event.2
index 04a381b..2885f77 100644
--- a/doc/man/nvme_thermal_exc_event.2
+++ b/doc/man/nvme_thermal_exc_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_thermal_exc_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_thermal_exc_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_thermal_exc_event \- Thermal Excursion Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_time_stamp_change_event.2 b/doc/man/nvme_time_stamp_change_event.2
index 1fdd348..cd3498b 100644
--- a/doc/man/nvme_time_stamp_change_event.2
+++ b/doc/man/nvme_time_stamp_change_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_time_stamp_change_event" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_time_stamp_change_event" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_time_stamp_change_event \- Timestamp Change Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_timestamp.2 b/doc/man/nvme_timestamp.2
index 4293742..14b5645 100644
--- a/doc/man/nvme_timestamp.2
+++ b/doc/man/nvme_timestamp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_timestamp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_timestamp" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_timestamp \- Timestamp - Data Structure for Get Features
.SH SYNOPSIS
diff --git a/doc/man/nvme_unit.2 b/doc/man/nvme_unit.2
index 9015af3..7c6f2ee 100644
--- a/doc/man/nvme_unit.2
+++ b/doc/man/nvme_unit.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_unit" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_unit" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_unit \- Defined buffer size and write throughput granularity units
.SH SYNOPSIS
diff --git a/doc/man/nvme_unlink_ctrl.2 b/doc/man/nvme_unlink_ctrl.2
index aa4a9ce..23cb8c3 100644
--- a/doc/man/nvme_unlink_ctrl.2
+++ b/doc/man/nvme_unlink_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_unlink_ctrl" 9 "nvme_unlink_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_unlink_ctrl" 9 "nvme_unlink_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_unlink_ctrl \- Unlink controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_update_config.2 b/doc/man/nvme_update_config.2
index 0f40b14..56b33f6 100644
--- a/doc/man/nvme_update_config.2
+++ b/doc/man/nvme_update_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_update_config" 9 "nvme_update_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_update_config" 9 "nvme_update_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_update_config \- Update JSON configuration
.SH SYNOPSIS
diff --git a/doc/man/nvme_update_key.2 b/doc/man/nvme_update_key.2
index 2e5fe0a..b3a1550 100644
--- a/doc/man/nvme_update_key.2
+++ b/doc/man/nvme_update_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_update_key" 9 "nvme_update_key" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_update_key" 9 "nvme_update_key" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_update_key \- Update key raw data
.SH SYNOPSIS
diff --git a/doc/man/nvme_uring_cmd.2 b/doc/man/nvme_uring_cmd.2
index d737abe..412b458 100644
--- a/doc/man/nvme_uring_cmd.2
+++ b/doc/man/nvme_uring_cmd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_uring_cmd" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_uring_cmd" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_uring_cmd \- nvme uring command structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_verify.2 b/doc/man/nvme_verify.2
index 27a19ab..02d8eed 100644
--- a/doc/man/nvme_verify.2
+++ b/doc/man/nvme_verify.2
@@ -1,4 +1,4 @@
-.TH "nvme_verify" 9 "nvme_verify" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_verify" 9 "nvme_verify" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_verify \- Send an nvme verify command
.SH SYNOPSIS
diff --git a/doc/man/nvme_version.2 b/doc/man/nvme_version.2
index 2c26f7e..696310e 100644
--- a/doc/man/nvme_version.2
+++ b/doc/man/nvme_version.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_version" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_version" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_version \- Selector for version to be returned by @nvme_get_version
.SH SYNOPSIS
diff --git a/doc/man/nvme_virt_mgmt_act.2 b/doc/man/nvme_virt_mgmt_act.2
index 9499017..83a69b6 100644
--- a/doc/man/nvme_virt_mgmt_act.2
+++ b/doc/man/nvme_virt_mgmt_act.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_virt_mgmt_act" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_virt_mgmt_act" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_virt_mgmt_act \- Virtualization Management - Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_virt_mgmt_rt.2 b/doc/man/nvme_virt_mgmt_rt.2
index 7262ad1..ba565d9 100644
--- a/doc/man/nvme_virt_mgmt_rt.2
+++ b/doc/man/nvme_virt_mgmt_rt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_virt_mgmt_rt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_virt_mgmt_rt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_virt_mgmt_rt \- Virtualization Management - Resource Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_virtual_mgmt.2 b/doc/man/nvme_virtual_mgmt.2
index ae1c691..d93389c 100644
--- a/doc/man/nvme_virtual_mgmt.2
+++ b/doc/man/nvme_virtual_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_virtual_mgmt" 9 "nvme_virtual_mgmt" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_virtual_mgmt" 9 "nvme_virtual_mgmt" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_virtual_mgmt \- Virtualization resource management
.SH SYNOPSIS
diff --git a/doc/man/nvme_vs.2 b/doc/man/nvme_vs.2
index 27750d4..db0569c 100644
--- a/doc/man/nvme_vs.2
+++ b/doc/man/nvme_vs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_vs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_vs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_vs \- This field indicates the version
.SH SYNOPSIS
diff --git a/doc/man/nvme_write.2 b/doc/man/nvme_write.2
index f730556..cabd84f 100644
--- a/doc/man/nvme_write.2
+++ b/doc/man/nvme_write.2
@@ -1,4 +1,4 @@
-.TH "nvme_write" 9 "nvme_write" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_write" 9 "nvme_write" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_write \- Submit an nvme user write command
.SH SYNOPSIS
diff --git a/doc/man/nvme_write_uncorrectable.2 b/doc/man/nvme_write_uncorrectable.2
index 30f9bb3..9cdf51a 100644
--- a/doc/man/nvme_write_uncorrectable.2
+++ b/doc/man/nvme_write_uncorrectable.2
@@ -1,4 +1,4 @@
-.TH "nvme_write_uncorrectable" 9 "nvme_write_uncorrectable" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_write_uncorrectable" 9 "nvme_write_uncorrectable" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_write_uncorrectable \- Submit an nvme write uncorrectable command
.SH SYNOPSIS
diff --git a/doc/man/nvme_write_zeros.2 b/doc/man/nvme_write_zeros.2
index a9a5388..80e9881 100644
--- a/doc/man/nvme_write_zeros.2
+++ b/doc/man/nvme_write_zeros.2
@@ -1,4 +1,4 @@
-.TH "nvme_write_zeros" 9 "nvme_write_zeros" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_write_zeros" 9 "nvme_write_zeros" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_write_zeros \- Submit an nvme write zeroes command
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_append.2 b/doc/man/nvme_zns_append.2
index 132ed5a..a34626b 100644
--- a/doc/man/nvme_zns_append.2
+++ b/doc/man/nvme_zns_append.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_append" 9 "nvme_zns_append" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_append" 9 "nvme_zns_append" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_append \- Append data to a zone
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_changed_zone_log.2 b/doc/man/nvme_zns_changed_zone_log.2
index f817b11..378be46 100644
--- a/doc/man/nvme_zns_changed_zone_log.2
+++ b/doc/man/nvme_zns_changed_zone_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_changed_zone_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_changed_zone_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_changed_zone_log \- ZNS Changed Zone List log
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_desc.2 b/doc/man/nvme_zns_desc.2
index f77441b..0994244 100644
--- a/doc/man/nvme_zns_desc.2
+++ b/doc/man/nvme_zns_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_desc" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_desc" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_desc \- Zone Descriptor Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_id_ctrl.2 b/doc/man/nvme_zns_id_ctrl.2
index f1ff4d5..9e8c87a 100644
--- a/doc/man/nvme_zns_id_ctrl.2
+++ b/doc/man/nvme_zns_id_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_id_ctrl" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_id_ctrl" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_id_ctrl \- I/O Command Set Specific Identify Controller Data Structure for the Zoned Namespace Command Set
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_id_ns.2 b/doc/man/nvme_zns_id_ns.2
index 57eaa5d..bce6f20 100644
--- a/doc/man/nvme_zns_id_ns.2
+++ b/doc/man/nvme_zns_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_id_ns" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_id_ns" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_id_ns \- Zoned Namespace Command Set Specific Identify Namespace Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_identify_ctrl.2 b/doc/man/nvme_zns_identify_ctrl.2
index b3ae323..718d9cd 100644
--- a/doc/man/nvme_zns_identify_ctrl.2
+++ b/doc/man/nvme_zns_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_identify_ctrl" 9 "nvme_zns_identify_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_identify_ctrl" 9 "nvme_zns_identify_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_identify_ctrl \- ZNS identify controller data
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_identify_ns.2 b/doc/man/nvme_zns_identify_ns.2
index 366f676..370e5bc 100644
--- a/doc/man/nvme_zns_identify_ns.2
+++ b/doc/man/nvme_zns_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_identify_ns" 9 "nvme_zns_identify_ns" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_identify_ns" 9 "nvme_zns_identify_ns" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_identify_ns \- ZNS identify namespace data
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_lbafe.2 b/doc/man/nvme_zns_lbafe.2
index 84c9001..e7fe241 100644
--- a/doc/man/nvme_zns_lbafe.2
+++ b/doc/man/nvme_zns_lbafe.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_lbafe" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_lbafe" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_lbafe \- LBA Format Extension Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_mgmt_recv.2 b/doc/man/nvme_zns_mgmt_recv.2
index d851205..4b167c8 100644
--- a/doc/man/nvme_zns_mgmt_recv.2
+++ b/doc/man/nvme_zns_mgmt_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_mgmt_recv" 9 "nvme_zns_mgmt_recv" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_mgmt_recv" 9 "nvme_zns_mgmt_recv" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_mgmt_recv \- ZNS management receive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_mgmt_send.2 b/doc/man/nvme_zns_mgmt_send.2
index 8742bc7..7c49074 100644
--- a/doc/man/nvme_zns_mgmt_send.2
+++ b/doc/man/nvme_zns_mgmt_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_mgmt_send" 9 "nvme_zns_mgmt_send" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_mgmt_send" 9 "nvme_zns_mgmt_send" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_mgmt_send \- ZNS management send command
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_recv_action.2 b/doc/man/nvme_zns_recv_action.2
index fb257ea..1d3512e 100644
--- a/doc/man/nvme_zns_recv_action.2
+++ b/doc/man/nvme_zns_recv_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_recv_action" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_recv_action" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_recv_action \- Zone Management Receive - Zone Receive Action Specific Features
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_report_options.2 b/doc/man/nvme_zns_report_options.2
index 24beddd..2aeaadf 100644
--- a/doc/man/nvme_zns_report_options.2
+++ b/doc/man/nvme_zns_report_options.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_report_options" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_report_options" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_report_options \- Zone Management Receive - Zone Receive Action Specific Field
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_report_zones.2 b/doc/man/nvme_zns_report_zones.2
index ee07927..7d99dab 100644
--- a/doc/man/nvme_zns_report_zones.2
+++ b/doc/man/nvme_zns_report_zones.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_report_zones" 9 "nvme_zns_report_zones" "August 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_report_zones" 9 "nvme_zns_report_zones" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_report_zones \- Return the list of zones
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_send_action.2 b/doc/man/nvme_zns_send_action.2
index f1fb0d4..1dad930 100644
--- a/doc/man/nvme_zns_send_action.2
+++ b/doc/man/nvme_zns_send_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_send_action" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_send_action" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_send_action \- Zone Management Send - Zone Send Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_za.2 b/doc/man/nvme_zns_za.2
index cdb1d54..ddca24f 100644
--- a/doc/man/nvme_zns_za.2
+++ b/doc/man/nvme_zns_za.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_za" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_za" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_za \- Zone Descriptor Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_zs.2 b/doc/man/nvme_zns_zs.2
index bab82c3..00ed2ae 100644
--- a/doc/man/nvme_zns_zs.2
+++ b/doc/man/nvme_zns_zs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_zs" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_zs" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_zs \- Zone Descriptor Data Structure - Zone State
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_zt.2 b/doc/man/nvme_zns_zt.2
index bd85832..c21595a 100644
--- a/doc/man/nvme_zns_zt.2
+++ b/doc/man/nvme_zns_zt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_zt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_zt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_zt \- Zone Descriptor Data Structure - Zone Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_zone_report.2 b/doc/man/nvme_zone_report.2
index 166763a..7515639 100644
--- a/doc/man/nvme_zone_report.2
+++ b/doc/man/nvme_zone_report.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zone_report" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zone_report" "October 2024" "API Manual" LINUX
.SH NAME
struct nvme_zone_report \- Report Zones Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvmf_add_ctrl.2 b/doc/man/nvmf_add_ctrl.2
index dff98ce..5059623 100644
--- a/doc/man/nvmf_add_ctrl.2
+++ b/doc/man/nvmf_add_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvmf_add_ctrl" 9 "nvmf_add_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_add_ctrl" 9 "nvmf_add_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_add_ctrl \- Connect a controller and update topology
.SH SYNOPSIS
diff --git a/doc/man/nvmf_addr_family.2 b/doc/man/nvmf_addr_family.2
index 461aca8..46244ef 100644
--- a/doc/man/nvmf_addr_family.2
+++ b/doc/man/nvmf_addr_family.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_addr_family" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_addr_family" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_addr_family \- Address Family codes for Discovery Log Page entry ADRFAM field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_adrfam_str.2 b/doc/man/nvmf_adrfam_str.2
index c0b00d9..a7652ce 100644
--- a/doc/man/nvmf_adrfam_str.2
+++ b/doc/man/nvmf_adrfam_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_adrfam_str" 9 "nvmf_adrfam_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_adrfam_str" 9 "nvmf_adrfam_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_adrfam_str \- Decode ADRFAM field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_cms_str.2 b/doc/man/nvmf_cms_str.2
index 905be1e..fa57aa4 100644
--- a/doc/man/nvmf_cms_str.2
+++ b/doc/man/nvmf_cms_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_cms_str" 9 "nvmf_cms_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_cms_str" 9 "nvmf_cms_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_cms_str \- Decode RDMA connection management service field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_connect_ctrl.2 b/doc/man/nvmf_connect_ctrl.2
new file mode 100644
index 0000000..1a2198a
--- /dev/null
+++ b/doc/man/nvmf_connect_ctrl.2
@@ -0,0 +1,14 @@
+.TH "nvmf_connect_ctrl" 9 "nvmf_connect_ctrl" "October 2024" "libnvme API manual" LINUX
+.SH NAME
+nvmf_connect_ctrl \- Connect a controller
+.SH SYNOPSIS
+.B "int" nvmf_connect_ctrl
+.BI "(nvme_ctrl_t c " ");"
+.SH ARGUMENTS
+.IP "c" 12
+Controller to be connected
+.SH "DESCRIPTION"
+Issues a 'connect' command to the NVMe-oF controller.
+\fIc\fP must be initialized and not connected to the topology.
+.SH "RETURN"
+0 on success; on failure errno is set and -1 is returned.
diff --git a/doc/man/nvmf_connect_data.2 b/doc/man/nvmf_connect_data.2
index bf53acd..128e1b2 100644
--- a/doc/man/nvmf_connect_data.2
+++ b/doc/man/nvmf_connect_data.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_connect_data" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_connect_data" "October 2024" "API Manual" LINUX
.SH NAME
struct nvmf_connect_data \- Data payload for the 'connect' command
.SH SYNOPSIS
diff --git a/doc/man/nvmf_connect_disc_entry.2 b/doc/man/nvmf_connect_disc_entry.2
index 8a46178..4546a62 100644
--- a/doc/man/nvmf_connect_disc_entry.2
+++ b/doc/man/nvmf_connect_disc_entry.2
@@ -1,4 +1,4 @@
-.TH "nvmf_connect_disc_entry" 9 "nvmf_connect_disc_entry" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_connect_disc_entry" 9 "nvmf_connect_disc_entry" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_connect_disc_entry \- Connect controller based on the discovery log page entry
.SH SYNOPSIS
diff --git a/doc/man/nvmf_default_config.2 b/doc/man/nvmf_default_config.2
index 861b713..e00bd89 100644
--- a/doc/man/nvmf_default_config.2
+++ b/doc/man/nvmf_default_config.2
@@ -1,4 +1,4 @@
-.TH "nvmf_default_config" 9 "nvmf_default_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_default_config" 9 "nvmf_default_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_default_config \- Default values for fabrics configuration
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_data.2 b/doc/man/nvmf_dim_data.2
index 8274610..b5e0d35 100644
--- a/doc/man/nvmf_dim_data.2
+++ b/doc/man/nvmf_dim_data.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_dim_data" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_dim_data" "October 2024" "API Manual" LINUX
.SH NAME
struct nvmf_dim_data \- Discovery Information Management (DIM) - Data
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_entfmt.2 b/doc/man/nvmf_dim_entfmt.2
index f775bf8..0b98c6f 100644
--- a/doc/man/nvmf_dim_entfmt.2
+++ b/doc/man/nvmf_dim_entfmt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_dim_entfmt" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_dim_entfmt" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_dim_entfmt \- Discovery Information Management Entry Format
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_etype.2 b/doc/man/nvmf_dim_etype.2
index f942bb7..e90e00b 100644
--- a/doc/man/nvmf_dim_etype.2
+++ b/doc/man/nvmf_dim_etype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_dim_etype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_dim_etype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_dim_etype \- Discovery Information Management Entity Type
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_tas.2 b/doc/man/nvmf_dim_tas.2
index fea1e11..84056ff 100644
--- a/doc/man/nvmf_dim_tas.2
+++ b/doc/man/nvmf_dim_tas.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_dim_tas" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_dim_tas" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_dim_tas \- Discovery Information Management Task
.SH SYNOPSIS
diff --git a/doc/man/nvmf_disc_eflags.2 b/doc/man/nvmf_disc_eflags.2
index 1b6f5fc..1724608 100644
--- a/doc/man/nvmf_disc_eflags.2
+++ b/doc/man/nvmf_disc_eflags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_disc_eflags" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_disc_eflags" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_disc_eflags \- Discovery Log Page entry flags.
.SH SYNOPSIS
diff --git a/doc/man/nvmf_disc_log_entry.2 b/doc/man/nvmf_disc_log_entry.2
index de3d938..ced1565 100644
--- a/doc/man/nvmf_disc_log_entry.2
+++ b/doc/man/nvmf_disc_log_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_disc_log_entry" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_disc_log_entry" "October 2024" "API Manual" LINUX
.SH NAME
struct nvmf_disc_log_entry \- Discovery Log Page entry
.SH SYNOPSIS
diff --git a/doc/man/nvmf_discovery_log.2 b/doc/man/nvmf_discovery_log.2
index 9307bcb..0db1c50 100644
--- a/doc/man/nvmf_discovery_log.2
+++ b/doc/man/nvmf_discovery_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_discovery_log" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_discovery_log" "October 2024" "API Manual" LINUX
.SH NAME
struct nvmf_discovery_log \- Discovery Log Page (Log Identifier 70h)
.SH SYNOPSIS
diff --git a/doc/man/nvmf_eflags_str.2 b/doc/man/nvmf_eflags_str.2
index b2ce601..55e4955 100644
--- a/doc/man/nvmf_eflags_str.2
+++ b/doc/man/nvmf_eflags_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_eflags_str" 9 "nvmf_eflags_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_eflags_str" 9 "nvmf_eflags_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_eflags_str \- Decode EFLAGS field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_exat_len.2 b/doc/man/nvmf_exat_len.2
index d2aa3ea..b4eaaaf 100644
--- a/doc/man/nvmf_exat_len.2
+++ b/doc/man/nvmf_exat_len.2
@@ -1,4 +1,4 @@
-.TH "nvmf_exat_len" 9 "nvmf_exat_len" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_exat_len" 9 "nvmf_exat_len" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_exat_len \- Return length rounded up by 4
.SH SYNOPSIS
diff --git a/doc/man/nvmf_exattype.2 b/doc/man/nvmf_exattype.2
index a0bcfbf..d9420b1 100644
--- a/doc/man/nvmf_exattype.2
+++ b/doc/man/nvmf_exattype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_exattype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_exattype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_exattype \- Extended Attribute Type
.SH SYNOPSIS
diff --git a/doc/man/nvmf_ext_attr.2 b/doc/man/nvmf_ext_attr.2
index 4689e94..9517f0d 100644
--- a/doc/man/nvmf_ext_attr.2
+++ b/doc/man/nvmf_ext_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_ext_attr" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_ext_attr" "October 2024" "API Manual" LINUX
.SH NAME
struct nvmf_ext_attr \- Extended Attribute (EXAT)
.SH SYNOPSIS
diff --git a/doc/man/nvmf_ext_die.2 b/doc/man/nvmf_ext_die.2
index ea3d9d8..80694cb 100644
--- a/doc/man/nvmf_ext_die.2
+++ b/doc/man/nvmf_ext_die.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_ext_die" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_ext_die" "October 2024" "API Manual" LINUX
.SH NAME
struct nvmf_ext_die \- Extended Discovery Information Entry (DIE)
.SH SYNOPSIS
diff --git a/doc/man/nvmf_get_discovery_log.2 b/doc/man/nvmf_get_discovery_log.2
index 320cc61..655184e 100644
--- a/doc/man/nvmf_get_discovery_log.2
+++ b/doc/man/nvmf_get_discovery_log.2
@@ -1,4 +1,4 @@
-.TH "nvmf_get_discovery_log" 9 "nvmf_get_discovery_log" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_get_discovery_log" 9 "nvmf_get_discovery_log" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_get_discovery_log \- Return the discovery log page
.SH SYNOPSIS
diff --git a/doc/man/nvmf_get_discovery_wargs.2 b/doc/man/nvmf_get_discovery_wargs.2
index 818e162..9a7a9cb 100644
--- a/doc/man/nvmf_get_discovery_wargs.2
+++ b/doc/man/nvmf_get_discovery_wargs.2
@@ -1,4 +1,4 @@
-.TH "nvmf_get_discovery_wargs" 9 "nvmf_get_discovery_wargs" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_get_discovery_wargs" 9 "nvmf_get_discovery_wargs" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_get_discovery_wargs \- Get the discovery log page with args
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostid_from_file.2 b/doc/man/nvmf_hostid_from_file.2
index 415f727..f6354bf 100644
--- a/doc/man/nvmf_hostid_from_file.2
+++ b/doc/man/nvmf_hostid_from_file.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostid_from_file" 9 "nvmf_hostid_from_file" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostid_from_file" 9 "nvmf_hostid_from_file" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostid_from_file \- Reads the host identifier from the config default location
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostid_generate.2 b/doc/man/nvmf_hostid_generate.2
index 39ddba1..2cd539b 100644
--- a/doc/man/nvmf_hostid_generate.2
+++ b/doc/man/nvmf_hostid_generate.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostid_generate" 9 "nvmf_hostid_generate" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostid_generate" 9 "nvmf_hostid_generate" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostid_generate \- Generate a machine specific host identifier
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostnqn_from_file.2 b/doc/man/nvmf_hostnqn_from_file.2
index a9226ca..0f44f68 100644
--- a/doc/man/nvmf_hostnqn_from_file.2
+++ b/doc/man/nvmf_hostnqn_from_file.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostnqn_from_file" 9 "nvmf_hostnqn_from_file" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostnqn_from_file" 9 "nvmf_hostnqn_from_file" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostnqn_from_file \- Reads the host nvm qualified name from the config default location
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostnqn_generate.2 b/doc/man/nvmf_hostnqn_generate.2
index 04d9ba9..7931457 100644
--- a/doc/man/nvmf_hostnqn_generate.2
+++ b/doc/man/nvmf_hostnqn_generate.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostnqn_generate" 9 "nvmf_hostnqn_generate" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostnqn_generate" 9 "nvmf_hostnqn_generate" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostnqn_generate \- Generate a machine specific host nqn
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostnqn_generate_from_hostid.2 b/doc/man/nvmf_hostnqn_generate_from_hostid.2
index 54e9bf2..37f0f4b 100644
--- a/doc/man/nvmf_hostnqn_generate_from_hostid.2
+++ b/doc/man/nvmf_hostnqn_generate_from_hostid.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostnqn_generate_from_hostid" 9 "nvmf_hostnqn_generate_from_hostid" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostnqn_generate_from_hostid" 9 "nvmf_hostnqn_generate_from_hostid" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostnqn_generate_from_hostid \- Generate a host nqn from host identifier
.SH SYNOPSIS
diff --git a/doc/man/nvmf_log_discovery_lid_support.2 b/doc/man/nvmf_log_discovery_lid_support.2
index 88b28d5..d8e609b 100644
--- a/doc/man/nvmf_log_discovery_lid_support.2
+++ b/doc/man/nvmf_log_discovery_lid_support.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_log_discovery_lid_support" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_log_discovery_lid_support" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_log_discovery_lid_support \- Discovery log specific support
.SH SYNOPSIS
diff --git a/doc/man/nvmf_log_discovery_lsp.2 b/doc/man/nvmf_log_discovery_lsp.2
index 12a490a..a561211 100644
--- a/doc/man/nvmf_log_discovery_lsp.2
+++ b/doc/man/nvmf_log_discovery_lsp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_log_discovery_lsp" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_log_discovery_lsp" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_log_discovery_lsp \- Discovery log specific field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_prtype_str.2 b/doc/man/nvmf_prtype_str.2
index 7b42ed3..ceebdf5 100644
--- a/doc/man/nvmf_prtype_str.2
+++ b/doc/man/nvmf_prtype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_prtype_str" 9 "nvmf_prtype_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_prtype_str" 9 "nvmf_prtype_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_prtype_str \- Decode RDMA Provider type field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_qptype_str.2 b/doc/man/nvmf_qptype_str.2
index 37305b0..7800641 100644
--- a/doc/man/nvmf_qptype_str.2
+++ b/doc/man/nvmf_qptype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_qptype_str" 9 "nvmf_qptype_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_qptype_str" 9 "nvmf_qptype_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_qptype_str \- Decode RDMA QP Service type field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_rdma_cms.2 b/doc/man/nvmf_rdma_cms.2
index a47fc47..64a0e1f 100644
--- a/doc/man/nvmf_rdma_cms.2
+++ b/doc/man/nvmf_rdma_cms.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_rdma_cms" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_rdma_cms" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_rdma_cms \- RDMA Connection Management Service Type codes for Discovery Log Page entry TSAS RDMA_CMS field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_rdma_prtype.2 b/doc/man/nvmf_rdma_prtype.2
index 11b2b61..c16d96e 100644
--- a/doc/man/nvmf_rdma_prtype.2
+++ b/doc/man/nvmf_rdma_prtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_rdma_prtype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_rdma_prtype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_rdma_prtype \- RDMA Provider Type codes for Discovery Log Page entry TSAS RDMA_PRTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_rdma_qptype.2 b/doc/man/nvmf_rdma_qptype.2
index a5b7682..b6a0a8c 100644
--- a/doc/man/nvmf_rdma_qptype.2
+++ b/doc/man/nvmf_rdma_qptype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_rdma_qptype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_rdma_qptype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_rdma_qptype \- RDMA QP Service Type codes for Discovery Log Page entry TSAS RDMA_QPTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_register_ctrl.2 b/doc/man/nvmf_register_ctrl.2
index 3f67214..ae2bc49 100644
--- a/doc/man/nvmf_register_ctrl.2
+++ b/doc/man/nvmf_register_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvmf_register_ctrl" 9 "nvmf_register_ctrl" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_register_ctrl" 9 "nvmf_register_ctrl" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_register_ctrl \- Perform registration task with a DC
.SH SYNOPSIS
diff --git a/doc/man/nvmf_sectype_str.2 b/doc/man/nvmf_sectype_str.2
index 1a61d3f..3c06d18 100644
--- a/doc/man/nvmf_sectype_str.2
+++ b/doc/man/nvmf_sectype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_sectype_str" 9 "nvmf_sectype_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_sectype_str" 9 "nvmf_sectype_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_sectype_str \- Decode SECTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_subtype_str.2 b/doc/man/nvmf_subtype_str.2
index 58d7641..d32937c 100644
--- a/doc/man/nvmf_subtype_str.2
+++ b/doc/man/nvmf_subtype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_subtype_str" 9 "nvmf_subtype_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_subtype_str" 9 "nvmf_subtype_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_subtype_str \- Decode SUBTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_tcp_sectype.2 b/doc/man/nvmf_tcp_sectype.2
index 0b5d994..2087632 100644
--- a/doc/man/nvmf_tcp_sectype.2
+++ b/doc/man/nvmf_tcp_sectype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_tcp_sectype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_tcp_sectype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_tcp_sectype \- Transport Specific Address Subtype Definition for NVMe/TCP Transport
.SH SYNOPSIS
diff --git a/doc/man/nvmf_treq.2 b/doc/man/nvmf_treq.2
index 820cbce..edb9cd1 100644
--- a/doc/man/nvmf_treq.2
+++ b/doc/man/nvmf_treq.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_treq" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_treq" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_treq \- Transport Requirements codes for Discovery Log Page entry TREQ field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_treq_str.2 b/doc/man/nvmf_treq_str.2
index 4a4a59b..cf83df8 100644
--- a/doc/man/nvmf_treq_str.2
+++ b/doc/man/nvmf_treq_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_treq_str" 9 "nvmf_treq_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_treq_str" 9 "nvmf_treq_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_treq_str \- Decode TREQ field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_trtype.2 b/doc/man/nvmf_trtype.2
index de7667a..aaa3825 100644
--- a/doc/man/nvmf_trtype.2
+++ b/doc/man/nvmf_trtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_trtype" "August 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_trtype" "October 2024" "API Manual" LINUX
.SH NAME
enum nvmf_trtype \- Transport Type codes for Discovery Log Page entry TRTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_trtype_str.2 b/doc/man/nvmf_trtype_str.2
index 612084d..9f87a37 100644
--- a/doc/man/nvmf_trtype_str.2
+++ b/doc/man/nvmf_trtype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_trtype_str" 9 "nvmf_trtype_str" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_trtype_str" 9 "nvmf_trtype_str" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_trtype_str \- Decode TRTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_update_config.2 b/doc/man/nvmf_update_config.2
index 7bb78d7..f3813fd 100644
--- a/doc/man/nvmf_update_config.2
+++ b/doc/man/nvmf_update_config.2
@@ -1,4 +1,4 @@
-.TH "nvmf_update_config" 9 "nvmf_update_config" "August 2024" "libnvme API manual" LINUX
+.TH "nvmf_update_config" 9 "nvmf_update_config" "October 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_update_config \- Update fabrics configuration values
.SH SYNOPSIS
diff --git a/doc/rst/fabrics.rst b/doc/rst/fabrics.rst
index 218084c..6c8831b 100644
--- a/doc/rst/fabrics.rst
+++ b/doc/rst/fabrics.rst
@@ -29,6 +29,7 @@ Fabrics-specific definitions.
int tos;
long keyring;
long tls_key;
+ long tls_configured_key;
bool duplicate_connect;
bool disable_sqflow;
bool hdr_digest;
@@ -78,6 +79,9 @@ Fabrics-specific definitions.
``tls_key``
TLS PSK for the connection
+``tls_configured_key``
+ TLS PSK for connect command for the connection
+
``duplicate_connect``
Allow multiple connections to the same target
@@ -376,6 +380,25 @@ into the topology using **h** as parent.
0 on success; on failure errno is set and -1 is returned.
+.. c:function:: int nvmf_connect_ctrl (nvme_ctrl_t c)
+
+ Connect a controller
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller to be connected
+
+**Description**
+
+Issues a 'connect' command to the NVMe-oF controller.
+**c** must be initialized and not connected to the topology.
+
+**Return**
+
+0 on success; on failure errno is set and -1 is returned.
+
+
.. c:function:: int nvmf_get_discovery_log (nvme_ctrl_t c, struct nvmf_discovery_log **logp, int max_retries)
Return the discovery log page
diff --git a/doc/rst/ioctl.rst b/doc/rst/ioctl.rst
index 050bf99..015f05b 100644
--- a/doc/rst/ioctl.rst
+++ b/doc/rst/ioctl.rst
@@ -2423,6 +2423,27 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+.. c:function:: int nvme_get_log_lockdown (int fd, __u8 cnscp, struct nvme_lockdown_log *lockdown_log)
+
+ Retrieve lockdown Log
+
+**Parameters**
+
+``int fd``
+ File descriptor of nvme device
+
+``__u8 cnscp``
+ Contents and Scope of Command and Feature Identifier Lists
+
+``struct nvme_lockdown_log *lockdown_log``
+ Buffer to store the lockdown log
+
+**Return**
+
+The nvme command status if a response was received (see
+:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+
+
.. c:function:: int nvme_set_features (struct nvme_set_features_args *args)
Set a feature attribute
diff --git a/doc/rst/linux.rst b/doc/rst/linux.rst
index 05d1418..2693373 100644
--- a/doc/rst/linux.rst
+++ b/doc/rst/linux.rst
@@ -760,6 +760,37 @@ on error. It is the responsibility of the caller to free the returned
string.
+.. c:function:: char * nvme_export_tls_key_versioned (unsigned char version, unsigned char hmac, const unsigned char *key_data, size_t key_len)
+
+ Export a TLS pre-shared key
+
+**Parameters**
+
+``unsigned char version``
+ Indicated the representation of the TLS PSK
+
+``unsigned char hmac``
+ HMAC algorithm used to transfor the configured PSK
+ in a retained PSK
+
+``const unsigned char *key_data``
+ Raw data of the key
+
+``size_t key_len``
+ Length of **key_data**
+
+**Description**
+
+Returns **key_data** in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+
+**Return**
+
+The string containing the TLS identity or NULL with errno set
+on error. It is the responsibility of the caller to free the returned
+string.
+
+
.. c:function:: unsigned char * nvme_import_tls_key (const char *encoded_key, int *key_len, unsigned int *hmac)
Import a TLS key
@@ -786,6 +817,36 @@ The raw data of the PSK or NULL with errno set on error. It is
the responsibility of the caller to free the returned string.
+.. c:function:: unsigned char * nvme_import_tls_key_versioned (const char *encoded_key, unsigned char *version, unsigned char *hmac, size_t *key_len)
+
+ Import a TLS key
+
+**Parameters**
+
+``const char *encoded_key``
+ TLS key in PSK interchange format
+
+``unsigned char *version``
+ Indicated the representation of the TLS PSK
+
+``unsigned char *hmac``
+ HMAC algorithm used to transfor the configured
+ PSK in a retained PSK
+
+``size_t *key_len``
+ Length of the resulting key data
+
+**Description**
+
+Imports **key_data** in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+
+**Return**
+
+The raw data of the PSK or NULL with errno set on error. It is
+the responsibility of the caller to free the returned string.
+
+
.. c:function:: int nvme_submit_passthru (int fd, unsigned long ioctl_cmd, struct nvme_passthru_cmd *cmd, __u32 *result)
Low level ioctl wrapper for passthru commands
diff --git a/doc/rst/mi.rst b/doc/rst/mi.rst
index e5c2bd1..e9d2e56 100644
--- a/doc/rst/mi.rst
+++ b/doc/rst/mi.rst
@@ -578,6 +578,63 @@ This is the generic response format with the three doublewords of completion
queue data, plus optional response data.
+
+
+.. c:enum:: nvme_mi_control_opcode
+
+ Operation code for Control Primitives.
+
+**Constants**
+
+``nvme_mi_control_opcode_pause``
+ Suspend response transmission/timeout
+
+``nvme_mi_control_opcode_resume``
+ Resume from a paused condition
+
+``nvme_mi_control_opcode_abort``
+ Re-initialize a Command Slot to the Idle state
+
+``nvme_mi_control_opcode_get_state``
+ Get the state of a Command Slot
+
+``nvme_mi_control_opcode_replay``
+ Retransmit the Response Message
+
+
+
+
+.. c:struct:: nvme_mi_control_req
+
+ The Control Primitive request.
+
+**Definition**
+
+::
+
+ struct nvme_mi_control_req {
+ struct nvme_mi_msg_hdr hdr;
+ __u8 opcode;
+ __u8 tag;
+ __le16 cpsp;
+ };
+
+**Members**
+
+``hdr``
+ Generic MI message header
+
+``opcode``
+ Control Primitive Opcodes (using :c:type:`enum nvme_mi_control_opcode <nvme_mi_control_opcode>`)
+
+``tag``
+ flag - Opaque value passed from request to response
+
+``cpsp``
+ Control Primitive Specific Parameter
+
+
+
.. c:function:: const char * nvme_mi_status_to_string (int status)
return a string representation of the MI status.
@@ -1617,6 +1674,36 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+.. c:function:: int nvme_mi_control (nvme_mi_ep_t ep, __u8 opcode, __u16 cpsp, __u16 *result_cpsr)
+
+ Perform a Control Primitive command
+
+**Parameters**
+
+``nvme_mi_ep_t ep``
+ endpoint for MI communication
+
+``__u8 opcode``
+ Control Primitive opcode (using :c:type:`enum nvme_mi_control_opcode <nvme_mi_control_opcode>`)
+
+``__u16 cpsp``
+ Control Primitive Specific Parameter
+
+``__u16 *result_cpsr``
+ Optional field to return the result from the CPSR field
+
+**Description**
+
+Perform a Control Primitive command, using the opcode specified in **opcode**
+Stores the result from the CPSR field in **result_cpsr** if set.
+
+See: :c:type:`enum nvme_mi_control_opcode <nvme_mi_control_opcode>`
+
+**Return**
+
+0 on success, non-zero on failure
+
+
.. c:function:: int nvme_mi_admin_identify_cns_nsid (nvme_mi_ctrl_t ctrl, enum nvme_identify_cns cns, __u32 nsid, void *data)
Perform an Admin identify command using specific CNS/NSID parameters.
@@ -2860,6 +2947,27 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+.. c:function:: int nvme_mi_admin_get_log_lockdown (nvme_mi_ctrl_t ctrl, __u8 cnscp, struct nvme_lockdown_log *lockdown_log)
+
+ Retrieve lockdown Log
+
+**Parameters**
+
+``nvme_mi_ctrl_t ctrl``
+ Controller to query
+
+``__u8 cnscp``
+ Contents and Scope of Command and Feature Identifier Lists
+
+``struct nvme_lockdown_log *lockdown_log``
+ Buffer to store the lockdown log
+
+**Return**
+
+The nvme command status if a response was received (see
+:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+
+
.. c:function:: int nvme_mi_admin_security_send (nvme_mi_ctrl_t ctrl, struct nvme_security_send_args *args)
Perform a Security Send command on a controller.
diff --git a/doc/rst/tree.rst b/doc/rst/tree.rst
index ee46d11..fd3b684 100644
--- a/doc/rst/tree.rst
+++ b/doc/rst/tree.rst
@@ -1845,6 +1845,87 @@ DH-HMAC-CHAP controller key or NULL if not set
DH-HMAC-CHAP Key to set or NULL to clear existing key
+.. c:function:: const char * nvme_ctrl_get_keyring (nvme_ctrl_t c)
+
+ Return keyring
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller to be used for the lookup
+
+**Return**
+
+Keyring or NULL if not set
+
+
+.. c:function:: void nvme_ctrl_set_keyring (nvme_ctrl_t c, const char *keyring)
+
+ Set keyring
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller for which the keyring should be set
+
+``const char *keyring``
+ Keyring name
+
+
+.. c:function:: const char * nvme_ctrl_get_tls_key_identity (nvme_ctrl_t c)
+
+ Return Derive TLS Identity
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller to be used for the lookup
+
+**Return**
+
+Derive TLS Identity or NULL if not set
+
+
+.. c:function:: void nvme_ctrl_set_tls_key_identity (nvme_ctrl_t c, const char *identity)
+
+ Set Derive TLS Identity
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller for which the key should be set
+
+``const char *identity``
+ Derive TLS identity or NULL to clear existing key
+
+
+.. c:function:: const char * nvme_ctrl_get_tls_key (nvme_ctrl_t c)
+
+ Return Derive TLS PSK
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller to be used for the lookup
+
+**Return**
+
+Key in PSK interchange format or NULL if not set
+
+
+.. c:function:: void nvme_ctrl_set_tls_key (nvme_ctrl_t c, const char *key)
+
+ Set Derive TLS PSK
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller for which the key should be set
+
+``const char *key``
+ Key in interchange format or NULL to clear existing key
+
+
.. c:function:: struct nvme_fabrics_config * nvme_ctrl_get_config (nvme_ctrl_t c)
Fabrics configuration of a controller
diff --git a/doc/rst/types.rst b/doc/rst/types.rst
index 7236642..245afce 100644
--- a/doc/rst/types.rst
+++ b/doc/rst/types.rst
@@ -49,6 +49,44 @@ The 'name' field from 'value'
The 'name' field from 'value'
+.. c:macro:: NVME_CHECK
+
+``NVME_CHECK (value, name, check)``
+
+ check value to compare field value
+
+**Parameters**
+
+``value``
+ The value to be checked
+
+``name``
+ The name of the sub-field within an nvme value
+
+``check``
+ The sub-field value to check
+
+**Return**
+
+The result of compare the value and the sub-field value
+
+
+.. c:macro:: NVME_VAL
+
+``NVME_VAL (name)``
+
+ get mask value shifted
+
+**Parameters**
+
+``name``
+ The name of the sub-field within an nvme value
+
+**Return**
+
+The mask value shifted
+
+
.. c:enum:: nvme_constants
@@ -1536,7 +1574,8 @@ power scale value
__le16 domainid;
__u8 rsvd358[10];
__u8 megcap[16];
- __u8 rsvd384[128];
+ __u8 tmpthha;
+ __u8 rsvd385[127];
__u8 sqes;
__u8 cqes;
__le16 maxcmd;
@@ -1556,7 +1595,19 @@ power scale value
__u8 maxdna[16];
__le32 maxcna;
__le32 oaqd;
- __u8 rsvd568[200];
+ __u8 rsvd568[2];
+ __u16 cmmrtd;
+ __u16 nmmrtd;
+ __u8 minmrtg;
+ __u8 maxmrtg;
+ __u8 trattr;
+ __u8 rsvd577;
+ __u16 mcudmq;
+ __u16 mnsudmq;
+ __u16 mcmr;
+ __u16 nmcmr;
+ __u16 mcdqpc;
+ __u8 rsvd588[180];
char subnqn[NVME_NQN_LENGTH];
__u8 rsvd1024[768];
__le32 ioccsz;
@@ -1843,7 +1894,10 @@ power scale value
Max Endurance Group Capacity indicates the maximum capacity
of a single Endurance Group.
-``rsvd384``
+``tmpthha``
+ Temperature Threshold Hysteresis Attributes
+
+``rsvd385``
Reserved
``sqes``
@@ -1933,6 +1987,63 @@ power scale value
``rsvd568``
Reserved
+``cmmrtd``
+ Controller Maximum Memory Range Tracking Descriptors indicates
+ the maximum number of Memory Range Tracking Descriptors the
+ controller supports.
+
+``nmmrtd``
+ NVM Subsystem Maximum Memory Range Tracking Descriptors
+ indicates the maximum number of Memory Range Tracking Descriptors
+ the NVM subsystem supports.
+
+``minmrtg``
+ Minimum Memory Range Tracking Granularity indicates the minimum
+ value supported in the Requested Memory Range Tracking
+ Granularity (RMRTG) field of the Track Memory Ranges data
+ structure.
+
+``maxmrtg``
+ Maximum Memory Range Tracking Granularity indicates the maximum
+ value supported in the Requested Memory Range Tracking
+ Granularity (RMRTG) field of the Track Memory Ranges data
+ structure.
+
+``trattr``
+ Tracking Attributes indicates supported attributes for the
+ Track Send command and Track Receive command.
+
+``rsvd577``
+ Reserved
+
+``mcudmq``
+ Maximum Controller User Data Migration Queues indicates the
+ maximum number of User Data Migration Queues supported by the
+ controller.
+
+``mnsudmq``
+ Maximum NVM Subsystem User Data Migration Queues indicates the
+ maximum number of User Data Migration Queues supported by the NVM
+ subsystem.
+
+``mcmr``
+ Maximum CDQ Memory Ranges indicates the maximum number of
+ memory ranges allowed to be specified by the PRP1 field of a
+ Controller Data Queue command.
+
+``nmcmr``
+ NVM Subsystem Maximum CDQ Memory Ranges indicates the maximum
+ number of memory ranges for all Controller Data Queues in the
+ NVM subsystem.
+
+``mcdqpc``
+ Maximum Controller Data Queue PRP Count indicates the maximum
+ number of PRPs allowed to be specified in the PRP list in the
+ Controller Data Queue command.
+
+``rsvd588``
+ Reserved
+
``subnqn``
NVM Subsystem NVMe Qualified Name, UTF-8 null terminated string
@@ -2060,6 +2171,87 @@ power scale value
**Constants**
+``NVME_CTRL_OAES_NA_SHIFT``
+ Shift amount to get the Namespace Attribute Notices event supported
+
+``NVME_CTRL_OAES_FA_SHIFT``
+ Shift amount to get the Firmware Activation Notices event supported
+
+``NVME_CTRL_OAES_ANA_SHIFT``
+ Shift amount to get the ANA Change Notices supported
+
+``NVME_CTRL_OAES_PLEA_SHIFT``
+ Shift amount to get the Predictable Latency Event Aggregate Log
+ Change Notices event supported
+
+``NVME_CTRL_OAES_LBAS_SHIFT``
+ Shift amount to get the LBA Status Information Notices event
+ supported
+
+``NVME_CTRL_OAES_EGE_SHIFT``
+ Shift amount to get the Endurance Group Events Aggregate Log Change
+ Notices event supported
+
+``NVME_CTRL_OAES_NS_SHIFT``
+ Shift amount to get the Normal NVM Subsystem Shutdown event supported
+
+``NVME_CTRL_OAES_TTH_SHIFT``
+ Shift amount to get the Temperature Threshold Hysteresis Recovery
+ event supported
+
+``NVME_CTRL_OAES_RGCNS_SHIFT``
+ Shift amount to get the Reachability Groups Change Notices supported
+
+``NVME_CTRL_OAES_ANSAN_SHIFT``
+ Shift amount to get the Allocated Namespace Attribute Notices
+ supported
+
+``NVME_CTRL_OAES_ZD_SHIFT``
+ Shift amount to get the Zone Descriptor Change Notifications supported
+
+``NVME_CTRL_OAES_DL_SHIFT``
+ Shift amount to get the Discover Log Page Change Notifications
+ supported
+
+``NVME_CTRL_OAES_NA_MASK``
+ Mask to get the Namespace Attribute Notices event supported
+
+``NVME_CTRL_OAES_FA_MASK``
+ Mask to get the Firmware Activation Notices event supported
+
+``NVME_CTRL_OAES_ANA_MASK``
+ Mask to get the ANA Change Notices supported
+
+``NVME_CTRL_OAES_PLEA_MASK``
+ Mask to get the Predictable Latency Event Aggregate Log Change Notices
+ event supported
+
+``NVME_CTRL_OAES_LBAS_MASK``
+ Mask to get the LBA Status Information Notices event supported
+
+``NVME_CTRL_OAES_EGE_MASK``
+ Mask to get the Endurance Group Events Aggregate Log Change Notices
+ event supported
+
+``NVME_CTRL_OAES_NS_MASK``
+ Mask to get the Normal NVM Subsystem Shutdown event supported
+
+``NVME_CTRL_OAES_TTH_MASK``
+ Mask to get the Temperature Threshold Hysteresis Recovery event
+ supported
+
+``NVME_CTRL_OAES_RGCNS_MASK``
+ Mask to get the Reachability Groups Change Notices supported
+
+``NVME_CTRL_OAES_ANSAN_MASK``
+ Mask to get the Allocated Namespace Attribute Notices supported
+
+``NVME_CTRL_OAES_ZD_MASK``
+ Mask to get the Zone Descriptor Change Notifications supported
+
+``NVME_CTRL_OAES_DL_MASK``
+ Mask to get the Discover Log Page Change Notifications supported
+
``NVME_CTRL_OAES_NA``
Namespace Attribute Notices event supported
@@ -2070,19 +2262,26 @@ power scale value
ANA Change Notices supported
``NVME_CTRL_OAES_PLEA``
- Predictable Latency Event Aggregate Log
- Change Notices event supported
+ Predictable Latency Event Aggregate Log Change Notices event supported
``NVME_CTRL_OAES_LBAS``
LBA Status Information Notices event supported
``NVME_CTRL_OAES_EGE``
- Endurance Group Events Aggregate Log Change
- Notices event supported
+ Endurance Group Events Aggregate Log Change Notices event supported
``NVME_CTRL_OAES_NS``
Normal NVM Subsystem Shutdown event supported
+``NVME_CTRL_OAES_TTH``
+ Temperature Threshold Hysteresis Recovery event supported
+
+``NVME_CTRL_OAES_RGCNS``
+ Reachability Groups Change Notices supported
+
+``NVME_CTRL_OAES_ANSAN``
+ Allocated Namespace Attribute Notices supported
+
``NVME_CTRL_OAES_ZD``
Zone Descriptor Change Notifications supported
@@ -2645,6 +2844,30 @@ power scale value
**Constants**
+``NVME_CTRL_FNA_FMT_ALL_NS_SHIFT``
+ Shift amount to get the format applied to all namespaces
+
+``NVME_CTRL_FNA_SEC_ALL_NS_SHIFT``
+ Shift amount to get the secure erase applied to all namespaces
+
+``NVME_CTRL_FNA_CES_SHIFT``
+ Shift amount to get the cryptographic erase supported
+
+``NVME_CTRL_FNA_NSID_ALL_F_SHIFT``
+ Shift amount to get the format supported an NSID FFFFFFFFh
+
+``NVME_CTRL_FNA_FMT_ALL_NS_MASK``
+ Mask to get the format applied to all namespaces
+
+``NVME_CTRL_FNA_SEC_ALL_NS_MASK``
+ Mask to get the secure erase applied to all namespaces
+
+``NVME_CTRL_FNA_CES_MASK``
+ Mask to get the cryptographic erase supported
+
+``NVME_CTRL_FNA_NSID_ALL_F_MASK``
+ Mask to get the format supported an NSID FFFFFFFFh
+
``NVME_CTRL_FNA_FMT_ALL_NAMESPACES``
If set, then all namespaces in an NVM
subsystem shall be configured with the
@@ -3795,7 +4018,9 @@ power scale value
__le64 dmsl;
__u8 rsvd16[2];
__le16 aocs;
- __u8 rsvd20[4076];
+ __le32 ver;
+ __u8 lbamqf;
+ __u8 rsvd25[4071];
};
**Members**
@@ -3824,7 +4049,13 @@ power scale value
``aocs``
Admin Optional Command Support
-``rsvd20``
+``ver``
+ Version
+
+``lbamqf``
+ LBA Migration Queue Format
+
+``rsvd25``
Reserved
@@ -3846,7 +4077,11 @@ power scale value
__u8 rsvd10[2];
__le32 elbaf[64];
__le32 npdgl;
- __u8 rsvd272[20];
+ __le32 nprg;
+ __le32 npra;
+ __le32 nors;
+ __le32 npdal;
+ __le32 lbapss;
__le32 tlbaag;
__u8 rsvd296[3800];
};
@@ -3871,8 +4106,20 @@ power scale value
``npdgl``
Namespace Preferred Deallocate Granularity Large
-``rsvd272``
- Reserved
+``nprg``
+ Namespace Preferred Read Granularity
+
+``npra``
+ Namespace Preferred Read Alignment
+
+``nors``
+ Namespace Optimal Read Size
+
+``npdal``
+ Namespace Preferred Deallocate Alignment Large
+
+``lbapss``
+ LBA Format Placement Shard Size
``tlbaag``
Tracked LBA Allocation Granularity
@@ -4854,6 +5101,9 @@ Supported Log Pages (Log Identifier 00h)
``NVME_CMD_EFFECTS_CCC``
Controller Capability Change
+``NVME_CMD_EFFECTS_CSER_MASK``
+ Command Submission and Execution Relaxations
+
``NVME_CMD_EFFECTS_CSE_MASK``
Command Submission and Execution
@@ -5879,6 +6129,9 @@ bytes, in size. This log captures the controller’s internal state.
``NVME_PEL_THERMAL_EXCURSION_EVENT``
Thermal Excursion Event
+``NVME_PEL_SANITIZE_MEDIA_VERIF_EVENT``
+ Sanitize Media Verification Event
+
``NVME_PEL_VENDOR_SPECIFIC_EVENT``
Vendor Specific Event
@@ -7289,6 +7542,39 @@ bytes, in size. This log captures the controller’s internal state.
+.. c:struct:: nvme_lockdown_log
+
+ Command and Feature Lockdown Log
+
+**Definition**
+
+::
+
+ struct nvme_lockdown_log {
+ __u8 cfila;
+ __u8 rsvd1[2];
+ __u8 lngth;
+ __u8 cfil[508];
+ };
+
+**Members**
+
+``cfila``
+ Contents of the Command and Feature Identifier List field in the log page.
+
+``rsvd1``
+ Reserved
+
+``lngth``
+ Length of Command and Feature Identifier List field
+
+``cfil``
+ Command and Feature Identifier List
+
+
+
+
+
.. c:struct:: nvme_resv_notification_log
Reservation Notification Log
@@ -7369,7 +7655,9 @@ bytes, in size. This log captures the controller’s internal state.
__le32 etond;
__le32 etbend;
__le32 etcend;
- __u8 rsvd32[480];
+ __le32 etpvds;
+ __u8 ssi;
+ __u8 rsvd37[475];
};
**Members**
@@ -7456,7 +7744,19 @@ bytes, in size. This log captures the controller’s internal state.
started that operation is completed. A value of FFFFFFFFh indicates
that no time period is reported.
-``rsvd32``
+``etpvds``
+ Estimated Time For Post-Verification Deallocation State: indicates the
+ number of seconds required to deallocate all media allocated for user data
+ after exiting the Media Verification state (i.e., the time difference between
+ entering and exiting the Post-Verification Deallocation state), if that state
+ is entered as part of the sanitize operation. A value of FFFFFFFFh indicates
+ that no time period is reported.
+
+``ssi``
+ Sanitize State Information: indicate the state of the Sanitize Operation
+ State Machine.
+
+``rsvd37``
Reserved
@@ -7532,6 +7832,79 @@ bytes, in size. This log captures the controller’s internal state.
or since the most recent successful sanitize
operation.
+``NVME_SANITIZE_SSTAT_MVCNCLD_SHIFT``
+ Shift amount to get the value of Media Verification
+ Canceled bit of Sanitize status field.
+
+``NVME_SANITIZE_SSTAT_MVCNCLD_MASK``
+ Mask to get the value of Media Verification Canceled
+ bit of Sanitize status field.
+
+
+
+
+.. c:enum:: nvme_sanitize_ssi
+
+ Sanitize State Information (SSI)
+
+**Constants**
+
+``NVME_SANITIZE_SSI_SANS_SHIFT``
+ Shift amount to get the value of Sanitize State
+ from Sanitize State Information (SSI) field.
+
+``NVME_SANITIZE_SSI_SANS_MASK``
+ Mask to get the value of Sanitize State from
+ Sanitize State Information (SSI) field.
+
+``NVME_SANITIZE_SSI_FAILS_SHIFT``
+ Shift amount to get the value of Failure State
+ from Sanitize State Information (SSI) field.
+
+``NVME_SANITIZE_SSI_FAILS_MASK``
+ Mask to get the value of Failure State from
+ Sanitize State Information (SSI) field.
+
+``NVME_SANITIZE_SSI_IDLE``
+ No sanitize operation is in process.
+
+``NVME_SANITIZE_SSI_RESTRICT_PROCESSING``
+ The Sanitize operation is in Restricted Processing
+ State.
+
+``NVME_SANITIZE_SSI_RESTRICT_FAILURE``
+ The Sanitize operation is in Restricted Failure
+ State. This state is entered if sanitize processing
+ was performed in the Restricted Processing state and
+ sanitize processing failed or a failure occurred
+ during deallocation of media allocated for user data
+ in the Post-Verification Deallocation state.
+
+``NVME_SANITIZE_SSI_UNRESTRICT_PROCESSING``
+ The Sanitize operation is in Unrestricted Processing
+ State.
+
+``NVME_SANITIZE_SSI_UNRESTRICT_FAILURE``
+ The Sanitize operation is in Unrestricted Failure
+ State. This state is entered if sanitize processing
+ was performed in the Unrestricted Processing state
+ and sanitize processing failed or a failure occurred
+ during deallocation of media allocated for user data
+ in the Post-Verification.
+
+``NVME_SANITIZE_SSI_MEDIA_VERIFICATION``
+ The Sanitize operation is in Media Verification
+ State. In this state, the sanitize processing
+ completed successfully, and all media allocated for
+ user data in the sanitization target is readable by
+ the host for purposes of verifying sanitization.
+
+``NVME_SANITIZE_SSI_POST_VERIF_DEALLOC``
+ The Sanitize operation is in Post-Verification
+ Deallocation State. In this state, the controller
+ shall deallocate all media allocated for user data
+ in the sanitization target.
+
@@ -7778,6 +8151,66 @@ bytes, in size. This log captures the controller’s internal state.
+.. c:enum:: nvme_lockdown_log_scope
+
+ lockdown log page scope attributes
+
+**Constants**
+
+``NVME_LOCKDOWN_ADMIN_CMD``
+ Scope value for Admin commandS
+
+``NVME_LOCKDOWN_FEATURE_ID``
+ Scope value for Feature ID
+
+``NVME_LOCKDOWN_MI_CMD_SET``
+ Scope value for Management Interface commands
+
+``NVME_LOCKDOWN_PCI_CMD_SET``
+ Scope value for PCI commands
+
+
+
+
+.. c:enum:: nvme_lockdown_log_contents
+
+ lockdown log page content attributes
+
+**Constants**
+
+``NVME_LOCKDOWN_SUPPORTED_CMD``
+ Content value for Supported commands
+
+``NVME_LOCKDOWN_PROHIBITED_CMD``
+ Content value for prohibited commands
+
+``NVME_LOCKDOWN_PROHIBITED_OUTOFBAND_CMD``
+ Content value for prohibited side band commands
+
+
+
+
+.. c:enum:: nvme_lockdown_scope_contents
+
+ Lockdown Log shift and mask
+
+**Constants**
+
+``NVME_LOCKDOWN_SS_SHIFT``
+ Lockdown log scope select Shift
+
+``NVME_LOCKDOWN_SS_MASK``
+ Lockdown log scope select Mask
+
+``NVME_LOCKDOWN_CS_SHIFT``
+ Lockdown log contents Shift
+
+``NVME_LOCKDOWN_CS_MASK``
+ Lockdown log contents Mask
+
+
+
+
.. c:struct:: nvme_fdp_config_desc
FDP Configuration Descriptor
@@ -8373,6 +8806,28 @@ bytes, in size. This log captures the controller’s internal state.
+.. c:enum:: nvme_lba_status_cmpc
+
+ Get LBA Status Command Completion Condition
+
+**Constants**
+
+``NVME_LBA_STATUS_CMPC_NO_CMPC``
+ No indication of the completion condition
+
+``NVME_LBA_STATUS_CMPC_INCOMPLETE``
+ Command completed, but additional LBA Status
+ Descriptor Entries are available to transfer
+ or scan did not complete (if ATYPE = 10h)
+
+``NVME_LBA_STATUS_CMPC_COMPLETE``
+ Completed the specified action over the number
+ of LBAs specified in the Range Length field and
+ transferred all available LBA Status Descriptors
+
+
+
+
.. c:struct:: nvme_feat_auto_pst
Autonomous Power State Transition
@@ -11550,6 +12005,30 @@ entries are of a variable lengths (TEL), TEL is always a multiple of
Host NQN used by the DDC to connect
to the CDC.
+``NVME_SC_INVALID_CONTROLER_DATA_QUEUE``
+ This error indicates that the
+ specified Controller Data Queue
+ Identifier is invalid for the controller
+ processing the command.
+
+``NVME_SC_NOT_ENOUGH_RESOURCES``
+ This error indicates that there is not
+ enough resources in the controller to
+ process the command.
+
+``NVME_SC_CONTROLLER_SUSPENDED``
+ The operation requested is not allowed if
+ the specified controller is suspended.
+
+``NVME_SC_CONTROLLER_NOT_SUSPENDED``
+ The operation requested is not allowed if
+ the specified controller is not
+ suspended.
+
+``NVME_SC_CONTROLLER_DATA_QUEUE_FULL``
+ The controller detected that a
+ Controller Data Queue became full.
+
``NVME_SC_BAD_ATTRIBUTES``
Conflicting Dataset Management Attributes
@@ -12088,6 +12567,11 @@ true if **status** is of the specified type and value
``NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE``
Base Specification 2.0a section 5.17.2.21
+``NVME_IDENTIFY_CNS_SUPPORTED_CTRL_STATE_FORMATS``
+ Supported Controller State Formats
+ identifying the supported NVMe Controller
+ State data structures
+
@@ -12163,9 +12647,27 @@ true if **status** is of the specified type and value
``NVME_LOG_LID_BOOT_PARTITION``
Boot Partition
+``NVME_LOG_LID_ROTATIONAL_MEDIA_INFO``
+ Rotational Media Information
+
+``NVME_LOG_LID_DISPERSED_NS_PARTICIPATING_NSS``
+ Dispersed Namespace Participating NVM Subsystems
+
+``NVME_LOG_LID_MGMT_ADDR_LIST``
+ Management Address List
+
``NVME_LOG_LID_PHY_RX_EOM``
Physical Interface Receiver Eye Opening Measurement
+``NVME_LOG_LID_REACHABILITY_GROUPS``
+ Reachability Groups
+
+``NVME_LOG_LID_REACHABILITY_ASSOCIATIONS``
+ Reachability Associations
+
+``NVME_LOG_LID_CHANGED_ALLOC_NS_LIST``
+ Changed Allocated Namespace List
+
``NVME_LOG_LID_FDP_CONFIGS``
FDP Configurations
@@ -12181,6 +12683,15 @@ true if **status** is of the specified type and value
``NVME_LOG_LID_DISCOVER``
Discovery
+``NVME_LOG_LID_HOST_DISCOVER``
+ Host Discovery
+
+``NVME_LOG_LID_AVE_DISCOVER``
+ AVE Discovery
+
+``NVME_LOG_LID_PULL_MODEL_DDC_REQ``
+ Pull Model DDC Request
+
``NVME_LOG_LID_RESERVATION``
Reservation Notification
@@ -12782,6 +13293,9 @@ true if **status** is of the specified type and value
``NVME_SANITIZE_SANACT_START_CRYPTO_ERASE``
Start a Crypto Erase sanitize operation.
+``NVME_SANITIZE_SANACT_EXIT_MEDIA_VERIF``
+ Exit Media Verification State
+
@@ -13151,6 +13665,45 @@ true if **status** is of the specified type and value
+.. c:enum:: nvme_kv_opcode
+
+ Opcodes for KV Commands
+
+**Constants**
+
+``nvme_kv_cmd_flush``
+ Flush
+
+``nvme_kv_cmd_store``
+ Store
+
+``nvme_kv_cmd_retrieve``
+ Retrieve
+
+``nvme_kv_cmd_list``
+ List
+
+``nvme_kv_cmd_resv_register``
+ Reservation Register
+
+``nvme_kv_cmd_resv_report``
+ Reservation Report
+
+``nvme_kv_cmd_delete``
+ Delete
+
+``nvme_kv_cmd_resv_acquire``
+ Reservation Acquire
+
+``nvme_kv_cmd_exist``
+ Exist
+
+``nvme_kv_cmd_resv_release``
+ Reservation Release
+
+
+
+
.. c:enum:: nvme_io_control_flags
I/O control flags
diff --git a/doc/rst/util.rst b/doc/rst/util.rst
index 56df0f6..6d024ed 100644
--- a/doc/rst/util.rst
+++ b/doc/rst/util.rst
@@ -73,6 +73,9 @@ libnvme utility functions
``ENVME_CONNECT_IGNORED``
connect attempt is ignored due to configuration
+``ENVME_CONNECT_NOKEY``
+ the TLS key is missing
+
.. c:function:: __u8 nvme_status_to_errno (int status, bool fabrics)
diff --git a/examples/mi-mctp.c b/examples/mi-mctp.c
index 75437c0..cea7ed8 100644
--- a/examples/mi-mctp.c
+++ b/examples/mi-mctp.c
@@ -241,6 +241,104 @@ int do_identify(nvme_mi_ep_t ep, int argc, char **argv)
return 0;
}
+int do_control_primitive(nvme_mi_ep_t ep, int argc, char **argv)
+{
+ int rc = 0;
+ char *action = NULL;
+ uint8_t opcode = 0xff;
+ uint16_t cpsr;
+
+ static const struct {
+ const char *name;
+ uint8_t opcode;
+ } control_actions[] = {
+ { "pause", nvme_mi_control_opcode_pause },
+ { "resume", nvme_mi_control_opcode_resume },
+ { "abort", nvme_mi_control_opcode_abort },
+ { "get-state", nvme_mi_control_opcode_get_state },
+ { "replay", nvme_mi_control_opcode_replay },
+ };
+
+ static const char * const slot_state[] = {
+ "Idle",
+ "Receive",
+ "Process",
+ "Transmit",
+ };
+
+ static const char * const cpas_state[] = {
+ "Command aborted after processing completed or no command to abort",
+ "Command aborted before processing began",
+ "Command processing partially completed",
+ "Reserved",
+ };
+
+ if (argc < 2) {
+ fprintf(stderr, "no opcode specified\n");
+ return -1;
+ }
+
+ action = argv[1];
+
+ for (int i = 0; i < ARRAY_SIZE(control_actions); i++) {
+ if (!strcmp(action, control_actions[i].name)) {
+ opcode = control_actions[i].opcode;
+ break;
+ }
+ }
+
+ if (opcode == 0xff) {
+ fprintf(stderr, "invalid action specified: %s\n", action);
+ return -1;
+ }
+
+ rc = nvme_mi_control(ep, opcode, 0, &cpsr); /* cpsp reserved in example */
+ if (rc) {
+ warn("can't perform primitive control command");
+ return -1;
+ }
+
+ printf("NVMe control primitive\n");
+ switch (opcode) {
+ case nvme_mi_control_opcode_pause:
+ printf(" Pause : cspr is %#x\n", cpsr);
+ printf(" Pause Flag Status Slot 0: %s\n", (cpsr & (1 << 0)) ? "Yes" : "No");
+ printf(" Pause Flag Status Slot 1: %s\n", (cpsr & (1 << 1)) ? "Yes" : "No");
+ break;
+ case nvme_mi_control_opcode_resume:
+ printf(" Resume : cspr is %#x\n", cpsr);
+ break;
+ case nvme_mi_control_opcode_abort:
+ printf(" Abort : cspr is %#x\n", cpsr);
+ printf(" Command Aborted Status: %s\n", cpas_state[cpsr & 0x3]);
+ break;
+ case nvme_mi_control_opcode_get_state:
+ printf(" Get State : cspr is %#x\n", cpsr);
+ printf(" Slot Command Servicing State: %s\n", slot_state[cpsr & 0x3]);
+ printf(" Bad Message Integrity Check: %s\n", (cpsr & (1 << 4)) ? "Yes" : "No");
+ printf(" Timeout Waiting for a Packet: %s\n", (cpsr & (1 << 5)) ? "Yes" : "No");
+ printf(" Unsupported Transmission Unit: %s\n", (cpsr & (1 << 6)) ? "Yes" : "No");
+ printf(" Bad Header Version: %s\n", (cpsr & (1 << 7)) ? "Yes" : "No");
+ printf(" Unknown Destination ID: %s\n", (cpsr & (1 << 8)) ? "Yes" : "No");
+ printf(" Incorrect Transmission Unit: %s\n", (cpsr & (1 << 9)) ? "Yes" : "No");
+ printf(" Unexpected Middle or End of Packet: %s\n", (cpsr & (1 << 10)) ? "Yes" : "No");
+ printf(" Out-of-Sequence Packet Sequence Number: %s\n", (cpsr & (1 << 11)) ? "Yes" : "No");
+ printf(" Bad, Unexpected, or Expired Message Tag: %s\n", (cpsr & (1 << 12)) ? "Yes" : "No");
+ printf(" Bad Packet or Other Physical Layer: %s\n", (cpsr & (1 << 13)) ? "Yes" : "No");
+ printf(" NVM Subsystem Reset Occurred: %s\n", (cpsr & (1 << 14)) ? "Yes" : "No");
+ printf(" Pause Flag: %s\n", (cpsr & (1 << 15)) ? "Yes" : "No");
+ break;
+ case nvme_mi_control_opcode_replay:
+ printf(" Replay : cspr is %#x\n", cpsr);
+ break;
+ default:
+ /* unreachable */
+ break;
+ }
+
+ return 0;
+}
+
void fhexdump(FILE *fp, const unsigned char *buf, int len)
{
const int row_len = 16;
@@ -630,6 +728,7 @@ enum action {
ACTION_SECURITY_INFO,
ACTION_CONFIG_GET,
ACTION_CONFIG_SET,
+ ACTION_CONTROL_PRIMITIVE,
};
static int do_action_endpoint(enum action action, nvme_mi_ep_t ep, int argc, char** argv)
@@ -661,6 +760,9 @@ static int do_action_endpoint(enum action action, nvme_mi_ep_t ep, int argc, cha
case ACTION_CONFIG_SET:
rc = do_config_set(ep, argc, argv);
break;
+ case ACTION_CONTROL_PRIMITIVE:
+ rc = do_control_primitive(ep, argc, argv);
+ break;
default:
/* This shouldn't be possible, as we should be covering all
* of the enum action options above. Hoever, keep the compilers
@@ -707,6 +809,7 @@ int main(int argc, char **argv)
" security-info <controller-id>\n"
" get-config [port]\n"
" set-config <port> <type> <val>\n"
+ " control-primitive [action(abort|pause|resume|get-state|replay)]\n"
"\n"
" 'dbus' target will query D-Bus for known MCTP endpoints\n"
);
@@ -736,6 +839,8 @@ int main(int argc, char **argv)
action = ACTION_CONFIG_GET;
} else if (!strcmp(action_str, "set-config")) {
action = ACTION_CONFIG_SET;
+ } else if (!strcmp(action_str, "control-primitive")) {
+ action = ACTION_CONTROL_PRIMITIVE;
} else {
fprintf(stderr, "invalid action '%s'\n", action_str);
return EXIT_FAILURE;
diff --git a/meson.build b/meson.build
index bcdd896..301bf3d 100644
--- a/meson.build
+++ b/meson.build
@@ -8,7 +8,7 @@
project(
'libnvme', ['c'],
meson_version: '>= 0.50.0',
- version: '1.10',
+ version: '1.11',
license: 'LGPL-2.1-or-later',
default_options: [
'c_std=gnu99',
diff --git a/scripts/build.sh b/scripts/build.sh
index f820ade..c4849e7 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -115,6 +115,7 @@ config_meson_docs() {
CC="${CC}" "${MESON}" setup \
-Ddocs=all \
-Ddocs-build=true \
+ --prefix=/tmp/usr \
"${BUILDDIR}"
}
@@ -198,6 +199,11 @@ test_muon() {
ninja="${SAMU}" "${MUON}" -C "${BUILDDIR}" test
}
+install_meson_docs() {
+ "${MESON}" install \
+ -C "${BUILDDIR}"
+}
+
if [[ "${BUILDTOOL}" == "muon" ]]; then
SAMU="$(which samu 2> /dev/null)" || true
if [[ -z "${SAMU}" ]]; then
@@ -220,3 +226,4 @@ rm -rf "${BUILDDIR}"
config_"${BUILDTOOL}"_"${CONFIG}"
fn_exists "build_${BUILDTOOL}_${CONFIG}" && "build_${BUILDTOOL}_${CONFIG}" || build_"${BUILDTOOL}"
fn_exists "test_${BUILDTOOL}_${CONFIG}" && "test_${BUILDTOOL}_${CONFIG}" || test_"${BUILDTOOL}"
+fn_exists "install_${BUILDTOOL}_${CONFIG}" && "install_${BUILDTOOL}_${CONFIG}" || true;
diff --git a/src/libnvme-mi.map b/src/libnvme-mi.map
index 1fa3cd8..11b3954 100644
--- a/src/libnvme-mi.map
+++ b/src/libnvme-mi.map
@@ -1,3 +1,8 @@
+LIBNVME_MI_1_11 {
+ global:
+ nvme_mi_control;
+};
+
LIBNVME_MI_1_10 {
global:
nvme_mi_admin_get_ana_log_atomic;
diff --git a/src/libnvme.map b/src/libnvme.map
index fbdc6c7..d60d076 100644
--- a/src/libnvme.map
+++ b/src/libnvme.map
@@ -1,4 +1,18 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
+LIBNVME_1.11 {
+ global:
+ nvme_ctrl_get_keyring;
+ nvme_ctrl_get_tls_key;
+ nvme_ctrl_get_tls_key_identity;
+ nvme_ctrl_set_keyring;
+ nvme_ctrl_set_tls_key;
+ nvme_ctrl_set_tls_key_identity;
+ nvme_export_tls_key_versioned;
+ nvme_import_tls_key_versioned;
+ nvmf_connect_ctrl;
+};
+
+
LIBNVME_1.10 {
global:
nvme_free_uri;
diff --git a/src/nvme/api-types.h b/src/nvme/api-types.h
index 296a7b0..4cf8e8c 100644
--- a/src/nvme/api-types.h
+++ b/src/nvme/api-types.h
@@ -511,6 +511,7 @@ struct nvme_get_property_args {
* @owpass: Overwrite pass count
* @oipbp: Set to overwrite invert pattern between passes
* @nodas: Set to not deallocate blocks after sanitizing
+ * @emvs: Set to enter media verification state
*/
struct nvme_sanitize_nvm_args {
__u32 *result;
@@ -523,6 +524,7 @@ struct nvme_sanitize_nvm_args {
__u8 owpass;
bool oipbp;
bool nodas;
+ bool emvs;
};
/**
diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c
index acf12bc..69acf04 100644
--- a/src/nvme/fabrics.c
+++ b/src/nvme/fabrics.c
@@ -309,6 +309,22 @@ static int __add_bool_argument(char **argstr, char *tok, bool arg)
return 0;
}
+static int __add_hex_argument(char **argstr, char *tok, int arg, bool allow_zero)
+{
+ char *nstr;
+
+ if (arg < 0 || (!arg && !allow_zero))
+ return 0;
+ if (asprintf(&nstr, "%s,%s=0x%08x", *argstr, tok, arg) < 0) {
+ errno = ENOMEM;
+ return -1;
+ }
+ free(*argstr);
+ *argstr = nstr;
+
+ return 0;
+}
+
static int __add_int_argument(char **argstr, char *tok, int arg, bool allow_zero)
{
char *nstr;
@@ -363,7 +379,7 @@ static int __nvmf_supported_options(nvme_root_t r);
!__nvmf_supported_options(r) && (r)->options->tok; \
})
-#define add_bool_argument(o, argstr, tok, arg) \
+#define add_bool_argument(r, argstr, tok, arg) \
({ \
int ret; \
if (nvmf_check_option(r, tok)) { \
@@ -379,7 +395,24 @@ static int __nvmf_supported_options(nvme_root_t r);
ret; \
})
-#define add_int_argument(o, argstr, tok, arg, allow_zero) \
+#define add_hex_argument(r, argstr, tok, arg, allow_zero) \
+({ \
+ int ret; \
+ if (nvmf_check_option(r, tok)) { \
+ ret = __add_hex_argument(argstr, \
+ stringify(tok), \
+ arg, \
+ allow_zero); \
+ } else { \
+ nvme_msg(r, LOG_DEBUG, \
+ "option \"%s\" ignored\n", \
+ stringify(tok)); \
+ ret = 0; \
+ } \
+ ret; \
+})
+
+#define add_int_argument(r, argstr, tok, arg, allow_zero) \
({ \
int ret; \
if (nvmf_check_option(r, tok)) { \
@@ -396,7 +429,7 @@ static int __nvmf_supported_options(nvme_root_t r);
ret; \
})
-#define add_int_or_minus_one_argument(o, argstr, tok, arg) \
+#define add_int_or_minus_one_argument(r, argstr, tok, arg) \
({ \
int ret; \
if (nvmf_check_option(r, tok)) { \
@@ -552,6 +585,9 @@ static int build_options(nvme_host_t h, nvme_ctrl_t c, char **argstr)
const char *hostnqn, *hostid, *hostkey, *ctrlkey;
bool discover = false, discovery_nqn = false;
nvme_root_t r = h->r;
+ long keyring_id = 0;
+ long key_id = 0;
+ int ret;
if (!transport) {
nvme_msg(h->r, LOG_ERR, "need a transport (-t) argument\n");
@@ -573,19 +609,37 @@ static int build_options(nvme_host_t h, nvme_ctrl_t c, char **argstr)
errno = ENOMEM;
return -1;
}
+
if (!strcmp(nvme_ctrl_get_subsysnqn(c), NVME_DISC_SUBSYS_NAME)) {
nvme_ctrl_set_discovery_ctrl(c, true);
nvme_ctrl_set_unique_discovery_ctrl(c, false);
discovery_nqn = true;
}
+
if (nvme_ctrl_is_discovery_ctrl(c))
discover = true;
+
hostnqn = nvme_host_get_hostnqn(h);
hostid = nvme_host_get_hostid(h);
hostkey = nvme_host_get_dhchap_key(h);
if (!hostkey)
hostkey = nvme_ctrl_get_dhchap_host_key(c);
+
ctrlkey = nvme_ctrl_get_dhchap_key(c);
+
+ ret = __nvme_import_keys_from_config(h, c, &keyring_id, &key_id);
+ if (ret) {
+ errno = -ret;
+ return -1;
+ }
+
+ if (key_id == 0) {
+ if (cfg->tls_configured_key)
+ key_id = cfg->tls_configured_key;
+ else
+ key_id = cfg->tls_key;
+ }
+
if (add_argument(r, argstr, transport, transport) ||
add_argument(r, argstr, traddr,
nvme_ctrl_get_traddr(c)) ||
@@ -627,9 +681,9 @@ static int build_options(nvme_host_t h, nvme_ctrl_t c, char **argstr)
cfg->fast_io_fail_tmo, false)) ||
(strcmp(transport, "loop") &&
add_int_argument(r, argstr, tos, cfg->tos, true)) ||
- add_int_argument(r, argstr, keyring, cfg->keyring, false) ||
+ add_hex_argument(r, argstr, keyring, keyring_id, false) ||
(!strcmp(transport, "tcp") &&
- add_int_argument(r, argstr, tls_key, cfg->tls_key, false)) ||
+ add_hex_argument(r, argstr, tls_key, key_id, false)) ||
add_bool_argument(r, argstr, duplicate_connect,
cfg->duplicate_connect) ||
add_bool_argument(r, argstr, disable_sqflow,
@@ -760,7 +814,7 @@ static int __nvmf_add_ctrl(nvme_root_t r, const char *argstr)
(int)strcspn(argstr,"\n"), argstr);
ret = write(fd, argstr, len);
if (ret != len) {
- nvme_msg(r, LOG_NOTICE, "Failed to write to %s: %s\n",
+ nvme_msg(r, LOG_INFO, "Failed to write to %s: %s\n",
nvmf_dev, strerror(errno));
switch (errno) {
case EALREADY:
@@ -777,6 +831,8 @@ static int __nvmf_add_ctrl(nvme_root_t r, const char *argstr)
return -ENVME_CONNECT_CONNREFUSED;
case EADDRNOTAVAIL:
return -ENVME_CONNECT_ADDRNOTAVAIL;
+ case ENOKEY:
+ return -ENVME_CONNECT_NOKEY;
default:
return -ENVME_CONNECT_WRITE;
}
@@ -864,6 +920,15 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c,
key = nvme_ctrl_get_dhchap_key(fc);
if (key)
nvme_ctrl_set_dhchap_key(c, key);
+ key = nvme_ctrl_get_keyring(fc);
+ if (key)
+ nvme_ctrl_set_keyring(c, key);
+ key = nvme_ctrl_get_tls_key_identity(fc);
+ if (key)
+ nvme_ctrl_set_tls_key_identity(c, key);
+ key = nvme_ctrl_get_tls_key(fc);
+ if (key)
+ nvme_ctrl_set_tls_key(c, key);
}
}
@@ -916,6 +981,24 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c,
return nvme_init_ctrl(h, c, ret);
}
+int nvmf_connect_ctrl(nvme_ctrl_t c)
+{
+ _cleanup_free_ char *argstr = NULL;
+ int ret;
+
+ ret = build_options(c->s->h, c, &argstr);
+ if (ret)
+ return ret;
+
+ ret = __nvmf_add_ctrl(c->s->h->r, argstr);
+ if (ret < 0) {
+ errno = -ret;
+ return -1;
+ }
+
+ return 0;
+}
+
nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h,
struct nvmf_disc_log_entry *e,
const struct nvme_fabrics_config *cfg,
diff --git a/src/nvme/fabrics.h b/src/nvme/fabrics.h
index 8e26e9f..4da4388 100644
--- a/src/nvme/fabrics.h
+++ b/src/nvme/fabrics.h
@@ -37,6 +37,7 @@
* @tos: Type of service
* @keyring: Keyring to store and lookup keys
* @tls_key: TLS PSK for the connection
+ * @tls_configured_key: TLS PSK for connect command for the connection
* @duplicate_connect: Allow multiple connections to the same target
* @disable_sqflow: Disable controller sq flow control
* @hdr_digest: Generate/verify header digest (TCP)
@@ -58,6 +59,7 @@ struct nvme_fabrics_config {
int tos;
long keyring;
long tls_key;
+ long tls_configured_key;
bool duplicate_connect;
bool disable_sqflow;
@@ -222,6 +224,17 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c,
const struct nvme_fabrics_config *cfg);
/**
+ * nvmf_connect_ctrl() - Connect a controller
+ * @c: Controller to be connected
+ *
+ * Issues a 'connect' command to the NVMe-oF controller.
+ * @c must be initialized and not connected to the topology.
+ *
+ * Return: 0 on success; on failure errno is set and -1 is returned.
+ */
+int nvmf_connect_ctrl(nvme_ctrl_t c);
+
+/**
* nvmf_get_discovery_log() - Return the discovery log page
* @c: Discovery controller to use
* @logp: Pointer to the log page to be returned
diff --git a/src/nvme/ioctl.c b/src/nvme/ioctl.c
index 9707829..ba9d5b1 100644
--- a/src/nvme/ioctl.c
+++ b/src/nvme/ioctl.c
@@ -625,45 +625,19 @@ int nvme_set_features_async_event(int fd, __u32 events,
int nvme_set_features_auto_pst(int fd, bool apste, bool save,
struct nvme_feat_auto_pst *apst, __u32 *result)
{
- struct nvme_set_features_args args = {
- .args_size = sizeof(args),
- .fd = fd,
- .fid = NVME_FEAT_FID_AUTO_PST,
- .nsid = NVME_NSID_NONE,
- .cdw11 = NVME_SET(!!apste, FEAT_APST_APSTE),
- .save = save,
- .uuidx = NVME_UUID_NONE,
- .data = apst,
- .data_len = sizeof(*apst),
- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
- .result = result,
- };
-
- return nvme_set_features(&args);
+ return nvme_set_features_data(fd, NVME_FEAT_FID_AUTO_PST,
+ NVME_NSID_NONE, NVME_SET(!!apste, FEAT_APST_APSTE), save,
+ sizeof(*apst), apst, result);
}
int nvme_set_features_timestamp(int fd, bool save, __u64 timestamp)
{
__le64 t = cpu_to_le64(timestamp);
struct nvme_timestamp ts = {};
- struct nvme_set_features_args args = {
- .args_size = sizeof(args),
- .fd = fd,
- .fid = NVME_FEAT_FID_TIMESTAMP,
- .nsid = NVME_NSID_NONE,
- .cdw11 = 0,
- .cdw12 = 0,
- .save = save,
- .uuidx = NVME_UUID_NONE,
- .cdw15 = 0,
- .data_len = sizeof(ts),
- .data = &ts,
- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
- .result = NULL,
- };
-
memcpy(ts.timestamp, &t, sizeof(ts.timestamp));
- return nvme_set_features(&args);
+
+ return nvme_set_features_data(fd, NVME_FEAT_FID_TIMESTAMP,
+ NVME_NSID_NONE, 0, save, sizeof(ts), &ts, NULL);
}
int nvme_set_features_hctm(int fd, __u16 tmt2, __u16 tmt1,
@@ -764,23 +738,8 @@ int nvme_set_features_lba_sts_interval(int fd, __u16 lsiri, __u16 lsipi,
int nvme_set_features_host_behavior(int fd, bool save,
struct nvme_feat_host_behavior *data)
{
- struct nvme_set_features_args args = {
- .args_size = sizeof(args),
- .fd = fd,
- .fid = NVME_FEAT_FID_HOST_BEHAVIOR,
- .nsid = NVME_NSID_NONE,
- .cdw11 = 0,
- .cdw12 = 0,
- .save = false,
- .uuidx = NVME_UUID_NONE,
- .cdw15 = 0,
- .data_len = sizeof(*data),
- .data = data,
- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
- .result = NULL,
- };
-
- return nvme_set_features(&args);
+ return nvme_set_features_data(fd, NVME_FEAT_FID_HOST_BEHAVIOR,
+ NVME_NSID_NONE, 0, false, sizeof(*data), data, NULL);
}
int nvme_set_features_sanitize(int fd, bool nodrm, bool save, __u32 *result)
@@ -809,23 +768,9 @@ int nvme_set_features_host_id(int fd, bool exhid, bool save, __u8 *hostid)
{
__u32 len = exhid ? 16 : 8;
__u32 value = !!exhid;
- struct nvme_set_features_args args = {
- .args_size = sizeof(args),
- .fd = fd,
- .fid = NVME_FEAT_FID_HOST_ID,
- .nsid = NVME_NSID_NONE,
- .cdw11 = value,
- .cdw12 = 0,
- .save = save,
- .uuidx = NVME_UUID_NONE,
- .cdw15 = 0,
- .data_len = len,
- .data = hostid,
- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
- .result = NULL,
- };
- return nvme_set_features(&args);
+ return nvme_set_features_data(fd, NVME_FEAT_FID_HOST_ID,
+ NVME_NSID_NONE, value, save, len, hostid, NULL);
}
int nvme_set_features_resv_mask(int fd, __u32 mask, bool save, __u32 *result)
@@ -1696,12 +1641,25 @@ int nvme_get_property(struct nvme_get_property_args *args)
int nvme_sanitize_nvm(struct nvme_sanitize_nvm_args *args)
{
- __u32 cdw10 = NVME_SET(args->sanact, SANITIZE_CDW10_SANACT) |
- NVME_SET(!!args->ause, SANITIZE_CDW10_AUSE) |
- NVME_SET(args->owpass, SANITIZE_CDW10_OWPASS) |
- NVME_SET(!!args->oipbp, SANITIZE_CDW10_OIPBP) |
- NVME_SET(!!args->nodas, SANITIZE_CDW10_NODAS);
- __u32 cdw11 = args->ovrpat;
+ const size_t size_v1 = sizeof_args(struct nvme_sanitize_nvm_args, nodas, __u64);
+ const size_t size_v2 = sizeof_args(struct nvme_sanitize_nvm_args, emvs, __u64);
+ __u32 cdw10, cdw11;
+
+ if (args->args_size < size_v1 || args->args_size > size_v2) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ cdw10 = NVME_SET(args->sanact, SANITIZE_CDW10_SANACT) |
+ NVME_SET(!!args->ause, SANITIZE_CDW10_AUSE) |
+ NVME_SET(args->owpass, SANITIZE_CDW10_OWPASS) |
+ NVME_SET(!!args->oipbp, SANITIZE_CDW10_OIPBP) |
+ NVME_SET(!!args->nodas, SANITIZE_CDW10_NODAS);
+
+ if (args->args_size == size_v2)
+ cdw10 |= NVME_SET(!!args->emvs, SANITIZE_CDW10_EMVS);
+
+ cdw11 = args->ovrpat;
struct nvme_passthru_cmd cmd = {
.opcode = nvme_admin_sanitize_nvm,
@@ -1710,10 +1668,6 @@ int nvme_sanitize_nvm(struct nvme_sanitize_nvm_args *args)
.timeout_ms = args->timeout,
};
- if (args->args_size < sizeof(*args)) {
- errno = EINVAL;
- return -1;
- }
return nvme_submit_admin_passthru(args->fd, &cmd, args->result);
}
diff --git a/src/nvme/ioctl.h b/src/nvme/ioctl.h
index 2ebd39c..7d407a0 100644
--- a/src/nvme/ioctl.h
+++ b/src/nvme/ioctl.h
@@ -285,11 +285,13 @@ enum nvme_cmd_dword_fields {
NVME_SANITIZE_CDW10_OWPASS_SHIFT = 4,
NVME_SANITIZE_CDW10_OIPBP_SHIFT = 8,
NVME_SANITIZE_CDW10_NODAS_SHIFT = 9,
+ NVME_SANITIZE_CDW10_EMVS_SHIFT = 10,
NVME_SANITIZE_CDW10_SANACT_MASK = 0x7,
NVME_SANITIZE_CDW10_AUSE_MASK = 0x1,
NVME_SANITIZE_CDW10_OWPASS_MASK = 0xf,
NVME_SANITIZE_CDW10_OIPBP_MASK = 0x1,
NVME_SANITIZE_CDW10_NODAS_MASK = 0x1,
+ NVME_SANITIZE_CDW10_EMVS_MASK = 0x1,
NVME_SECURITY_NSSF_SHIFT = 0,
NVME_SECURITY_SPSP0_SHIFT = 8,
NVME_SECURITY_SPSP1_SHIFT = 16,
@@ -2311,6 +2313,38 @@ static inline int nvme_get_log_persistent_event(int fd,
}
/**
+ * nvme_get_log_lockdown() - Retrieve lockdown Log
+ * @fd: File descriptor of nvme device
+ * @cnscp: Contents and Scope of Command and Feature Identifier Lists
+ * @lockdown_log: Buffer to store the lockdown log
+ *
+ * Return: The nvme command status if a response was received (see
+ * &enum nvme_status_field) or -1 with errno set otherwise.
+ */
+static inline int nvme_get_log_lockdown(int fd,
+ __u8 cnscp, struct nvme_lockdown_log *lockdown_log)
+{
+ struct nvme_get_log_args args = {
+ .lpo = 0,
+ .result = NULL,
+ .log = lockdown_log,
+ .args_size = sizeof(args),
+ .fd = fd,
+ .timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
+ .lid = NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN,
+ .len = sizeof(*lockdown_log),
+ .nsid = NVME_NSID_ALL,
+ .csi = NVME_CSI_NVM,
+ .lsi = NVME_LOG_LSI_NONE,
+ .lsp = cnscp,
+ .uuidx = NVME_UUID_NONE,
+ .rae = false,
+ .ot = false,
+ };
+ return nvme_get_log_page(fd, NVME_LOG_PAGE_PDU_SIZE, &args);
+}
+
+/**
* nvme_set_features() - Set a feature attribute
* @args: &struct nvme_set_features_args argument structure
*
@@ -2350,7 +2384,7 @@ static inline int nvme_set_features_data(int fd, __u8 fid, __u32 nsid,
.cdw15 = 0,
.data_len = data_len,
.save = save,
- .uuidx = 0,
+ .uuidx = NVME_UUID_NONE,
.fid = fid,
};
return nvme_set_features(&args);
diff --git a/src/nvme/json.c b/src/nvme/json.c
index 2c769f2..af28bd4 100644
--- a/src/nvme/json.c
+++ b/src/nvme/json.c
@@ -25,62 +25,10 @@
#define JSON_UPDATE_BOOL_OPTION(c, k, a, o) \
if (!strcmp(# a, k ) && !c->a) c->a = json_object_get_boolean(o);
-static void json_import_nvme_tls_key(nvme_ctrl_t c, const char *keyring_str,
- const char *encoded_key)
-{
- struct nvme_fabrics_config *cfg = nvme_ctrl_get_config(c);
- const char *hostnqn = nvme_host_get_hostnqn(c->s->h);
- const char *subsysnqn = nvme_ctrl_get_subsysnqn(c);
- int key_len;
- unsigned int hmac;
- long key_id;
- _cleanup_free_ unsigned char *key_data = NULL;
-
- if (!hostnqn || !subsysnqn) {
- nvme_msg(NULL, LOG_ERR, "Invalid NQNs (%s, %s)\n",
- hostnqn, subsysnqn);
- return;
- }
- key_data = nvme_import_tls_key(encoded_key, &key_len, &hmac);
- if (!key_data) {
- nvme_msg(NULL, LOG_ERR, "Failed to decode TLS Key '%s'\n",
- encoded_key);
- return;
- }
- key_id = nvme_insert_tls_key_versioned(keyring_str, "psk",
- hostnqn, subsysnqn,
- 0, hmac, key_data, key_len);
- if (key_id <= 0)
- nvme_msg(NULL, LOG_ERR, "Failed to insert TLS KEY, error %d\n",
- errno);
- else {
- cfg->tls_key = key_id;
- cfg->tls = true;
- }
-}
-
-static void json_export_nvme_tls_key(long keyring_id, long tls_key,
- struct json_object *obj)
-{
- int key_len;
- _cleanup_free_ unsigned char *key_data = NULL;
-
- key_data = nvme_read_key(keyring_id, tls_key, &key_len);
- if (key_data) {
- _cleanup_free_ char *tls_str = NULL;
-
- tls_str = nvme_export_tls_key(key_data, key_len);
- if (tls_str)
- json_object_object_add(obj, "tls_key",
- json_object_new_string(tls_str));
- }
-}
-
static void json_update_attributes(nvme_ctrl_t c,
struct json_object *ctrl_obj)
{
struct nvme_fabrics_config *cfg = nvme_ctrl_get_config(c);
- const char *keyring_str = NULL, *encoded_key = NULL;
json_object_object_foreach(ctrl_obj, key_str, val_obj) {
JSON_UPDATE_INT_OPTION(cfg, key_str,
@@ -120,31 +68,18 @@ static void json_update_attributes(nvme_ctrl_t c,
if (!strcmp("discovery", key_str) &&
!nvme_ctrl_is_discovery_ctrl(c))
nvme_ctrl_set_discovery_ctrl(c, true);
- /*
- * The JSON configuration holds the keyring description
- * which needs to be converted into the keyring serial number.
- */
- if (!strcmp("keyring", key_str) && cfg->keyring == 0) {
- long keyring;
-
- keyring_str = json_object_get_string(val_obj);
- keyring = nvme_lookup_keyring(keyring_str);
- if (keyring) {
- cfg->keyring = keyring;
- nvme_set_keyring(cfg->keyring);
- }
+ if (!strcmp("keyring", key_str))
+ nvme_ctrl_set_keyring(c,
+ json_object_get_string(val_obj));
+ if (!strcmp("tls_key_identity", key_str)) {
+ nvme_ctrl_set_tls_key_identity(c,
+ json_object_get_string(val_obj));
+ }
+ if (!strcmp("tls_key", key_str)) {
+ nvme_ctrl_set_tls_key(c,
+ json_object_get_string(val_obj));
}
- if (!strcmp("tls_key", key_str) && cfg->tls_key == 0)
- encoded_key = json_object_get_string(val_obj);
}
-
- /*
- * We might need the keyring information from the above loop,
- * so we can only import the TLS key once all entries are
- * processed.
- */
- if (encoded_key)
- json_import_nvme_tls_key(c, keyring_str, encoded_key);
}
static void json_parse_port(nvme_subsystem_t s, struct json_object *port_obj)
@@ -181,6 +116,19 @@ static void json_parse_port(nvme_subsystem_t s, struct json_object *port_obj)
attr_obj = json_object_object_get(port_obj, "dhchap_ctrl_key");
if (attr_obj)
nvme_ctrl_set_dhchap_key(c, json_object_get_string(attr_obj));
+ attr_obj = json_object_object_get(port_obj, "keyring");
+ if (attr_obj)
+ nvme_ctrl_set_keyring(c, json_object_get_string(attr_obj));
+ attr_obj = json_object_object_get(port_obj, "tls_key_identity");
+ if (attr_obj) {
+ nvme_ctrl_set_tls_key_identity(c,
+ json_object_get_string(attr_obj));
+ }
+ attr_obj = json_object_object_get(port_obj, "tls_key");
+ if (attr_obj) {
+ nvme_ctrl_set_tls_key(c,
+ json_object_get_string(attr_obj));
+ }
}
static void json_parse_subsys(nvme_host_t h, struct json_object *subsys_obj)
@@ -368,6 +316,19 @@ static void json_update_port(struct json_object *ctrl_array, nvme_ctrl_t c)
if (value)
json_object_object_add(port_obj, "dhchap_ctrl_key",
json_object_new_string(value));
+ JSON_BOOL_OPTION(cfg, port_obj, tls);
+ value = nvme_ctrl_get_keyring(c);
+ if (value)
+ json_object_object_add(port_obj, "keyring",
+ json_object_new_string(value));
+ value = nvme_ctrl_get_tls_key_identity(c);
+ if (value)
+ json_object_object_add(port_obj, "tls_key_identity",
+ json_object_new_string(value));
+ value = nvme_ctrl_get_tls_key(c);
+ if (value)
+ json_object_object_add(port_obj, "tls_key",
+ json_object_new_string(value));
JSON_INT_OPTION(cfg, port_obj, nr_io_queues, 0);
JSON_INT_OPTION(cfg, port_obj, nr_write_queues, 0);
JSON_INT_OPTION(cfg, port_obj, nr_poll_queues, 0);
@@ -384,7 +345,6 @@ static void json_update_port(struct json_object *ctrl_array, nvme_ctrl_t c)
JSON_BOOL_OPTION(cfg, port_obj, disable_sqflow);
JSON_BOOL_OPTION(cfg, port_obj, hdr_digest);
JSON_BOOL_OPTION(cfg, port_obj, data_digest);
- JSON_BOOL_OPTION(cfg, port_obj, tls);
JSON_BOOL_OPTION(cfg, port_obj, concat);
if (nvme_ctrl_is_persistent(c))
json_object_object_add(port_obj, "persistent",
@@ -392,23 +352,6 @@ static void json_update_port(struct json_object *ctrl_array, nvme_ctrl_t c)
if (nvme_ctrl_is_discovery_ctrl(c))
json_object_object_add(port_obj, "discovery",
json_object_new_boolean(true));
- /*
- * Store the keyring description in the JSON config file.
- */
- if (cfg->keyring) {
- _cleanup_free_ char *desc =
- nvme_describe_key_serial(cfg->keyring);
-
- if (desc) {
- json_object_object_add(port_obj, "keyring",
- json_object_new_string(desc));
- }
- }
- /*
- * Store the TLS key in PSK interchange format
- */
- if (cfg->tls_key)
- json_export_nvme_tls_key(cfg->keyring, cfg->tls_key, port_obj);
json_object_array_add(ctrl_array, port_obj);
}
@@ -491,11 +434,14 @@ int json_update_config(nvme_root_t r, const char *config_file)
}
}
if (!config_file) {
- ret = json_object_to_fd(1, json_root, JSON_C_TO_STRING_PRETTY);
+ ret = json_object_to_fd(1, json_root,
+ JSON_C_TO_STRING_PRETTY |
+ JSON_C_TO_STRING_NOSLASHESCAPE);
printf("\n");
} else
ret = json_object_to_file_ext(config_file, json_root,
- JSON_C_TO_STRING_PRETTY);
+ JSON_C_TO_STRING_PRETTY |
+ JSON_C_TO_STRING_NOSLASHESCAPE);
if (ret < 0) {
nvme_msg(r, LOG_ERR, "Failed to write to %s, %s\n",
config_file ? "stdout" : config_file,
@@ -564,9 +510,18 @@ static void json_dump_ctrl(struct json_object *ctrl_array, nvme_ctrl_t c)
if (!strcmp(transport, "tcp")) {
JSON_BOOL_OPTION(cfg, ctrl_obj, tls);
- if (cfg->tls_key)
- json_export_nvme_tls_key(cfg->keyring, cfg->tls_key,
- ctrl_obj);
+ value = nvme_ctrl_get_keyring(c);
+ if (value)
+ json_object_object_add(ctrl_obj, "keyring",
+ json_object_new_string(value));
+ value = nvme_ctrl_get_tls_key_identity(c);
+ if (value)
+ json_object_object_add(ctrl_obj, "tls_key_identity",
+ json_object_new_string(value));
+ value = nvme_ctrl_get_tls_key(c);
+ if (value)
+ json_object_object_add(ctrl_obj, "tls_key",
+ json_object_new_string(value));
}
JSON_BOOL_OPTION(cfg, ctrl_obj, concat);
if (nvme_ctrl_is_persistent(c))
@@ -640,7 +595,9 @@ int json_dump_tree(nvme_root_t r)
}
json_object_object_add(json_root, "hosts", host_array);
- ret = json_object_to_fd(r->log.fd, json_root, JSON_C_TO_STRING_PRETTY);
+ ret = json_object_to_fd(r->log.fd, json_root,
+ JSON_C_TO_STRING_PRETTY |
+ JSON_C_TO_STRING_NOSLASHESCAPE);
if (ret < 0) {
nvme_msg(r, LOG_ERR, "Failed to write, %s\n",
json_util_get_last_err());
diff --git a/src/nvme/linux.c b/src/nvme/linux.c
index aff0544..e74fac2 100644
--- a/src/nvme/linux.c
+++ b/src/nvme/linux.c
@@ -525,6 +525,11 @@ char *nvme_get_path_attr(nvme_path_t p, const char *attr)
}
#ifndef CONFIG_OPENSSL
+static unsigned char default_hmac(size_t key_len)
+{
+ return NVME_HMAC_ALG_NONE;
+}
+
int nvme_gen_dhchap_key(char *hostnqn, enum nvme_hmac_alg hmac,
unsigned int key_len, unsigned char *secret,
unsigned char *key)
@@ -552,7 +557,7 @@ static int derive_retained_key(int hmac, const char *hostnqn,
}
static int derive_psk_digest(const char *hostnqn, const char *subsysnqn,
- int version, int hmac,
+ int version, int cipher,
unsigned char *retained, size_t key_len,
char *digest, size_t digest_len)
{
@@ -562,7 +567,7 @@ static int derive_psk_digest(const char *hostnqn, const char *subsysnqn,
return -1;
}
-static int derive_tls_key(int version, int hmac, const char *context,
+static int derive_tls_key(int version, int cipher, const char *context,
unsigned char *retained,
unsigned char *psk, size_t key_len)
{
@@ -572,20 +577,41 @@ static int derive_tls_key(int version, int hmac, const char *context,
return -1;
}
#else /* CONFIG_OPENSSL */
-static const EVP_MD *select_hmac(int hmac, size_t *key_len)
+static unsigned char default_hmac(size_t key_len)
+{
+ unsigned char hmac = NVME_HMAC_ALG_NONE;
+
+ switch (key_len) {
+ case 32:
+ hmac = NVME_HMAC_ALG_SHA2_256;
+ break;
+ case 48:
+ hmac = NVME_HMAC_ALG_SHA2_384;
+ break;
+ case 64:
+ hmac = NVME_HMAC_ALG_SHA2_512;
+ break;
+ default:
+ break;
+ }
+ return hmac;
+}
+
+static const EVP_MD *select_hmac(int hmac, size_t *hmac_len)
{
const EVP_MD *md = NULL;
switch (hmac) {
case NVME_HMAC_ALG_SHA2_256:
md = EVP_sha256();
- *key_len = 32;
+ *hmac_len = 32;
break;
case NVME_HMAC_ALG_SHA2_384:
md = EVP_sha384();
- *key_len = 48;
+ *hmac_len = 48;
break;
default:
+ *hmac_len = 0;
break;
}
return md;
@@ -595,18 +621,51 @@ static DEFINE_CLEANUP_FUNC(
cleanup_evp_pkey_ctx, EVP_PKEY_CTX *, EVP_PKEY_CTX_free)
#define _cleanup_evp_pkey_ctx_ __cleanup__(cleanup_evp_pkey_ctx)
+/*
+ * derive_retained_key()
+ *
+ * Derive a retained key according to NVMe TCP Transport specification:
+ *
+ * The retained PSK is derived from the configured PSK. The configured PSK
+ * shall be destroyed as soon as the retained PSK is generated and stored.
+ * Each NVMe/TCP entity shall support:
+ * 1) transforming the configured PSK into a retained PSK before it is stored
+ * by the NVMe/TCP entity for repeated use with another NVMe/TCP entity; and
+ * 2) using the configured PSK as a retained PSK.
+ *
+ * The method to derive a retained PSK from a configured PSK shall be using
+ * the HKDF-Extract and HKDF-Expand-Label operations (refer to RFC 5869 and
+ * RFC 8446):
+ * 1. PRK = HKDF-Extract(0, Configured PSK); and
+ * 2. Retained PSK = HKDF-Expand-Label(PRK, “HostNQN”, NQNh,
+ * Length(Configured PSK)),
+ * where NQNh is the NQN of the host.
+ *
+ * 'hmac' indicates the hash function to be used to transform the configured
+ * PSK in a retained PSK, encoded as follows:
+ *
+ * - 0 indicates no transform (i.e., the configured PSK is used as a
+ * retained PSK)
+ * - 1 indicates SHA-256
+ * - 2 indicates SHA-384
+ */
static int derive_retained_key(int hmac, const char *hostnqn,
- unsigned char *generated,
+ unsigned char *configured,
unsigned char *retained,
size_t key_len)
{
- const EVP_MD *md;
_cleanup_evp_pkey_ctx_ EVP_PKEY_CTX *ctx = NULL;
uint16_t length = key_len & 0xFFFF;
+ const EVP_MD *md;
size_t hmac_len;
+ if (hmac == NVME_HMAC_ALG_NONE) {
+ memcpy(retained, configured, key_len);
+ return key_len;
+ }
+
md = select_hmac(hmac, &hmac_len);
- if (!md || hmac_len > key_len) {
+ if (!md || !hmac_len) {
errno = EINVAL;
return -1;
}
@@ -625,7 +684,7 @@ static int derive_retained_key(int hmac, const char *hostnqn,
errno = ENOKEY;
return -1;
}
- if (EVP_PKEY_CTX_set1_hkdf_key(ctx, generated, key_len) <= 0) {
+ if (EVP_PKEY_CTX_set1_hkdf_key(ctx, configured, key_len) <= 0) {
errno = ENOKEY;
return -1;
}
@@ -658,17 +717,39 @@ static int derive_retained_key(int hmac, const char *hostnqn,
return key_len;
}
-static int derive_tls_key(int version, int hmac, const char *context,
- unsigned char *retained,
+/*
+ * derive_tls_key()
+ *
+ * Derive a TLS PSK from a retained PSK.
+ *
+ * The TLS PSK shall be derived as follows from an input PSK (i.e., either
+ * a retained PSK or a generated PSK) and a PSK identity using the HKDF-Extract
+ * and HKDF-Expand-Label operations (refer to RFC 5869 and RFC 8446) where the
+ * hash function is the one specified by the hash specifier of the PSK identity:
+ * 1. PRK = HKDF-Extract(0, Input PSK); and
+ * 2. TLS PSK = HKDF-Expand-Label(PRK, “nvme-tls-psk”, PskIdentity, L),
+ * where PskIdentity is the PSK identity and L is the output size in bytes of
+ * the hash function (i.e., 32 for SHA-256 and 48 for SHA-384).
+ *
+ * Note that this is _not_ the hash value as specified by the configured key,
+ * but rather the hash function of the cipher suite associated with the
+ * PSK:
+ * - 1 indicates SHA-245 (for the TLS_AES_128_GCM_SHA256 cipher suite)
+ * - 2 indicates SHA-384 (for the TLS_AES_256_GCM_SHA384 cipher suite)
+ *
+ * and the value '0' is invalid here.
+ */
+static int derive_tls_key(int version, unsigned char cipher,
+ const char *context, unsigned char *retained,
unsigned char *psk, size_t key_len)
{
- const EVP_MD *md;
_cleanup_evp_pkey_ctx_ EVP_PKEY_CTX *ctx = NULL;
- size_t hmac_len;
uint16_t length = key_len & 0xFFFF;
+ const EVP_MD *md;
+ size_t hmac_len;
- md = select_hmac(hmac, &hmac_len);
- if (!md || hmac_len > key_len) {
+ md = select_hmac(cipher, &hmac_len);
+ if (!md || !hmac_len) {
errno = EINVAL;
return -1;
}
@@ -707,9 +788,9 @@ static int derive_tls_key(int version, int hmac, const char *context,
return -1;
}
if (version == 1) {
- char hash_str[4];
+ char hash_str[5];
- sprintf(hash_str, "%02d ", hmac);
+ sprintf(hash_str, "%02d ", cipher);
if (EVP_PKEY_CTX_add1_hkdf_info(ctx,
(const unsigned char *)hash_str,
strlen(hash_str)) <= 0) {
@@ -805,10 +886,10 @@ static int derive_psk_digest(const char *hostnqn, const char *subsysnqn,
char *digest, size_t digest_len)
{
static const char hmac_seed[] = "NVMe-over-Fabrics";
- size_t hmac_len;
const EVP_MD *md = select_hmac(hmac, &hmac_len);
_cleanup_hmac_ctx_ HMAC_CTX *hmac_ctx = NULL;
_cleanup_free_ unsigned char *psk_ctx = NULL;
+ size_t hmac_len;
size_t len;
hmac_ctx = HMAC_CTX_new();
@@ -816,7 +897,8 @@ static int derive_psk_digest(const char *hostnqn, const char *subsysnqn,
errno = ENOMEM;
return -1;
}
- if (!md) {
+ md = select_hmac(cipher, &hmac_len);
+ if (!md || !hmac_len) {
errno = EINVAL;
return -1;
}
@@ -886,10 +968,10 @@ int nvme_gen_dhchap_key(char *hostnqn, enum nvme_hmac_alg hmac,
unsigned char *key)
{
const char hmac_seed[] = "NVMe-over-Fabrics";
- OSSL_PARAM params[2], *p = params;
_cleanup_ossl_lib_ctx_ OSSL_LIB_CTX *lib_ctx = NULL;
_cleanup_evp_mac_ctx_ EVP_MAC_CTX *mac_ctx = NULL;
_cleanup_evp_mac_ EVP_MAC *mac = NULL;
+ OSSL_PARAM params[2], *p = params;
char *progq = NULL;
char *digest;
size_t len;
@@ -965,19 +1047,19 @@ int nvme_gen_dhchap_key(char *hostnqn, enum nvme_hmac_alg hmac,
}
static int derive_psk_digest(const char *hostnqn, const char *subsysnqn,
- int version, int hmac,
+ int version, int cipher,
unsigned char *retained, size_t key_len,
char *digest, size_t digest_len)
{
static const char hmac_seed[] = "NVMe-over-Fabrics";
- size_t hmac_len;
- OSSL_PARAM params[2], *p = params;
_cleanup_ossl_lib_ctx_ OSSL_LIB_CTX *lib_ctx = NULL;
_cleanup_evp_mac_ctx_ EVP_MAC_CTX *mac_ctx = NULL;
+ _cleanup_free_ unsigned char *psk_ctx = NULL;
_cleanup_evp_mac_ EVP_MAC *mac = NULL;
+ OSSL_PARAM params[2], *p = params;
+ size_t hmac_len;
char *progq = NULL;
char *dig = NULL;
- _cleanup_free_ unsigned char *psk_ctx = NULL;
size_t len;
lib_ctx = OSSL_LIB_CTX_new();
@@ -996,7 +1078,7 @@ static int derive_psk_digest(const char *hostnqn, const char *subsysnqn,
errno = ENOMEM;
return -1;
}
- switch (hmac) {
+ switch (cipher) {
case NVME_HMAC_ALG_SHA2_256:
dig = OSSL_DIGEST_NAME_SHA2_256;
break;
@@ -1069,12 +1151,12 @@ static int derive_psk_digest(const char *hostnqn, const char *subsysnqn,
#endif /* !CONFIG_OPENSSL_3 */
static int gen_tls_identity(const char *hostnqn, const char *subsysnqn,
- int version, int hmac, char *digest,
+ int version, int cipher, char *digest,
char *identity)
{
if (version == 0) {
sprintf(identity, "NVMe%01dR%02d %s %s",
- version, hmac, hostnqn, subsysnqn);
+ version, cipher, hostnqn, subsysnqn);
return strlen(identity);
}
if (version > 1) {
@@ -1083,7 +1165,7 @@ static int gen_tls_identity(const char *hostnqn, const char *subsysnqn,
}
sprintf(identity, "NVMe%01dR%02d %s %s %s",
- version, hmac, hostnqn, subsysnqn, digest);
+ version, cipher, hostnqn, subsysnqn, digest);
return strlen(identity);
}
@@ -1095,6 +1177,7 @@ static int derive_nvme_keys(const char *hostnqn, const char *subsysnqn,
_cleanup_free_ unsigned char *retained = NULL;
_cleanup_free_ char *digest = NULL;
char *context = identity;
+ unsigned char cipher;
int ret = -1;
if (!hostnqn || !subsysnqn || !identity || !psk) {
@@ -1111,6 +1194,11 @@ static int derive_nvme_keys(const char *hostnqn, const char *subsysnqn,
if (ret < 0)
return ret;
+ if (hmac == NVME_HMAC_ALG_NONE)
+ cipher = default_hmac(key_len);
+ else
+ cipher = hmac;
+
if (version == 1) {
size_t digest_len = 2 * key_len;
@@ -1119,25 +1207,25 @@ static int derive_nvme_keys(const char *hostnqn, const char *subsysnqn,
errno = ENOMEM;
return -1;
}
- ret = derive_psk_digest(hostnqn, subsysnqn, version, hmac,
+ ret = derive_psk_digest(hostnqn, subsysnqn, version, cipher,
retained, key_len,
digest, digest_len);
- if (ret)
+ if (ret < 0)
return ret;
context = digest;
}
- ret = gen_tls_identity(hostnqn, subsysnqn, version, hmac,
+ ret = gen_tls_identity(hostnqn, subsysnqn, version, cipher,
digest, identity);
if (ret < 0)
return ret;
- return derive_tls_key(version, hmac, context, retained,
+ return derive_tls_key(version, cipher, context, retained,
psk, key_len);
}
-static size_t nvme_identity_len(int hmac, int version, const char *hostnqn,
- const char *subsysnqn)
+static ssize_t nvme_identity_len(int hmac, int version, const char *hostnqn,
+ const char *subsysnqn)
{
- size_t len;
+ ssize_t len;
if (!hostnqn || !subsysnqn) {
errno = EINVAL;
@@ -1160,9 +1248,9 @@ char *nvme_generate_tls_key_identity(const char *hostnqn, const char *subsysnqn,
int version, int hmac,
unsigned char *configured_key, int key_len)
{
- char *identity;
- size_t identity_len;
_cleanup_free_ unsigned char *psk = NULL;
+ char *identity;
+ ssize_t identity_len;
int ret = -1;
identity_len = nvme_identity_len(hmac, version, hostnqn, subsysnqn);
@@ -1203,11 +1291,21 @@ long nvme_lookup_keyring(const char *keyring)
char *nvme_describe_key_serial(long key_id)
{
- char *desc;
+ _cleanup_free_ char *str = NULL;
+ char *last;
+
+ if (keyctl_describe_alloc(key_id, &str) < 0)
+ return NULL;
+
+ last = strrchr(str, ';');
+ if (!last)
+ return NULL;
- if (keyctl_describe_alloc(key_id, &desc) < 0)
- desc = NULL;
- return desc;
+ last++;
+ if (strlen(last) == 0)
+ return NULL;
+
+ return strdup(last);
}
long nvme_lookup_key(const char *type, const char *identity)
@@ -1337,27 +1435,17 @@ int nvme_scan_tls_keys(const char *keyring, nvme_scan_tls_keys_cb_t cb,
return ret;
}
-long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type,
- const char *hostnqn, const char *subsysnqn,
- int version, int hmac,
- unsigned char *configured_key, int key_len)
+static long __nvme_insert_tls_key_versioned(key_serial_t keyring_id, const char *key_type,
+ const char *hostnqn, const char *subsysnqn,
+ int version, int hmac,
+ unsigned char *configured_key, int key_len)
{
- key_serial_t keyring_id, key;
- _cleanup_free_ char *identity = NULL;
- size_t identity_len;
_cleanup_free_ unsigned char *psk = NULL;
+ _cleanup_free_ char *identity = NULL;
+ ssize_t identity_len;
+ key_serial_t key;
int ret;
- keyring_id = nvme_lookup_keyring(keyring);
- if (keyring_id == 0) {
- errno = ENOKEY;
- return 0;
- }
-
- ret = nvme_set_keyring(keyring_id);
- if (ret < 0)
- return 0;
-
identity_len = nvme_identity_len(hmac, version, hostnqn, subsysnqn);
if (identity_len < 0)
return 0;
@@ -1387,6 +1475,29 @@ long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type,
return key;
}
+long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type,
+ const char *hostnqn, const char *subsysnqn,
+ int version, int hmac,
+ unsigned char *configured_key, int key_len)
+{
+ key_serial_t keyring_id;
+ int ret;
+
+ keyring_id = nvme_lookup_keyring(keyring);
+ if (keyring_id == 0) {
+ errno = ENOKEY;
+ return 0;
+ }
+
+ ret = nvme_set_keyring(keyring_id);
+ if (ret < 0)
+ return 0;
+ return __nvme_insert_tls_key_versioned(keyring_id, key_type,
+ hostnqn, subsysnqn,
+ version, hmac,
+ configured_key, key_len);
+}
+
long nvme_revoke_tls_key(const char *keyring, const char *key_type,
const char *identity)
{
@@ -1405,6 +1516,94 @@ long nvme_revoke_tls_key(const char *keyring, const char *key_type,
return keyctl_revoke(key);
}
+
+static int __nvme_insert_tls_key(long keyring_id,
+ const char *hostnqn, const char *subsysnqn,
+ const char *identity, const char *key)
+{
+ _cleanup_free_ unsigned char *key_data = NULL;
+ unsigned char version;
+ unsigned char hmac;
+ size_t key_len;
+
+ key_data = nvme_import_tls_key_versioned(key, &version,
+ &hmac, &key_len);
+ if (!key_data)
+ return -EINVAL;
+
+ if (hmac == NVME_HMAC_ALG_NONE || !identity) {
+ /*
+ * This is a configured key (hmac 0) or we don't know the
+ * identity and so the assumtion is it is also a
+ * configured key. Derive a new key and load the newly
+ * created key into the keystore.
+ */
+ return __nvme_insert_tls_key_versioned(keyring_id, "psk",
+ hostnqn, subsysnqn,
+ version, hmac,
+ key_data, key_len);
+ }
+
+ return nvme_update_key(keyring_id, "psk", identity,
+ key_data, key_len);
+}
+
+int __nvme_import_keys_from_config(nvme_host_t h, nvme_ctrl_t c,
+ long *keyring_id, long *key_id)
+{
+ const char *hostnqn = nvme_host_get_hostnqn(h);
+ const char *subsysnqn = nvme_ctrl_get_subsysnqn(c);
+ const char *keyring, *key, *identity;
+ long kr_id, id = 0;
+
+ if (!hostnqn || !subsysnqn) {
+ nvme_msg(h->r, LOG_ERR, "Invalid NQNs (%s, %s)\n",
+ hostnqn, subsysnqn);
+ return -EINVAL;
+ }
+
+ keyring = nvme_ctrl_get_keyring(c);
+ if (keyring)
+ kr_id = nvme_lookup_keyring(keyring);
+ else
+ kr_id = c->cfg.keyring;
+
+ /*
+ * Fallback to the default keyring. Note this will also add the
+ * keyring to connect command line and to the JSON config output.
+ * That means we are explicitly selecting the keyring.
+ */
+ if (!kr_id)
+ kr_id = nvme_lookup_keyring(".nvme");
+
+ if (nvme_set_keyring(kr_id) < 0) {
+ nvme_msg(h->r, LOG_ERR, "Failed to set keyring\n");
+ return -errno;
+ }
+
+ key = nvme_ctrl_get_tls_key(c);
+ if (!key)
+ return 0;
+
+ identity = nvme_ctrl_get_tls_key_identity(c);
+ if (identity)
+ id = nvme_lookup_key("psk", identity);
+
+ if (!id)
+ id = __nvme_insert_tls_key(kr_id, hostnqn,
+ subsysnqn, identity, key);
+
+ if (id <= 0) {
+ nvme_msg(h->r, LOG_ERR, "Failed to insert TLS KEY, error %d\n",
+ errno);
+ return -errno;
+ }
+
+ *keyring_id = kr_id;
+ *key_id = id;
+
+ return 0;
+}
#else
long nvme_lookup_keyring(const char *keyring)
{
@@ -1478,6 +1677,12 @@ long nvme_revoke_tls_key(const char *keyring, const char *key_type,
errno = ENOTSUP;
return -1;
}
+
+int __nvme_import_keys_from_config(nvme_host_t h, nvme_ctrl_t c,
+ long *keyring_id, long *key_id)
+{
+ return -ENOTSUP;
+}
#endif
long nvme_insert_tls_key(const char *keyring, const char *key_type,
@@ -1489,21 +1694,44 @@ long nvme_insert_tls_key(const char *keyring, const char *key_type,
configured_key, key_len);
}
-char *nvme_export_tls_key(const unsigned char *key_data, int key_len)
+/*
+ * PSK Interchange Format
+ * NVMeTLSkey-<v>:<xx>:<s>:
+ *
+ * x: version as one ASCII char
+ * yy: hmac encoded as two ASCII chars
+ * 00: no transform ('configured PSK')
+ * 01: SHA-256
+ * 02: SHA-384
+ * s: 32 or 48 bytes binary followed by a CRC-32 of the configured PSK
+ * (4 bytes) encoded as base64
+ */
+char *nvme_export_tls_key_versioned(unsigned char version, unsigned char hmac,
+ const unsigned char *key_data,
+ size_t key_len)
{
- unsigned char raw_secret[52];
- char *encoded_key;
unsigned int raw_len, encoded_len, len;
unsigned long crc = crc32(0L, NULL, 0);
+ unsigned char raw_secret[52];
+ char *encoded_key;
- if (key_len == 32) {
- raw_len = 32;
- } else if (key_len == 48) {
- raw_len = 48;
- } else {
- errno = EINVAL;
- return NULL;
+ switch (hmac) {
+ case NVME_HMAC_ALG_NONE:
+ if (key_len != 32 && key_len != 48)
+ goto err_inval;
+ break;
+ case NVME_HMAC_ALG_SHA2_256:
+ if (key_len != 32)
+ goto err_inval;
+ break;
+ case NVME_HMAC_ALG_SHA2_384:
+ if (key_len != 48)
+ goto err_inval;
+ break;
+ default:
+ goto err_inval;
}
+ raw_len = key_len;
memcpy(raw_secret, key_data, raw_len);
crc = crc32(crc, raw_secret, raw_len);
@@ -1519,48 +1747,75 @@ char *nvme_export_tls_key(const unsigned char *key_data, int key_len)
return NULL;
}
memset(encoded_key, 0, encoded_len);
- len = sprintf(encoded_key, "NVMeTLSkey-1:%02x:",
- key_len == 32 ? 1 : 2);
+ len = sprintf(encoded_key, "NVMeTLSkey-%x:%02x:", version, hmac);
len += base64_encode(raw_secret, raw_len, encoded_key + len);
encoded_key[len++] = ':';
encoded_key[len++] = '\0';
return encoded_key;
+
+err_inval:
+ errno = EINVAL;
+ return NULL;
+
}
-unsigned char *nvme_import_tls_key(const char *encoded_key, int *key_len,
- unsigned int *hmac)
+char *nvme_export_tls_key(const unsigned char *key_data, int key_len)
+{
+ unsigned char hmac;
+
+ if (key_len == 32)
+ hmac = NVME_HMAC_ALG_SHA2_256;
+ else
+ hmac = NVME_HMAC_ALG_SHA2_384;
+
+ return nvme_export_tls_key_versioned(1, hmac, key_data, key_len);
+}
+
+unsigned char *nvme_import_tls_key_versioned(const char *encoded_key,
+ unsigned char *version,
+ unsigned char *hmac,
+ size_t *key_len)
{
unsigned char decoded_key[128], *key_data;
unsigned int crc = crc32(0L, NULL, 0);
unsigned int key_crc;
- int err, decoded_len;
+ int err, _version, _hmac, decoded_len;
+ size_t len;
- if (sscanf(encoded_key, "NVMeTLSkey-1:%02x:*s", &err) != 1) {
+ if (sscanf(encoded_key, "NVMeTLSkey-%d:%02x:*s",
+ &_version, &_hmac) != 2) {
errno = EINVAL;
return NULL;
}
- switch (err) {
- case 1:
- if (strlen(encoded_key) != 65) {
- errno = EINVAL;
- return NULL;
- }
+
+ if (_version != 1) {
+ errno = EINVAL;
+ return NULL;
+ }
+ *version = _version;
+
+ len = strlen(encoded_key);
+ switch (_hmac) {
+ case NVME_HMAC_ALG_NONE:
+ if (len != 65 && len != 89)
+ goto err_inval;
break;
- case 2:
- if (strlen(encoded_key) != 89) {
- errno = EINVAL;
- return NULL;
- }
+ case NVME_HMAC_ALG_SHA2_256:
+ if (len != 65)
+ goto err_inval;
+ break;
+ case NVME_HMAC_ALG_SHA2_384:
+ if (len != 89)
+ goto err_inval;
break;
default:
errno = EINVAL;
return NULL;
}
+ *hmac = _hmac;
- *hmac = err;
- err = base64_decode(encoded_key + 16, strlen(encoded_key) - 17,
- decoded_key);
+ err = base64_decode(encoded_key + 16, len - 17, decoded_key);
if (err < 0) {
errno = ENOKEY;
return NULL;
@@ -1592,4 +1847,25 @@ unsigned char *nvme_import_tls_key(const char *encoded_key, int *key_len,
*key_len = decoded_len;
return key_data;
+
+err_inval:
+ errno = EINVAL;
+ return NULL;
+}
+
+unsigned char *nvme_import_tls_key(const char *encoded_key, int *key_len,
+ unsigned int *hmac)
+{
+ unsigned char version, _hmac;
+ unsigned char *psk;
+ size_t len;
+
+ psk = nvme_import_tls_key_versioned(encoded_key, &version,
+ &_hmac, &len);
+ if (!psk)
+ return NULL;
+
+ *hmac = _hmac;
+ *key_len = len;
+ return psk;
}
diff --git a/src/nvme/linux.h b/src/nvme/linux.h
index 8e5e8ad..5dbc092 100644
--- a/src/nvme/linux.h
+++ b/src/nvme/linux.h
@@ -437,6 +437,25 @@ long nvme_revoke_tls_key(const char *keyring, const char *key_type,
char *nvme_export_tls_key(const unsigned char *key_data, int key_len);
/**
+ * nvme_export_tls_key_versioned() - Export a TLS pre-shared key
+ * @version: Indicated the representation of the TLS PSK
+ * @hmac: HMAC algorithm used to transfor the configured PSK
+ * in a retained PSK
+ * @key_data: Raw data of the key
+ * @key_len: Length of @key_data
+ *
+ * Returns @key_data in the PSK Interchange format as defined in section
+ * 3.6.1.5 of the NVMe TCP Transport specification.
+ *
+ * Return: The string containing the TLS identity or NULL with errno set
+ * on error. It is the responsibility of the caller to free the returned
+ * string.
+ */
+char *nvme_export_tls_key_versioned(unsigned char version, unsigned char hmac,
+ const unsigned char *key_data,
+ size_t key_len);
+
+/**
* nvme_import_tls_key() - Import a TLS key
* @encoded_key: TLS key in PSK interchange format
* @key_len: Length of the resulting key data
@@ -452,6 +471,24 @@ unsigned char *nvme_import_tls_key(const char *encoded_key, int *key_len,
unsigned int *hmac);
/**
+ * nvme_import_tls_key_versioned() - Import a TLS key
+ * @encoded_key: TLS key in PSK interchange format
+ * @version: Indicated the representation of the TLS PSK
+ * @hmac: HMAC algorithm used to transfor the configured
+ * PSK in a retained PSK
+ * @key_len: Length of the resulting key data
+ *
+ * Imports @key_data in the PSK Interchange format as defined in section
+ * 3.6.1.5 of the NVMe TCP Transport specification.
+ *
+ * Return: The raw data of the PSK or NULL with errno set on error. It is
+ * the responsibility of the caller to free the returned string.
+ */
+unsigned char *nvme_import_tls_key_versioned(const char *encoded_key,
+ unsigned char *version,
+ unsigned char *hmac,
+ size_t *key_len);
+/**
* nvme_submit_passthru - Low level ioctl wrapper for passthru commands
* @fd: File descriptor of the nvme device
* @ioctl_cmd: IOCTL command id
diff --git a/src/nvme/mi.c b/src/nvme/mi.c
index d98c74a..e9f39a8 100644
--- a/src/nvme/mi.c
+++ b/src/nvme/mi.c
@@ -529,6 +529,31 @@ static void nvme_mi_admin_init_resp(struct nvme_mi_resp *resp,
resp->hdr_len = sizeof(*hdr);
}
+static void nvme_mi_control_init_req(struct nvme_mi_req *req,
+ struct nvme_mi_control_req *control_req,
+ __u8 opcode, __u16 cpsp)
+{
+ memset(req, 0, sizeof(*req));
+ memset(control_req, 0, sizeof(*control_req));
+
+ control_req->hdr.type = NVME_MI_MSGTYPE_NVME;
+ control_req->hdr.nmp = (NVME_MI_ROR_REQ << 7) |
+ (NVME_MI_MT_CONTROL << 3); /* we always use command slot 0 */
+ control_req->opcode = opcode;
+ control_req->cpsp = cpu_to_le16(cpsp);
+
+ req->hdr = &control_req->hdr;
+ req->hdr_len = sizeof(*control_req);
+}
+
+static void nvme_mi_control_init_resp(struct nvme_mi_resp *resp,
+ struct nvme_mi_control_resp *control_resp)
+{
+ memset(resp, 0, sizeof(*resp));
+ resp->hdr = &control_resp->hdr;
+ resp->hdr_len = sizeof(*control_resp);
+}
+
static int nvme_mi_admin_parse_status(struct nvme_mi_resp *resp, __u32 *result)
{
struct nvme_mi_admin_resp_hdr *admin_hdr;
@@ -580,6 +605,26 @@ static int nvme_mi_admin_parse_status(struct nvme_mi_resp *resp, __u32 *result)
return nvme_status;
}
+static int nvme_mi_control_parse_status(struct nvme_mi_resp *resp, __u16 *cpsr)
+{
+ struct nvme_mi_control_resp *control_resp;
+
+ if (resp->hdr_len < sizeof(*control_resp)) {
+ errno = -EPROTO;
+ return -1;
+ }
+ control_resp = (struct nvme_mi_control_resp *)resp->hdr;
+
+ if (control_resp->status)
+ return control_resp->status |
+ (NVME_STATUS_TYPE_MI << NVME_STATUS_TYPE_SHIFT);
+
+ if (cpsr)
+ *cpsr = le16_to_cpu(control_resp->cpsr);
+
+ return control_resp->status;
+}
+
int nvme_mi_admin_xfer(nvme_mi_ctrl_t ctrl,
struct nvme_mi_admin_req_hdr *admin_req,
size_t req_data_size,
@@ -589,6 +634,7 @@ int nvme_mi_admin_xfer(nvme_mi_ctrl_t ctrl,
{
struct nvme_mi_resp resp;
struct nvme_mi_req req;
+ __u32 dlen, doff;
int rc;
/* length/offset checks. The common _submit() API will do further
@@ -647,8 +693,17 @@ int nvme_mi_admin_xfer(nvme_mi_ctrl_t ctrl,
/* limit the response size, specify offset */
admin_req->flags = 0x3;
- admin_req->dlen = cpu_to_le32(resp.data_len & 0xffffffff);
- admin_req->doff = cpu_to_le32(resp_data_offset & 0xffffffff);
+
+ /* dlen and doff have different interpretations depending on the data direction */
+ if (req_data_size) {
+ dlen = req_data_size & 0xffffffff;
+ doff = 0;
+ } else {
+ dlen = *resp_data_size & 0xffffffff;
+ doff = resp_data_offset & 0xffffffff;
+ }
+ admin_req->dlen = cpu_to_le32(dlen);
+ admin_req->doff = cpu_to_le32(doff);
rc = nvme_mi_submit(ctrl->ep, &req, &resp);
if (rc)
@@ -812,6 +867,29 @@ int nvme_mi_admin_identify_partial(nvme_mi_ctrl_t ctrl,
return 0;
}
+int nvme_mi_control(nvme_mi_ep_t ep, __u8 opcode,
+ __u16 cpsp, __u16 *result_cpsr)
+{
+ struct nvme_mi_control_resp control_resp;
+ struct nvme_mi_control_req control_req;
+ struct nvme_mi_resp resp;
+ struct nvme_mi_req req;
+ int rc = 0;
+
+ nvme_mi_control_init_req(&req, &control_req, opcode, cpsp);
+ nvme_mi_control_init_resp(&resp, &control_resp);
+
+ rc = nvme_mi_submit(ep, &req, &resp);
+ if (rc)
+ return rc;
+
+ rc = nvme_mi_control_parse_status(&resp, result_cpsr);
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
/* retrieves a MCTP-messsage-sized chunk of log page data. offset and len are
* specified within the args->data area. The `offset` parameter is a relative
* offset to the args->lpo !
diff --git a/src/nvme/mi.h b/src/nvme/mi.h
index ae32a90..3ea2b22 100644
--- a/src/nvme/mi.h
+++ b/src/nvme/mi.h
@@ -368,6 +368,52 @@ struct nvme_mi_admin_resp_hdr {
} __attribute__((packed));
/**
+ * enum nvme_mi_control_opcode - Operation code for Control Primitives.
+ * @nvme_mi_control_opcode_pause: Suspend response transmission/timeout
+ * @nvme_mi_control_opcode_resume: Resume from a paused condition
+ * @nvme_mi_control_opcode_abort: Re-initialize a Command Slot to the Idle state
+ * @nvme_mi_control_opcode_get_state: Get the state of a Command Slot
+ * @nvme_mi_control_opcode_replay: Retransmit the Response Message
+ */
+enum nvme_mi_control_opcode {
+ nvme_mi_control_opcode_pause = 0x00,
+ nvme_mi_control_opcode_resume = 0x01,
+ nvme_mi_control_opcode_abort = 0x02,
+ nvme_mi_control_opcode_get_state = 0x03,
+ nvme_mi_control_opcode_replay = 0x04,
+};
+
+/**
+ * struct nvme_mi_control_req - The Control Primitive request.
+ * @hdr: Generic MI message header
+ * @opcode: Control Primitive Opcodes (using &enum nvme_mi_control_opcode)
+ * @tag: flag - Opaque value passed from request to response
+ * @cpsp: Control Primitive Specific Parameter
+ *
+ */
+struct nvme_mi_control_req {
+ struct nvme_mi_msg_hdr hdr;
+ __u8 opcode;
+ __u8 tag;
+ __le16 cpsp;
+} __attribute((packed));
+
+/** struct nvme_mi_control_resp - The Control Primitive response.
+ * @hdr: Generic MI message header
+ * @status: Generic response code, non-zero on failure
+ * @tag: flag - Opaque value passed from request to response
+ * @cpsr: Control Primitive Specific Response
+ *
+ */
+
+struct nvme_mi_control_resp {
+ struct nvme_mi_msg_hdr hdr;
+ __u8 status;
+ __u8 tag;
+ __le16 cpsr;
+} __attribute((packed));
+
+/**
* nvme_mi_status_to_string() - return a string representation of the MI
* status.
* @status: MI response status
@@ -1076,6 +1122,24 @@ static inline int nvme_mi_admin_identify(nvme_mi_ctrl_t ctrl,
}
/**
+ * nvme_mi_control() - Perform a Control Primitive command
+ * @ep: endpoint for MI communication
+ * @opcode: Control Primitive opcode (using &enum nvme_mi_control_opcode)
+ * @cpsp: Control Primitive Specific Parameter
+ * @result_cpsr: Optional field to return the result from the CPSR field
+ *
+ * Perform a Control Primitive command, using the opcode specified in @opcode
+ * Stores the result from the CPSR field in @result_cpsr if set.
+ *
+ * Return: 0 on success, non-zero on failure
+ *
+ * See: &enum nvme_mi_control_opcode
+ *
+ */
+int nvme_mi_control(nvme_mi_ep_t ep, __u8 opcode,
+ __u16 cpsp, __u16 *result_cpsr);
+
+/**
* nvme_mi_admin_identify_cns_nsid() - Perform an Admin identify command using
* specific CNS/NSID parameters.
* @ctrl: Controller to process identify command
@@ -2369,6 +2433,36 @@ static inline int nvme_mi_admin_get_log_persistent_event(nvme_mi_ctrl_t ctrl,
}
/**
+ * nvme_mi_admin_get_log_lockdown() - Retrieve lockdown Log
+ * @ctrl: Controller to query
+ * @cnscp: Contents and Scope of Command and Feature Identifier Lists
+ * @lockdown_log: Buffer to store the lockdown log
+ *
+ * Return: The nvme command status if a response was received (see
+ * &enum nvme_status_field) or -1 with errno set otherwise.
+ */
+static inline int nvme_mi_admin_get_log_lockdown(nvme_mi_ctrl_t ctrl,
+ __u8 cnscp, struct nvme_lockdown_log *lockdown_log)
+{
+ struct nvme_get_log_args args = {
+ .lpo = 0,
+ .result = NULL,
+ .log = lockdown_log,
+ .args_size = sizeof(args),
+ .lid = NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN,
+ .len = sizeof(*lockdown_log),
+ .nsid = NVME_NSID_ALL,
+ .csi = NVME_CSI_NVM,
+ .lsi = NVME_LOG_LSI_NONE,
+ .lsp = cnscp,
+ .uuidx = NVME_UUID_NONE,
+ .rae = false,
+ .ot = false,
+ };
+ return nvme_mi_admin_get_log(ctrl, &args);
+}
+
+/**
* nvme_mi_admin_security_send() - Perform a Security Send command on a
* controller.
* @ctrl: Controller to send command to
diff --git a/src/nvme/private.h b/src/nvme/private.h
index 3fa5aca..48ddedc 100644
--- a/src/nvme/private.h
+++ b/src/nvme/private.h
@@ -85,6 +85,9 @@ struct nvme_ctrl {
char *trsvcid;
char *dhchap_key;
char *dhchap_ctrl_key;
+ char *keyring;
+ char *tls_key_identity;
+ char *tls_key;
char *cntrltype;
char *cntlid;
char *dctype;
@@ -297,4 +300,7 @@ void __nvme_mi_mctp_set_ops(const struct __mi_mctp_socket_ops *newops);
#define SECTOR_SIZE 512
#define SECTOR_SHIFT 9
+int __nvme_import_keys_from_config(nvme_host_t h, nvme_ctrl_t c,
+ long *keyring_id, long *key_id);
+
#endif /* _LIBNVME_PRIVATE_H */
diff --git a/src/nvme/tree.c b/src/nvme/tree.c
index 3722461..7fc2013 100644
--- a/src/nvme/tree.c
+++ b/src/nvme/tree.c
@@ -1151,6 +1151,51 @@ void nvme_ctrl_set_dhchap_key(nvme_ctrl_t c, const char *key)
c->dhchap_ctrl_key = strdup(key);
}
+const char *nvme_ctrl_get_keyring(nvme_ctrl_t c)
+{
+ return c->keyring;
+}
+
+void nvme_ctrl_set_keyring(nvme_ctrl_t c, const char *keyring)
+{
+ if (c->keyring) {
+ free(c->keyring);
+ c->keyring = NULL;
+ }
+ if (keyring)
+ c->keyring = strdup(keyring);
+}
+
+const char *nvme_ctrl_get_tls_key_identity(nvme_ctrl_t c)
+{
+ return c->tls_key_identity;
+}
+
+void nvme_ctrl_set_tls_key_identity(nvme_ctrl_t c, const char *identity)
+{
+ if (c->tls_key_identity) {
+ free(c->tls_key_identity);
+ c->tls_key_identity = NULL;
+ }
+ if (identity)
+ c->tls_key_identity = strdup(identity);
+}
+
+const char *nvme_ctrl_get_tls_key(nvme_ctrl_t c)
+{
+ return c->tls_key;
+}
+
+void nvme_ctrl_set_tls_key(nvme_ctrl_t c, const char *key)
+{
+ if (c->tls_key) {
+ free(c->tls_key);
+ c->tls_key = NULL;
+ }
+ if (key)
+ c->tls_key = strdup(key);
+}
+
void nvme_ctrl_set_discovered(nvme_ctrl_t c, bool discovered)
{
c->discovered = discovered;
@@ -1232,6 +1277,9 @@ void nvme_deconfigure_ctrl(nvme_ctrl_t c)
FREE_CTRL_ATTR(c->sqsize);
FREE_CTRL_ATTR(c->dhchap_key);
FREE_CTRL_ATTR(c->dhchap_ctrl_key);
+ FREE_CTRL_ATTR(c->keyring);
+ FREE_CTRL_ATTR(c->tls_key_identity);
+ FREE_CTRL_ATTR(c->tls_key);
FREE_CTRL_ATTR(c->address);
FREE_CTRL_ATTR(c->dctype);
FREE_CTRL_ATTR(c->cntrltype);
@@ -1883,11 +1931,73 @@ static char *nvme_ctrl_lookup_phy_slot(nvme_root_t r, const char *address)
return NULL;
}
+static void nvme_read_sysfs_dhchap(nvme_root_t r, nvme_ctrl_t c)
+{
+ char *host_key, *ctrl_key;
+
+ host_key = nvme_get_ctrl_attr(c, "dhchap_secret");
+ if (host_key && c->s && c->s->h && c->s->h->dhchap_key &&
+ (!strcmp(c->s->h->dhchap_key, host_key) ||
+ !strcmp("none", host_key))) {
+ free(host_key);
+ host_key = NULL;
+ }
+ if (host_key) {
+ nvme_ctrl_set_dhchap_host_key(c, NULL);
+ c->dhchap_key = host_key;
+ }
+
+ ctrl_key = nvme_get_ctrl_attr(c, "dhchap_ctrl_secret");
+ if (ctrl_key && !strcmp(ctrl_key, "none")) {
+ free(ctrl_key);
+ ctrl_key = NULL;
+ }
+ if (ctrl_key) {
+ nvme_ctrl_set_dhchap_key(c, NULL);
+ c->dhchap_ctrl_key = ctrl_key;
+ }
+}
+
+static void nvme_read_sysfs_tls(nvme_root_t r, nvme_ctrl_t c)
+{
+ char *endptr;
+ long key_id;
+ char *key, *keyring;
+
+ key = nvme_get_ctrl_attr(c, "tls_key");
+ if (!key) {
+ /* tls_key is only present if --tls has been used. */
+ return;
+ }
+ c->cfg.tls = true;
+
+ keyring = nvme_get_ctrl_attr(c, "tls_keyring");
+ nvme_ctrl_set_keyring(c, keyring);
+ free(keyring);
+
+ /* the sysfs entry is not prefixing the id but it's in hex */
+ key_id = strtol(key, &endptr, 16);
+ if (endptr != key)
+ c->cfg.tls_key = key_id;
+
+ free(key);
+
+ key = nvme_get_ctrl_attr(c, "tls_configured_key");
+ if (!key)
+ return;
+
+ /* the sysfs entry is not prefixing the id but it's in hex */
+ key_id = strtol(key, &endptr, 16);
+ if (endptr != key)
+ c->cfg.tls_configured_key = key_id;
+
+ free(key);
+}
+
static int nvme_configure_ctrl(nvme_root_t r, nvme_ctrl_t c, const char *path,
const char *name)
{
DIR *d;
- char *host_key, *tls_psk;
d = opendir(path);
if (!d) {
@@ -1908,34 +2018,12 @@ static int nvme_configure_ctrl(nvme_root_t r, nvme_ctrl_t c, const char *path,
c->queue_count = nvme_get_ctrl_attr(c, "queue_count");
c->serial = nvme_get_ctrl_attr(c, "serial");
c->sqsize = nvme_get_ctrl_attr(c, "sqsize");
- host_key = nvme_get_ctrl_attr(c, "dhchap_secret");
- if (host_key && c->s && c->s->h && c->s->h->dhchap_key &&
- (!strcmp(c->s->h->dhchap_key, host_key) ||
- !strcmp("none", host_key))) {
- free(host_key);
- host_key = NULL;
- }
- if (host_key)
- c->dhchap_key = host_key;
- c->dhchap_ctrl_key = nvme_get_ctrl_attr(c, "dhchap_ctrl_secret");
- if (c->dhchap_ctrl_key && !strcmp(c->dhchap_ctrl_key, "none")) {
- free(c->dhchap_ctrl_key);
- c->dhchap_ctrl_key = NULL;
- }
- tls_psk = nvme_get_ctrl_attr(c, "tls_key");
- if (tls_psk) {
- char *endptr;
- long key_id = strtol(tls_psk, &endptr, 16);
-
- if (endptr != tls_psk) {
- c->cfg.tls_key = key_id;
- c->cfg.tls = true;
- }
- }
c->cntrltype = nvme_get_ctrl_attr(c, "cntrltype");
c->cntlid = nvme_get_ctrl_attr(c, "cntlid");
c->dctype = nvme_get_ctrl_attr(c, "dctype");
c->phy_slot = nvme_ctrl_lookup_phy_slot(r, c->address);
+ nvme_read_sysfs_dhchap(r, c);
+ nvme_read_sysfs_tls(r, c);
errno = 0; /* cleanup after nvme_get_ctrl_attr() */
return 0;
diff --git a/src/nvme/tree.h b/src/nvme/tree.h
index 1b583cd..818e17b 100644
--- a/src/nvme/tree.h
+++ b/src/nvme/tree.h
@@ -1099,6 +1099,51 @@ const char *nvme_ctrl_get_dhchap_key(nvme_ctrl_t c);
void nvme_ctrl_set_dhchap_key(nvme_ctrl_t c, const char *key);
/**
+ * nvme_ctrl_get_keyring() - Return keyring
+ * @c: Controller to be used for the lookup
+ *
+ * Return: Keyring or NULL if not set
+ */
+const char *nvme_ctrl_get_keyring(nvme_ctrl_t c);
+
+/**
+ * nvme_ctrl_set_keyring() - Set keyring
+ * @c: Controller for which the keyring should be set
+ * @keyring: Keyring name
+ */
+void nvme_ctrl_set_keyring(nvme_ctrl_t c, const char *keyring);
+
+/**
+ * nvme_ctrl_get_tls_key_identity() - Return Derive TLS Identity
+ * @c: Controller to be used for the lookup
+ *
+ * Return: Derive TLS Identity or NULL if not set
+ */
+const char *nvme_ctrl_get_tls_key_identity(nvme_ctrl_t c);
+
+/**
+ * nvme_ctrl_set_tls_key_identity() - Set Derive TLS Identity
+ * @c: Controller for which the key should be set
+ * @identity: Derive TLS identity or NULL to clear existing key
+ */
+void nvme_ctrl_set_tls_key_identity(nvme_ctrl_t c, const char *identity);
+
+/**
+ * nvme_ctrl_get_tls_key() - Return Derive TLS PSK
+ * @c: Controller to be used for the lookup
+ *
+ * Return: Key in PSK interchange format or NULL if not set
+ */
+const char *nvme_ctrl_get_tls_key(nvme_ctrl_t c);
+
+/**
+ * nvme_ctrl_set_tls_key() - Set Derive TLS PSK
+ * @c: Controller for which the key should be set
+ * @key: Key in interchange format or NULL to clear existing key
+ */
+void nvme_ctrl_set_tls_key(nvme_ctrl_t c, const char *key);
+
+/**
* nvme_ctrl_get_config() - Fabrics configuration of a controller
* @c: Controller instance
*
diff --git a/src/nvme/types.h b/src/nvme/types.h
index 5fa969d..7d143d3 100644
--- a/src/nvme/types.h
+++ b/src/nvme/types.h
@@ -46,6 +46,24 @@
(((__u32)(value) & NVME_##name##_MASK) << NVME_##name##_SHIFT)
/**
+ * NVME_CHECK() - check value to compare field value
+ * @value: The value to be checked
+ * @name: The name of the sub-field within an nvme value
+ * @check: The sub-field value to check
+ *
+ * Returns: The result of compare the value and the sub-field value
+ */
+#define NVME_CHECK(value, name, check) ((value) == NVME_##name##_##check)
+
+/**
+ * NVME_VAL() - get mask value shifted
+ * @name: The name of the sub-field within an nvme value
+ *
+ * Returns: The mask value shifted
+ */
+#define NVME_VAL(name) (NVME_##name##_MASK << NVME_##name##_SHIFT)
+
+/**
* enum nvme_constants - A place to stash various constant nvme values
* @NVME_NSID_ALL: A broadcast value that is used to specify all
* namespaces
@@ -1293,7 +1311,8 @@ struct nvme_id_psd {
* @rsvd358: Reserved
* @megcap: Max Endurance Group Capacity indicates the maximum capacity
* of a single Endurance Group.
- * @rsvd384: Reserved
+ * @tmpthha: Temperature Threshold Hysteresis Attributes
+ * @rsvd385: Reserved
* @sqes: Submission Queue Entry Size, see &enum nvme_id_ctrl_sqes.
* @cqes: Completion Queue Entry Size, see &enum nvme_id_ctrl_cqes.
* @maxcmd: Maximum Outstanding Commands indicates the maximum number of
@@ -1341,6 +1360,39 @@ struct nvme_id_psd {
* total number of outstanding I/O commands across all I/O queues
* on the controller for optimal operation.
* @rsvd568: Reserved
+ * @cmmrtd: Controller Maximum Memory Range Tracking Descriptors indicates
+ * the maximum number of Memory Range Tracking Descriptors the
+ * controller supports.
+ * @nmmrtd: NVM Subsystem Maximum Memory Range Tracking Descriptors
+ * indicates the maximum number of Memory Range Tracking Descriptors
+ * the NVM subsystem supports.
+ * @minmrtg: Minimum Memory Range Tracking Granularity indicates the minimum
+ * value supported in the Requested Memory Range Tracking
+ * Granularity (RMRTG) field of the Track Memory Ranges data
+ * structure.
+ * @maxmrtg: Maximum Memory Range Tracking Granularity indicates the maximum
+ * value supported in the Requested Memory Range Tracking
+ * Granularity (RMRTG) field of the Track Memory Ranges data
+ * structure.
+ * @trattr: Tracking Attributes indicates supported attributes for the
+ * Track Send command and Track Receive command.
+ * @rsvd577: Reserved
+ * @mcudmq: Maximum Controller User Data Migration Queues indicates the
+ * maximum number of User Data Migration Queues supported by the
+ * controller.
+ * @mnsudmq: Maximum NVM Subsystem User Data Migration Queues indicates the
+ * maximum number of User Data Migration Queues supported by the NVM
+ * subsystem.
+ * @mcmr: Maximum CDQ Memory Ranges indicates the maximum number of
+ * memory ranges allowed to be specified by the PRP1 field of a
+ * Controller Data Queue command.
+ * @nmcmr: NVM Subsystem Maximum CDQ Memory Ranges indicates the maximum
+ * number of memory ranges for all Controller Data Queues in the
+ * NVM subsystem.
+ * @mcdqpc: Maximum Controller Data Queue PRP Count indicates the maximum
+ * number of PRPs allowed to be specified in the PRP list in the
+ * Controller Data Queue command.
+ * @rsvd588: Reserved
* @subnqn: NVM Subsystem NVMe Qualified Name, UTF-8 null terminated string
* @rsvd1024: Reserved
* @ioccsz: I/O Queue Command Capsule Supported Size, defines the maximum
@@ -1426,7 +1478,8 @@ struct nvme_id_ctrl {
__le16 domainid;
__u8 rsvd358[10];
__u8 megcap[16];
- __u8 rsvd384[128];
+ __u8 tmpthha;
+ __u8 rsvd385[127];
__u8 sqes;
__u8 cqes;
__le16 maxcmd;
@@ -1446,7 +1499,19 @@ struct nvme_id_ctrl {
__u8 maxdna[16];
__le32 maxcna;
__le32 oaqd;
- __u8 rsvd568[200];
+ __u8 rsvd568[2];
+ __u16 cmmrtd;
+ __u16 nmmrtd;
+ __u8 minmrtg;
+ __u8 maxmrtg;
+ __u8 trattr;
+ __u8 rsvd577;
+ __u16 mcudmq;
+ __u16 mnsudmq;
+ __u16 mcmr;
+ __u16 nmcmr;
+ __u16 mcdqpc;
+ __u8 rsvd588[180];
char subnqn[NVME_NQN_LENGTH];
__u8 rsvd1024[768];
@@ -1526,29 +1591,103 @@ enum nvme_id_ctrl_cmic {
/**
* enum nvme_id_ctrl_oaes - Optional Asynchronous Events Supported
+ * @NVME_CTRL_OAES_NA_SHIFT: Shift amount to get the Namespace Attribute Notices event supported
+ * @NVME_CTRL_OAES_FA_SHIFT: Shift amount to get the Firmware Activation Notices event supported
+ * @NVME_CTRL_OAES_ANA_SHIFT: Shift amount to get the ANA Change Notices supported
+ * @NVME_CTRL_OAES_PLEA_SHIFT: Shift amount to get the Predictable Latency Event Aggregate Log
+ * Change Notices event supported
+ * @NVME_CTRL_OAES_LBAS_SHIFT: Shift amount to get the LBA Status Information Notices event
+ * supported
+ * @NVME_CTRL_OAES_EGE_SHIFT: Shift amount to get the Endurance Group Events Aggregate Log Change
+ * Notices event supported
+ * @NVME_CTRL_OAES_NS_SHIFT: Shift amount to get the Normal NVM Subsystem Shutdown event supported
+ * @NVME_CTRL_OAES_TTH_SHIFT: Shift amount to get the Temperature Threshold Hysteresis Recovery
+ * event supported
+ * @NVME_CTRL_OAES_RGCNS_SHIFT: Shift amount to get the Reachability Groups Change Notices supported
+ * @NVME_CTRL_OAES_ANSAN_SHIFT: Shift amount to get the Allocated Namespace Attribute Notices
+ * supported
+ * @NVME_CTRL_OAES_ZD_SHIFT: Shift amount to get the Zone Descriptor Change Notifications supported
+ * @NVME_CTRL_OAES_DL_SHIFT: Shift amount to get the Discover Log Page Change Notifications
+ * supported
+ * @NVME_CTRL_OAES_NA_MASK: Mask to get the Namespace Attribute Notices event supported
+ * @NVME_CTRL_OAES_FA_MASK: Mask to get the Firmware Activation Notices event supported
+ * @NVME_CTRL_OAES_ANA_MASK: Mask to get the ANA Change Notices supported
+ * @NVME_CTRL_OAES_PLEA_MASK: Mask to get the Predictable Latency Event Aggregate Log Change Notices
+ * event supported
+ * @NVME_CTRL_OAES_LBAS_MASK: Mask to get the LBA Status Information Notices event supported
+ * @NVME_CTRL_OAES_EGE_MASK: Mask to get the Endurance Group Events Aggregate Log Change Notices
+ * event supported
+ * @NVME_CTRL_OAES_NS_MASK: Mask to get the Normal NVM Subsystem Shutdown event supported
+ * @NVME_CTRL_OAES_TTH_MASK: Mask to get the Temperature Threshold Hysteresis Recovery event
+ * supported
+ * @NVME_CTRL_OAES_RGCNS_MASK: Mask to get the Reachability Groups Change Notices supported
+ * @NVME_CTRL_OAES_ANSAN_MASK: Mask to get the Allocated Namespace Attribute Notices supported
+ * @NVME_CTRL_OAES_ZD_MASK: Mask to get the Zone Descriptor Change Notifications supported
+ * @NVME_CTRL_OAES_DL_MASK: Mask to get the Discover Log Page Change Notifications supported
* @NVME_CTRL_OAES_NA: Namespace Attribute Notices event supported
* @NVME_CTRL_OAES_FA: Firmware Activation Notices event supported
* @NVME_CTRL_OAES_ANA: ANA Change Notices supported
- * @NVME_CTRL_OAES_PLEA: Predictable Latency Event Aggregate Log
- * Change Notices event supported
+ * @NVME_CTRL_OAES_PLEA: Predictable Latency Event Aggregate Log Change Notices event supported
* @NVME_CTRL_OAES_LBAS: LBA Status Information Notices event supported
- * @NVME_CTRL_OAES_EGE: Endurance Group Events Aggregate Log Change
- * Notices event supported
+ * @NVME_CTRL_OAES_EGE: Endurance Group Events Aggregate Log Change Notices event supported
* @NVME_CTRL_OAES_NS: Normal NVM Subsystem Shutdown event supported
+ * @NVME_CTRL_OAES_TTH: Temperature Threshold Hysteresis Recovery event supported
+ * @NVME_CTRL_OAES_RGCNS: Reachability Groups Change Notices supported
+ * @NVME_CTRL_OAES_ANSAN: Allocated Namespace Attribute Notices supported
* @NVME_CTRL_OAES_ZD: Zone Descriptor Change Notifications supported
* @NVME_CTRL_OAES_DL: Discover Log Page Change Notifications supported
*/
enum nvme_id_ctrl_oaes {
- NVME_CTRL_OAES_NA = 1 << 8,
- NVME_CTRL_OAES_FA = 1 << 9,
- NVME_CTRL_OAES_ANA = 1 << 11,
- NVME_CTRL_OAES_PLEA = 1 << 12,
- NVME_CTRL_OAES_LBAS = 1 << 13,
- NVME_CTRL_OAES_EGE = 1 << 14,
- NVME_CTRL_OAES_NS = 1 << 15,
- NVME_CTRL_OAES_ZD = 1 << 27,
- NVME_CTRL_OAES_DL = 1 << 31,
-};
+ NVME_CTRL_OAES_NA_SHIFT = 8,
+ NVME_CTRL_OAES_FA_SHIFT = 9,
+ NVME_CTRL_OAES_ANA_SHIFT = 11,
+ NVME_CTRL_OAES_PLEA_SHIFT = 12,
+ NVME_CTRL_OAES_LBAS_SHIFT = 13,
+ NVME_CTRL_OAES_EGE_SHIFT = 14,
+ NVME_CTRL_OAES_NS_SHIFT = 15,
+ NVME_CTRL_OAES_TTH_SHIFT = 16,
+ NVME_CTRL_OAES_RGCNS_SHIFT = 17,
+ NVME_CTRL_OAES_ANSAN_SHIFT = 19,
+ NVME_CTRL_OAES_ZD_SHIFT = 27,
+ NVME_CTRL_OAES_DL_SHIFT = 31,
+ NVME_CTRL_OAES_NA_MASK = 0x1,
+ NVME_CTRL_OAES_FA_MASK = 0x1,
+ NVME_CTRL_OAES_ANA_MASK = 0x1,
+ NVME_CTRL_OAES_PLEA_MASK = 0x1,
+ NVME_CTRL_OAES_LBAS_MASK = 0x1,
+ NVME_CTRL_OAES_EGE_MASK = 0x1,
+ NVME_CTRL_OAES_NS_MASK = 0x1,
+ NVME_CTRL_OAES_TTH_MASK = 0x1,
+ NVME_CTRL_OAES_RGCNS_MASK = 0x1,
+ NVME_CTRL_OAES_ANSAN_MASK = 0x1,
+ NVME_CTRL_OAES_ZD_MASK = 0x1,
+ NVME_CTRL_OAES_DL_MASK = 0x1,
+ NVME_CTRL_OAES_NA = NVME_VAL(CTRL_OAES_NA),
+ NVME_CTRL_OAES_FA = NVME_VAL(CTRL_OAES_FA),
+ NVME_CTRL_OAES_ANA = NVME_VAL(CTRL_OAES_ANA),
+ NVME_CTRL_OAES_PLEA = NVME_VAL(CTRL_OAES_PLEA),
+ NVME_CTRL_OAES_LBAS = NVME_VAL(CTRL_OAES_LBAS),
+ NVME_CTRL_OAES_EGE = NVME_VAL(CTRL_OAES_EGE),
+ NVME_CTRL_OAES_NS = NVME_VAL(CTRL_OAES_NS),
+ NVME_CTRL_OAES_TTH = NVME_VAL(CTRL_OAES_TTH),
+ NVME_CTRL_OAES_RGCNS = NVME_VAL(CTRL_OAES_RGCNS),
+ NVME_CTRL_OAES_ANSAN = NVME_VAL(CTRL_OAES_ANSAN),
+ NVME_CTRL_OAES_ZD = NVME_VAL(CTRL_OAES_ZD),
+ NVME_CTRL_OAES_DL = NVME_VAL(CTRL_OAES_DL),
+};
+
+#define NVME_CTRL_OAES_NAN(oaes) NVME_GET(oaes, CTRL_OAES_NA)
+#define NVME_CTRL_OAES_FAN(oaes) NVME_GET(oaes, CTRL_OAES_FA)
+#define NVME_CTRL_OAES_ANACN(oaes) NVME_GET(oaes, CTRL_OAES_ANA)
+#define NVME_CTRL_OAES_PLEALCN(oaes) NVME_GET(oaes, CTRL_OAES_PLEA)
+#define NVME_CTRL_OAES_LBASIAN(oaes) NVME_GET(oaes, CTRL_OAES_LBAS)
+#define NVME_CTRL_OAES_EGEALPCN(oaes) NVME_GET(oaes, CTRL_OAES_EGE)
+#define NVME_CTRL_OAES_NNVMSS(oaes) NVME_GET(oaes, CTRL_OAES_NS)
+#define NVME_CTRL_OAES_TTHR(oaes) NVME_GET(oaes, CTRL_OAES_TTH)
+#define NVME_CTRL_OAES_RGCNS(oaes) NVME_GET(oaes, CTRL_OAES_RGCNS)
+#define NVME_CTRL_OAES_ANSAN(oaes) NVME_GET(oaes, CTRL_OAES_ANSAN)
+#define NVME_CTRL_OAES_ZDCN(oaes) NVME_GET(oaes, CTRL_OAES_ZD)
+#define NVME_CTRL_OAES_DLPCN(oaes) NVME_GET(oaes, CTRL_OAES_DL)
/**
* enum nvme_id_ctrl_ctratt - Controller attributes
@@ -1972,6 +2111,14 @@ enum nvme_id_ctrl_fuses {
/**
* enum nvme_id_ctrl_fna - This field indicates attributes for the Format NVM
* command.
+ * @NVME_CTRL_FNA_FMT_ALL_NS_SHIFT: Shift amount to get the format applied to all namespaces
+ * @NVME_CTRL_FNA_SEC_ALL_NS_SHIFT: Shift amount to get the secure erase applied to all namespaces
+ * @NVME_CTRL_FNA_CES_SHIFT: Shift amount to get the cryptographic erase supported
+ * @NVME_CTRL_FNA_NSID_ALL_F_SHIFT: Shift amount to get the format supported an NSID FFFFFFFFh
+ * @NVME_CTRL_FNA_FMT_ALL_NS_MASK: Mask to get the format applied to all namespaces
+ * @NVME_CTRL_FNA_SEC_ALL_NS_MASK: Mask to get the secure erase applied to all namespaces
+ * @NVME_CTRL_FNA_CES_MASK: Mask to get the cryptographic erase supported
+ * @NVME_CTRL_FNA_NSID_ALL_F_MASK: Mask to get the format supported an NSID FFFFFFFFh
* @NVME_CTRL_FNA_FMT_ALL_NAMESPACES: If set, then all namespaces in an NVM
* subsystem shall be configured with the
* same attributes and a format (excluding
@@ -1996,11 +2143,24 @@ enum nvme_id_ctrl_fuses {
* FFFFFFFFh.
*/
enum nvme_id_ctrl_fna {
- NVME_CTRL_FNA_FMT_ALL_NAMESPACES = 1 << 0,
- NVME_CTRL_FNA_SEC_ALL_NAMESPACES = 1 << 1,
- NVME_CTRL_FNA_CRYPTO_ERASE = 1 << 2,
- NVME_CTRL_FNA_NSID_FFFFFFFF = 1 << 3,
-};
+ NVME_CTRL_FNA_FMT_ALL_NS_SHIFT = 0,
+ NVME_CTRL_FNA_SEC_ALL_NS_SHIFT = 1,
+ NVME_CTRL_FNA_CES_SHIFT = 2,
+ NVME_CTRL_FNA_NSID_ALL_F_SHIFT = 3,
+ NVME_CTRL_FNA_FMT_ALL_NS_MASK = 0x1,
+ NVME_CTRL_FNA_SEC_ALL_NS_MASK = 0x1,
+ NVME_CTRL_FNA_CES_MASK = 0x1,
+ NVME_CTRL_FNA_NSID_ALL_F_MASK = 0x1,
+ NVME_CTRL_FNA_FMT_ALL_NAMESPACES = NVME_VAL(CTRL_FNA_FMT_ALL_NS),
+ NVME_CTRL_FNA_SEC_ALL_NAMESPACES = NVME_VAL(CTRL_FNA_SEC_ALL_NS),
+ NVME_CTRL_FNA_CRYPTO_ERASE = NVME_VAL(CTRL_FNA_CES),
+ NVME_CTRL_FNA_NSID_FFFFFFFF = NVME_VAL(CTRL_FNA_NSID_ALL_F),
+};
+
+#define NVME_CTRL_FNA_FMT_ALL_NS(fna) NVME_GET(fna, CTRL_FNA_FMT_ALL_NS)
+#define NVME_CTRL_FNA_SEC_ALL_NS(fna) NVME_GET(fna, CTRL_FNA_SEC_ALL_NS)
+#define NVME_CTRL_FNA_CES(fna) NVME_GET(fna, CTRL_FNA_CES)
+#define NVME_CTRL_FNA_NSID_ALL_F(fna) NVME_GET(fna, CTRL_FNA_NSID_ALL_F)
/**
* enum nvme_id_ctrl_vwc - Volatile write cache
@@ -2710,7 +2870,9 @@ struct nvme_ns_list {
* @dmsl: Dataset Management Size Limit
* @rsvd16: Reserved
* @aocs: Admin Optional Command Support
- * @rsvd20: Reserved
+ * @ver: Version
+ * @lbamqf: LBA Migration Queue Format
+ * @rsvd25: Reserved
*/
struct nvme_id_ctrl_nvm {
__u8 vsl;
@@ -2721,7 +2883,9 @@ struct nvme_id_ctrl_nvm {
__le64 dmsl;
__u8 rsvd16[2];
__le16 aocs;
- __u8 rsvd20[4076];
+ __le32 ver;
+ __u8 lbamqf;
+ __u8 rsvd25[4071];
};
/**
@@ -2732,7 +2896,11 @@ struct nvme_id_ctrl_nvm {
* @rsvd10: Reserved
* @elbaf: List of Extended LBA Format Support
* @npdgl: Namespace Preferred Deallocate Granularity Large
- * @rsvd272: Reserved
+ * @nprg: Namespace Preferred Read Granularity
+ * @npra: Namespace Preferred Read Alignment
+ * @nors: Namespace Optimal Read Size
+ * @npdal: Namespace Preferred Deallocate Alignment Large
+ * @lbapss: LBA Format Placement Shard Size
* @tlbaag: Tracked LBA Allocation Granularity
* @rsvd296: Reserved
*/
@@ -2743,7 +2911,11 @@ struct nvme_nvm_id_ns {
__u8 rsvd10[2];
__le32 elbaf[64];
__le32 npdgl;
- __u8 rsvd272[20];
+ __le32 nprg;
+ __le32 npra;
+ __le32 nors;
+ __le32 npdal;
+ __le32 lbapss;
__le32 tlbaag;
__u8 rsvd296[3800];
};
@@ -3301,6 +3473,7 @@ struct nvme_cmd_effects_log {
* @NVME_CMD_EFFECTS_NCC: Namespace Capability Change
* @NVME_CMD_EFFECTS_NIC: Namespace Inventory Change
* @NVME_CMD_EFFECTS_CCC: Controller Capability Change
+ * @NVME_CMD_EFFECTS_CSER_MASK: Command Submission and Execution Relaxations
* @NVME_CMD_EFFECTS_CSE_MASK: Command Submission and Execution
* @NVME_CMD_EFFECTS_UUID_SEL: UUID Selection Supported
*/
@@ -3310,7 +3483,8 @@ enum nvme_cmd_effects {
NVME_CMD_EFFECTS_NCC = 1 << 2,
NVME_CMD_EFFECTS_NIC = 1 << 3,
NVME_CMD_EFFECTS_CCC = 1 << 4,
- NVME_CMD_EFFECTS_CSE_MASK = 3 << 16,
+ NVME_CMD_EFFECTS_CSER_MASK = 3 << 14,
+ NVME_CMD_EFFECTS_CSE_MASK = 7 << 16,
NVME_CMD_EFFECTS_UUID_SEL = 1 << 19,
};
@@ -3884,6 +4058,7 @@ struct nvme_persistent_event_entry {
* @NVME_PEL_SET_FEATURE_EVENT: Set Feature Event
* @NVME_PEL_TELEMETRY_CRT: Telemetry Log Create Event
* @NVME_PEL_THERMAL_EXCURSION_EVENT: Thermal Excursion Event
+ * @NVME_PEL_SANITIZE_MEDIA_VERIF_EVENT:Sanitize Media Verification Event
* @NVME_PEL_VENDOR_SPECIFIC_EVENT: Vendor Specific Event
* @NVME_PEL_TCG_DEFINED_EVENT: TCG Defined Event
*/
@@ -3901,6 +4076,7 @@ enum nvme_persistent_event_types {
NVME_PEL_SET_FEATURE_EVENT = 0x0b,
NVME_PEL_TELEMETRY_CRT = 0x0c,
NVME_PEL_THERMAL_EXCURSION_EVENT = 0x0d,
+ NVME_PEL_SANITIZE_MEDIA_VERIF_EVENT = 0x0e,
NVME_PEL_VENDOR_SPECIFIC_EVENT = 0xde,
NVME_PEL_TCG_DEFINED_EVENT = 0xdf,
};
@@ -4608,6 +4784,20 @@ struct nvme_supported_cap_config_list_log {
};
/**
+ * struct nvme_lockdown_log - Command and Feature Lockdown Log
+ * @cfila: Contents of the Command and Feature Identifier List field in the log page.
+ * @rsvd1: Reserved
+ * @lngth: Length of Command and Feature Identifier List field
+ * @cfil: Command and Feature Identifier List
+ */
+struct nvme_lockdown_log {
+ __u8 cfila;
+ __u8 rsvd1[2];
+ __u8 lngth;
+ __u8 cfil[508];
+};
+
+/**
* struct nvme_resv_notification_log - Reservation Notification Log
* @lpc: Log Page Count
* @rnlpt: See &enum nvme_resv_notify_rnlpt.
@@ -4705,7 +4895,15 @@ enum nvme_resv_notify_rnlpt {
* to be completed in the background when the Sanitize command that
* started that operation is completed. A value of FFFFFFFFh indicates
* that no time period is reported.
- * @rsvd32: Reserved
+ * @etpvds: Estimated Time For Post-Verification Deallocation State: indicates the
+ * number of seconds required to deallocate all media allocated for user data
+ * after exiting the Media Verification state (i.e., the time difference between
+ * entering and exiting the Post-Verification Deallocation state), if that state
+ * is entered as part of the sanitize operation. A value of FFFFFFFFh indicates
+ * that no time period is reported.
+ * @ssi: Sanitize State Information: indicate the state of the Sanitize Operation
+ * State Machine.
+ * @rsvd37: Reserved
*/
struct nvme_sanitize_log_page {
__le16 sprog;
@@ -4717,7 +4915,9 @@ struct nvme_sanitize_log_page {
__le32 etond;
__le32 etbend;
__le32 etcend;
- __u8 rsvd32[480];
+ __le32 etpvds;
+ __u8 ssi;
+ __u8 rsvd37[475];
};
/**
@@ -4761,6 +4961,10 @@ struct nvme_sanitize_log_page {
* the NVM subsystem has never been sanitized;
* or since the most recent successful sanitize
* operation.
+ * @NVME_SANITIZE_SSTAT_MVCNCLD_SHIFT: Shift amount to get the value of Media Verification
+ * Canceled bit of Sanitize status field.
+ * @NVME_SANITIZE_SSTAT_MVCNCLD_MASK: Mask to get the value of Media Verification Canceled
+ * bit of Sanitize status field.
*/
enum nvme_sanitize_sstat {
NVME_SANITIZE_SSTAT_STATUS_SHIFT = 0,
@@ -4775,6 +4979,59 @@ enum nvme_sanitize_sstat {
NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED_SHIFT = 8,
NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED_MASK = 0x1,
NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED = 1 << NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED_SHIFT,
+ NVME_SANITIZE_SSTAT_MVCNCLD_SHIFT = 9,
+ NVME_SANITIZE_SSTAT_MVCNCLD_MASK = 0x1,
+};
+
+/**
+ * enum nvme_sanitize_ssi - Sanitize State Information (SSI)
+ * @NVME_SANITIZE_SSI_SANS_SHIFT: Shift amount to get the value of Sanitize State
+ * from Sanitize State Information (SSI) field.
+ * @NVME_SANITIZE_SSI_SANS_MASK: Mask to get the value of Sanitize State from
+ * Sanitize State Information (SSI) field.
+ * @NVME_SANITIZE_SSI_FAILS_SHIFT: Shift amount to get the value of Failure State
+ * from Sanitize State Information (SSI) field.
+ * @NVME_SANITIZE_SSI_FAILS_MASK: Mask to get the value of Failure State from
+ * Sanitize State Information (SSI) field.
+ * @NVME_SANITIZE_SSI_IDLE: No sanitize operation is in process.
+ * @NVME_SANITIZE_SSI_RESTRICT_PROCESSING: The Sanitize operation is in Restricted Processing
+ * State.
+ * @NVME_SANITIZE_SSI_RESTRICT_FAILURE: The Sanitize operation is in Restricted Failure
+ * State. This state is entered if sanitize processing
+ * was performed in the Restricted Processing state and
+ * sanitize processing failed or a failure occurred
+ * during deallocation of media allocated for user data
+ * in the Post-Verification Deallocation state.
+ * @NVME_SANITIZE_SSI_UNRESTRICT_PROCESSING: The Sanitize operation is in Unrestricted Processing
+ * State.
+ * @NVME_SANITIZE_SSI_UNRESTRICT_FAILURE: The Sanitize operation is in Unrestricted Failure
+ * State. This state is entered if sanitize processing
+ * was performed in the Unrestricted Processing state
+ * and sanitize processing failed or a failure occurred
+ * during deallocation of media allocated for user data
+ * in the Post-Verification.
+ * @NVME_SANITIZE_SSI_MEDIA_VERIFICATION: The Sanitize operation is in Media Verification
+ * State. In this state, the sanitize processing
+ * completed successfully, and all media allocated for
+ * user data in the sanitization target is readable by
+ * the host for purposes of verifying sanitization.
+ * @NVME_SANITIZE_SSI_POST_VERIF_DEALLOC: The Sanitize operation is in Post-Verification
+ * Deallocation State. In this state, the controller
+ * shall deallocate all media allocated for user data
+ * in the sanitization target.
+ */
+enum nvme_sanitize_ssi {
+ NVME_SANITIZE_SSI_SANS_SHIFT = 0,
+ NVME_SANITIZE_SSI_SANS_MASK = 0xf,
+ NVME_SANITIZE_SSI_FAILS_SHIFT = 4,
+ NVME_SANITIZE_SSI_FAILS_MASK = 0xf,
+ NVME_SANITIZE_SSI_IDLE = 0,
+ NVME_SANITIZE_SSI_RESTRICT_PROCESSING = 1,
+ NVME_SANITIZE_SSI_RESTRICT_FAILURE = 2,
+ NVME_SANITIZE_SSI_UNRESTRICT_PROCESSING = 3,
+ NVME_SANITIZE_SSI_UNRESTRICT_FAILURE = 4,
+ NVME_SANITIZE_SSI_MEDIA_VERIFICATION = 5,
+ NVME_SANITIZE_SSI_POST_VERIF_DEALLOC = 6,
};
/**
@@ -4908,6 +5165,46 @@ enum nvme_fdp_config_fdpa {
};
/**
+ * enum nvme_lockdown_log_scope - lockdown log page scope attributes
+ * @NVME_LOCKDOWN_ADMIN_CMD: Scope value for Admin commandS
+ * @NVME_LOCKDOWN_FEATURE_ID: Scope value for Feature ID
+ * @NVME_LOCKDOWN_MI_CMD_SET: Scope value for Management Interface commands
+ * @NVME_LOCKDOWN_PCI_CMD_SET: Scope value for PCI commands
+ */
+enum nvme_lockdown_log_scope {
+ NVME_LOCKDOWN_ADMIN_CMD = 0x0,
+ NVME_LOCKDOWN_FEATURE_ID = 0x2,
+ NVME_LOCKDOWN_MI_CMD_SET = 0x3,
+ NVME_LOCKDOWN_PCI_CMD_SET = 0x4,
+};
+
+/**
+ * enum nvme_lockdown_log_contents - lockdown log page content attributes
+ * @NVME_LOCKDOWN_SUPPORTED_CMD: Content value for Supported commands
+ * @NVME_LOCKDOWN_PROHIBITED_CMD: Content value for prohibited commands
+ * @NVME_LOCKDOWN_PROHIBITED_OUTOFBAND_CMD: Content value for prohibited side band commands
+ */
+enum nvme_lockdown_log_contents {
+ NVME_LOCKDOWN_SUPPORTED_CMD = 0x0,
+ NVME_LOCKDOWN_PROHIBITED_CMD = 0x1,
+ NVME_LOCKDOWN_PROHIBITED_OUTOFBAND_CMD = 0x2,
+};
+
+/**
+ * enum nvme_lockdown_scope_contents - Lockdown Log shift and mask
+ * @NVME_LOCKDOWN_SS_SHIFT: Lockdown log scope select Shift
+ * @NVME_LOCKDOWN_SS_MASK: Lockdown log scope select Mask
+ * @NVME_LOCKDOWN_CS_SHIFT: Lockdown log contents Shift
+ * @NVME_LOCKDOWN_CS_MASK: Lockdown log contents Mask
+ */
+enum nvme_lockdown_scope_contents {
+ NVME_LOCKDOWN_SS_SHIFT = 0,
+ NVME_LOCKDOWN_SS_MASK = 0xf,
+ NVME_LOCKDOWN_CS_SHIFT = 4,
+ NVME_LOCKDOWN_CS_MASK = 0x3,
+};
+
+/**
* struct nvme_fdp_config_desc - FDP Configuration Descriptor
* @size: Descriptor size
* @fdpa: FDP Attributes (&enum nvme_fdp_config_fdpa)
@@ -5189,6 +5486,22 @@ struct nvme_lba_status {
};
/**
+ * enum nvme_lba_status_cmpc - Get LBA Status Command Completion Condition
+ * @NVME_LBA_STATUS_CMPC_NO_CMPC: No indication of the completion condition
+ * @NVME_LBA_STATUS_CMPC_INCOMPLETE: Command completed, but additional LBA Status
+ * Descriptor Entries are available to transfer
+ * or scan did not complete (if ATYPE = 10h)
+ * @NVME_LBA_STATUS_CMPC_COMPLETE: Completed the specified action over the number
+ * of LBAs specified in the Range Length field and
+ * transferred all available LBA Status Descriptors
+ */
+enum nvme_lba_status_cmpc {
+ NVME_LBA_STATUS_CMPC_NO_CMPC = 0x0,
+ NVME_LBA_STATUS_CMPC_INCOMPLETE = 0x1,
+ NVME_LBA_STATUS_CMPC_COMPLETE = 0x2,
+};
+
+/**
* struct nvme_feat_auto_pst - Autonomous Power State Transition
* @apst_entry: See &enum nvme_apst_entry
*/
@@ -6956,6 +7269,20 @@ struct nvme_mi_vpd_hdr {
* Originator field does not match the
* Host NQN used by the DDC to connect
* to the CDC.
+ * @NVME_SC_INVALID_CONTROLER_DATA_QUEUE: This error indicates that the
+ * specified Controller Data Queue
+ * Identifier is invalid for the controller
+ * processing the command.
+ * @NVME_SC_NOT_ENOUGH_RESOURCES: This error indicates that there is not
+ * enough resources in the controller to
+ * process the command.
+ * @NVME_SC_CONTROLLER_SUSPENDED: The operation requested is not allowed if
+ * the specified controller is suspended.
+ * @NVME_SC_CONTROLLER_NOT_SUSPENDED: The operation requested is not allowed if
+ * the specified controller is not
+ * suspended.
+ * @NVME_SC_CONTROLLER_DATA_QUEUE_FULL: The controller detected that a
+ * Controller Data Queue became full.
* @NVME_SC_BAD_ATTRIBUTES: Conflicting Dataset Management Attributes
* @NVME_SC_INVALID_PI: Invalid Protection Information
* @NVME_SC_READ_ONLY: Attempted Write to Read Only Range
@@ -7214,6 +7541,15 @@ enum nvme_status_field {
NVME_SC_ZONEGRP_ORIGINATOR_INVLD = 0x34,
/*
+ * Command Set Specific - Live Migration
+ */
+ NVME_SC_INVALID_CONTROLER_DATA_QUEUE = 0x37,
+ NVME_SC_NOT_ENOUGH_RESOURCES = 0x38,
+ NVME_SC_CONTROLLER_SUSPENDED = 0x39,
+ NVME_SC_CONTROLLER_NOT_SUSPENDED = 0x3A,
+ NVME_SC_CONTROLLER_DATA_QUEUE_FULL = 0x3B,
+
+ /*
* I/O Command Set Specific - NVM commands:
*/
NVME_SC_BAD_ATTRIBUTES = 0x80,
@@ -7491,6 +7827,9 @@ enum nvme_admin_opcode {
* @NVME_IDENTIFY_CNS_CSI_ID_NS_DATA_STRUCTURE: I/O Command Set specific ID Namespace
* Data Structure for Allocated Namespace ID
* @NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE: Base Specification 2.0a section 5.17.2.21
+ * @NVME_IDENTIFY_CNS_SUPPORTED_CTRL_STATE_FORMATS: Supported Controller State Formats
+ * identifying the supported NVMe Controller
+ * State data structures
*/
enum nvme_identify_cns {
NVME_IDENTIFY_CNS_NS = 0x00,
@@ -7517,6 +7856,7 @@ enum nvme_identify_cns {
NVME_IDENTIFY_CNS_CSI_ALLOCATED_NS_LIST = 0x1A,
NVME_IDENTIFY_CNS_CSI_ID_NS_DATA_STRUCTURE = 0x1B,
NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE = 0x1C,
+ NVME_IDENTIFY_CNS_SUPPORTED_CTRL_STATE_FORMATS = 0x20,
};
/**
@@ -7543,12 +7883,21 @@ enum nvme_identify_cns {
* @NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS: NVMe-MI Commands Supported and Effects
* @NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN: Command and Feature Lockdown
* @NVME_LOG_LID_BOOT_PARTITION: Boot Partition
+ * @NVME_LOG_LID_ROTATIONAL_MEDIA_INFO: Rotational Media Information
+ * @NVME_LOG_LID_DISPERSED_NS_PARTICIPATING_NSS:Dispersed Namespace Participating NVM Subsystems
+ * @NVME_LOG_LID_MGMT_ADDR_LIST: Management Address List
* @NVME_LOG_LID_PHY_RX_EOM: Physical Interface Receiver Eye Opening Measurement
+ * @NVME_LOG_LID_REACHABILITY_GROUPS: Reachability Groups
+ * @NVME_LOG_LID_REACHABILITY_ASSOCIATIONS: Reachability Associations
+ * @NVME_LOG_LID_CHANGED_ALLOC_NS_LIST: Changed Allocated Namespace List
* @NVME_LOG_LID_FDP_CONFIGS: FDP Configurations
* @NVME_LOG_LID_FDP_RUH_USAGE: Reclaim Unit Handle Usage
* @NVME_LOG_LID_FDP_STATS: FDP Statistics
* @NVME_LOG_LID_FDP_EVENTS: FDP Events
* @NVME_LOG_LID_DISCOVER: Discovery
+ * @NVME_LOG_LID_HOST_DISCOVER: Host Discovery
+ * @NVME_LOG_LID_AVE_DISCOVER: AVE Discovery
+ * @NVME_LOG_LID_PULL_MODEL_DDC_REQ: Pull Model DDC Request
* @NVME_LOG_LID_RESERVATION: Reservation Notification
* @NVME_LOG_LID_SANITIZE: Sanitize Status
* @NVME_LOG_LID_ZNS_CHANGED_ZONES: Changed Zone List
@@ -7576,12 +7925,21 @@ enum nvme_cmd_get_log_lid {
NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS = 0x13,
NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN = 0x14,
NVME_LOG_LID_BOOT_PARTITION = 0x15,
+ NVME_LOG_LID_ROTATIONAL_MEDIA_INFO = 0x16,
+ NVME_LOG_LID_DISPERSED_NS_PARTICIPATING_NSS = 0x17,
+ NVME_LOG_LID_MGMT_ADDR_LIST = 0x18,
NVME_LOG_LID_PHY_RX_EOM = 0x19,
+ NVME_LOG_LID_REACHABILITY_GROUPS = 0x1a,
+ NVME_LOG_LID_REACHABILITY_ASSOCIATIONS = 0x1b,
+ NVME_LOG_LID_CHANGED_ALLOC_NS_LIST = 0x1c,
NVME_LOG_LID_FDP_CONFIGS = 0x20,
NVME_LOG_LID_FDP_RUH_USAGE = 0x21,
NVME_LOG_LID_FDP_STATS = 0x22,
NVME_LOG_LID_FDP_EVENTS = 0x23,
NVME_LOG_LID_DISCOVER = 0x70,
+ NVME_LOG_LID_HOST_DISCOVER = 0x71,
+ NVME_LOG_LID_AVE_DISCOVER = 0x72,
+ NVME_LOG_LID_PULL_MODEL_DDC_REQ = 0x73,
NVME_LOG_LID_RESERVATION = 0x80,
NVME_LOG_LID_SANITIZE = 0x81,
NVME_LOG_LID_ZNS_CHANGED_ZONES = 0xbf,
@@ -8059,12 +8417,14 @@ enum nvme_directive_send_identify_endir {
* @NVME_SANITIZE_SANACT_START_BLOCK_ERASE: Start a Block Erase sanitize operation.
* @NVME_SANITIZE_SANACT_START_OVERWRITE: Start an Overwrite sanitize operation.
* @NVME_SANITIZE_SANACT_START_CRYPTO_ERASE: Start a Crypto Erase sanitize operation.
+ * @NVME_SANITIZE_SANACT_EXIT_MEDIA_VERIF: Exit Media Verification State
*/
enum nvme_sanitize_sanact {
NVME_SANITIZE_SANACT_EXIT_FAILURE = 1,
NVME_SANITIZE_SANACT_START_BLOCK_ERASE = 2,
NVME_SANITIZE_SANACT_START_OVERWRITE = 3,
NVME_SANITIZE_SANACT_START_CRYPTO_ERASE = 4,
+ NVME_SANITIZE_SANACT_EXIT_MEDIA_VERIF = 5,
};
/**
@@ -8323,6 +8683,32 @@ enum nvme_io_opcode {
};
/**
+ * enum nvme_kv_opcode - Opcodes for KV Commands
+ * @nvme_kv_cmd_flush: Flush
+ * @nvme_kv_cmd_store: Store
+ * @nvme_kv_cmd_retrieve: Retrieve
+ * @nvme_kv_cmd_list: List
+ * @nvme_kv_cmd_resv_register: Reservation Register
+ * @nvme_kv_cmd_resv_report: Reservation Report
+ * @nvme_kv_cmd_delete: Delete
+ * @nvme_kv_cmd_resv_acquire: Reservation Acquire
+ * @nvme_kv_cmd_exist: Exist
+ * @nvme_kv_cmd_resv_release: Reservation Release
+ */
+enum nvme_kv_opcode {
+ nvme_kv_cmd_flush = 0x00,
+ nvme_kv_cmd_store = 0x01,
+ nvme_kv_cmd_retrieve = 0x02,
+ nvme_kv_cmd_list = 0x06,
+ nvme_kv_cmd_resv_register = 0x0d,
+ nvme_kv_cmd_resv_report = 0x0e,
+ nvme_kv_cmd_delete = 0x10,
+ nvme_kv_cmd_resv_acquire = 0x11,
+ nvme_kv_cmd_exist = 0x14,
+ nvme_kv_cmd_resv_release = 0x15,
+};
+
+/**
* enum nvme_io_control_flags - I/O control flags
* @NVME_IO_DTYPE_STREAMS: Directive Type Streams
* @NVME_IO_STC: Storage Tag Check
diff --git a/src/nvme/util.c b/src/nvme/util.c
index ce0ce76..1af358a 100644
--- a/src/nvme/util.c
+++ b/src/nvme/util.c
@@ -286,6 +286,11 @@ static const char * const cmd_spec_status[] = {
[NVME_SC_INSUFFICIENT_DISC_RES] = "Discovery Info entries exceed Discovery Controller's capacity",
[NVME_SC_REQSTD_FUNCTION_DISABLED] = "Fabric Zoning is not enabled on the CDC",
[NVME_SC_ZONEGRP_ORIGINATOR_INVLD] = "The NQN contained in the ZoneGroup Originator field does not match the Host NQN used by the DDC to connect to the CDC",
+ [NVME_SC_INVALID_CONTROLER_DATA_QUEUE] = "Invalid Controller Data Queue",
+ [NVME_SC_NOT_ENOUGH_RESOURCES] = "Not Enough Resources",
+ [NVME_SC_CONTROLLER_SUSPENDED] = "Controller Suspended: Operation failed because the controller is currently in a suspended state",
+ [NVME_SC_CONTROLLER_NOT_SUSPENDED] = "Controller Not Suspended: Operation failed because the controller is not in a suspended state",
+ [NVME_SC_CONTROLLER_DATA_QUEUE_FULL] = "Controller Data Queue Full",
};
static const char * const nvm_status[] = {
@@ -621,6 +626,7 @@ static const char * const libnvme_status[] = {
[ENVME_CONNECT_CONNREFUSED] = "connection refused",
[ENVME_CONNECT_ADDRNOTAVAIL] = "cannot assign requested address",
[ENVME_CONNECT_IGNORED] = "connection ignored",
+ [ENVME_CONNECT_NOKEY] = "pre-shared TLS key is missing"
};
const char *nvme_errno_to_string(int status)
diff --git a/src/nvme/util.h b/src/nvme/util.h
index 71fea9f..364ca0f 100644
--- a/src/nvme/util.h
+++ b/src/nvme/util.h
@@ -41,6 +41,7 @@
* @ENVME_CONNECT_CONNREFUSED: connection refused
* @ENVME_CONNECT_ADDRNOTAVAIL: cannot assign requested address
* @ENVME_CONNECT_IGNORED: connect attempt is ignored due to configuration
+ * @ENVME_CONNECT_NOKEY: the TLS key is missing
*/
enum nvme_connect_err {
ENVME_CONNECT_RESOLVE = 1000,
@@ -63,6 +64,7 @@ enum nvme_connect_err {
ENVME_CONNECT_CONNREFUSED,
ENVME_CONNECT_ADDRNOTAVAIL,
ENVME_CONNECT_IGNORED,
+ ENVME_CONNECT_NOKEY,
};
/**
diff --git a/test/config/config-diff.sh b/test/config/config-diff.sh
index c15b42c..abec20e 100644..100755
--- a/test/config/config-diff.sh
+++ b/test/config/config-diff.sh
@@ -1,24 +1,48 @@
#!/bin/bash -e
# SPDX-License-Identifier: LGPL-2.1-or-later
-BUILD_DIR=$1
-CONFIG_DUMP=$2
-SYSDIR_INPUT=$3
-CONFIG_JSON=$4
-EXPECTED_OUTPUT=$5
+positional_args=()
+sysfs_tar=""
+config_json=""
-ACTUAL_OUTPUT="${BUILD_DIR}"/$(basename "${EXPECTED_OUTPUT}")
+while [[ $# -gt 0 ]]; do
+ case $1 in
+ --sysfs-tar)
+ sysfs_tar=$2
+ shift 1
+ ;;
+ --config-json)
+ config_json=$2
+ shift 1
+ ;;
+ *)
+ positional_args+=("$1")
+ shift
+ ;;
+ esac
+done
-TEST_NAME="$(basename -s .tar.xz $SYSDIR_INPUT)"
-TEST_DIR="$BUILD_DIR/$TEST_NAME"
+set -- "${positional_args[@]}"
-rm -rf "${TEST_DIR}"
-mkdir "${TEST_DIR}"
-tar -x -f "${SYSDIR_INPUT}" -C "${TEST_DIR}"
+test_binary="$1"
+build_dir="$2"
+expected_output="$3"
-LIBNVME_SYSFS_PATH="$TEST_DIR" \
+sysfs_path=""
+if [[ -n "${sysfs_tar}" ]]; then
+ test_name="$(basename -s .tar.xz ${sysfs_tar})"
+ sysfs_path="${build_dir}/${test_name}"
+
+ rm -rf "${sysfs_path}"
+ mkdir "${sysfs_path}"
+ tar -x -f "${sysfs_tar}" -C "${sysfs_path}"
+fi
+
+output="${build_dir}"/$(basename "${expected_output}")
+
+LIBNVME_SYSFS_PATH="${sysfs_path}" \
LIBNVME_HOSTNQN=nqn.2014-08.org.nvmexpress:uuid:ce4fee3e-c02c-11ee-8442-830d068a36c6 \
LIBNVME_HOSTID=ce4fee3e-c02c-11ee-8442-830d068a36c6 \
-"${CONFIG_DUMP}" "${CONFIG_JSON}" > "${ACTUAL_OUTPUT}" || echo "test failed"
+"${test_binary}" "${config_json}" > "${output}" || echo "test failed"
-diff -u "${EXPECTED_OUTPUT}" "${ACTUAL_OUTPUT}"
+diff -u "${expected_output}" "${output}"
diff --git a/test/config/data/tls_key-1.json b/test/config/data/tls_key-1.json
new file mode 100644
index 0000000..5bba948
--- /dev/null
+++ b/test/config/data/tls_key-1.json
@@ -0,0 +1,21 @@
+[
+ {
+ "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:befdec4c-2234-11b2-a85c-ca77c773af36",
+ "hostid":"2cd2c43b-a90a-45c1-a8cd-86b33ab273b6",
+ "subsystems":[
+ {
+ "nqn":"nqn.io-1",
+ "ports":[
+ {
+ "transport":"tcp",
+ "traddr":"192.168.154.148",
+ "trsvcid":"4420",
+ "dhchap_key":"none",
+ "tls":true,
+ "tls_key":"NVMeTLSkey-1:01:Hhc5sFjwSZ6w5hPY19tqprajYtuYci3tN+Z2wGViDk3rpSR+:"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/test/config/data/tls_key-1.out b/test/config/data/tls_key-1.out
new file mode 100644
index 0000000..5bba948
--- /dev/null
+++ b/test/config/data/tls_key-1.out
@@ -0,0 +1,21 @@
+[
+ {
+ "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:befdec4c-2234-11b2-a85c-ca77c773af36",
+ "hostid":"2cd2c43b-a90a-45c1-a8cd-86b33ab273b6",
+ "subsystems":[
+ {
+ "nqn":"nqn.io-1",
+ "ports":[
+ {
+ "transport":"tcp",
+ "traddr":"192.168.154.148",
+ "trsvcid":"4420",
+ "dhchap_key":"none",
+ "tls":true,
+ "tls_key":"NVMeTLSkey-1:01:Hhc5sFjwSZ6w5hPY19tqprajYtuYci3tN+Z2wGViDk3rpSR+:"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/test/config/data/tls_key-2.json b/test/config/data/tls_key-2.json
new file mode 100644
index 0000000..9d6ce62
--- /dev/null
+++ b/test/config/data/tls_key-2.json
@@ -0,0 +1,22 @@
+[
+ {
+ "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:befdec4c-2234-11b2-a85c-ca77c773af36",
+ "hostid":"2cd2c43b-a90a-45c1-a8cd-86b33ab273b6",
+ "subsystems":[
+ {
+ "nqn":"nqn.io-1",
+ "ports":[
+ {
+ "transport":"tcp",
+ "traddr":"192.168.154.148",
+ "trsvcid":"4420",
+ "dhchap_key":"none",
+ "tls":true,
+ "tls_psk_identity":"NVMe1R01 nqn.2014-08.org.nvmexpress:uuid:befdec4c-2234-11b2-a85c-ca77c773af36 nqn.io-1 QMFIifx2SCVnlE2hc4MQb0r+2g56x3G7P6jJtDiYK+I=",
+ "tls_key":"NVMeTLSkey-1:01:Hhc5sFjwSZ6w5hPY19tqprajYtuYci3tN+Z2wGViDk3rpSR+:"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/test/config/data/tls_key-2.out b/test/config/data/tls_key-2.out
new file mode 100644
index 0000000..5bba948
--- /dev/null
+++ b/test/config/data/tls_key-2.out
@@ -0,0 +1,21 @@
+[
+ {
+ "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:befdec4c-2234-11b2-a85c-ca77c773af36",
+ "hostid":"2cd2c43b-a90a-45c1-a8cd-86b33ab273b6",
+ "subsystems":[
+ {
+ "nqn":"nqn.io-1",
+ "ports":[
+ {
+ "transport":"tcp",
+ "traddr":"192.168.154.148",
+ "trsvcid":"4420",
+ "dhchap_key":"none",
+ "tls":true,
+ "tls_key":"NVMeTLSkey-1:01:Hhc5sFjwSZ6w5hPY19tqprajYtuYci3tN+Z2wGViDk3rpSR+:"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/test/config/meson.build b/test/config/meson.build
index c1ee7ca..aeb5ccf 100644
--- a/test/config/meson.build
+++ b/test/config/meson.build
@@ -7,6 +7,10 @@
diff = find_program('diff', required : false)
if diff.found()
+
+ srcdir = meson.current_source_dir()
+ builddir = meson.current_build_dir()
+
config_dump = executable(
'test-config-dump',
['config-dump.c'],
@@ -26,11 +30,11 @@ if diff.found()
t_file,
config_diff,
args : [
- meson.current_build_dir(),
config_dump.full_path(),
- files('data'/t_file + '.tar.xz'),
- files('data'/t_file + '.json'),
- files('data'/t_file + '.out'),
+ builddir,
+ srcdir + '/data/' + t_file + '.out',
+ '--sysfs-tar', srcdir + '/data/' + t_file + '.tar.xz',
+ '--config-json', srcdir + '/data/' + t_file + '.json',
],
depends : config_dump,
)
@@ -47,13 +51,38 @@ if diff.found()
'hostnqn-order',
config_diff,
args : [
- meson.current_build_dir(),
test_hostnqn_order.full_path(),
- files('data/hostnqn-order.tar.xz'),
- files('data/hostnqn-order.json'),
- files('data/hostnqn-order.out'),
+ builddir,
+ srcdir + '/data/hostnqn-order.out',
+ '--sysfs-tar', srcdir + '/data/hostnqn-order.tar.xz',
+ '--config-json', srcdir + '/data/hostnqn-order.json',
],
depends : test_hostnqn_order,
)
+ test_psk_json = executable(
+ 'test-psk-json',
+ ['psk-json.c'],
+ dependencies: libnvme_dep,
+ include_directories: [incdir],
+ )
+
+ config_data = [
+ 'tls_key-1',
+ 'tls_key-2',
+ ]
+
+ foreach t_file : config_data
+ test(
+ 'psk-json-' + t_file,
+ config_diff,
+ args : [
+ test_psk_json.full_path(),
+ builddir,
+ srcdir + '/data/' + t_file + '.out',
+ '--config-json', srcdir + '/data/' + t_file + '.json',
+ ],
+ depends : test_psk_json,
+ )
+ endforeach
endif
diff --git a/test/config/psk-json.c b/test/config/psk-json.c
new file mode 100644
index 0000000..a96ebf1
--- /dev/null
+++ b/test/config/psk-json.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+/**
+ * This file is part of libnvme.
+ * Copyright (c) 2024 Daniel Wagner, SUSE LLC
+ */
+
+#include "nvme/linux.h"
+#include "nvme/tree.h"
+#include <string.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <libnvme.h>
+
+static bool import_export_key(nvme_ctrl_t c)
+{
+ unsigned char version, hmac, *key;
+ char *encoded_key;
+ size_t len;
+
+ key = nvme_import_tls_key_versioned(nvme_ctrl_get_tls_key(c),
+ &version, &hmac, &len);
+ if (!key) {
+ printf("ERROR: nvme_import_tls_key_versioned failed with %d\n",
+ errno);
+ return false;
+
+ }
+
+ encoded_key = nvme_export_tls_key_versioned(version, hmac, key, len);
+ free(key);
+ if (!encoded_key) {
+ printf("ERROR: nvme_export_tls_key_versioned failed with %d\n",
+ errno);
+ return false;
+ }
+
+ nvme_ctrl_set_tls_key(c, encoded_key);
+
+ free(encoded_key);
+
+ return true;
+}
+
+static bool psk_json_test(char *file)
+{
+ bool pass = false;
+ nvme_root_t r;
+ nvme_host_t h;
+ nvme_subsystem_t s;
+ nvme_ctrl_t c;
+ int err;
+
+ r = nvme_create_root(stderr, LOG_ERR);
+ if (!r)
+ return false;
+
+ err = nvme_read_config(r, file);
+ if (err)
+ goto out;
+
+
+ nvme_for_each_host(r, h)
+ nvme_for_each_subsystem(h, s)
+ nvme_subsystem_for_each_ctrl(s, c)
+ if (!import_export_key(c))
+ goto out;
+
+ err = nvme_dump_config(r);
+ if (err)
+ goto out;
+
+ pass = true;
+
+out:
+ nvme_free_tree(r);
+ return pass;
+}
+
+int main(int argc, char *argv[])
+{
+ bool pass;
+
+ pass = psk_json_test(argv[1]);
+ fflush(stdout);
+
+ exit(pass ? EXIT_SUCCESS : EXIT_FAILURE);
+}
diff --git a/test/meson.build b/test/meson.build
index ca2a792..2ab7e31 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -104,6 +104,15 @@ if conf.get('HAVE_NETDB')
test('util', test_util)
endif
+psk = executable(
+ 'test-psk',
+ ['psk.c'],
+ dependencies: libnvme_dep,
+ include_directories: [incdir, internal_incdir]
+)
+
+test('psk', psk)
+
subdir('ioctl')
subdir('nbft')
diff --git a/test/mi.c b/test/mi.c
index 0dc72f1..05eee97 100644
--- a/test/mi.c
+++ b/test/mi.c
@@ -1908,6 +1908,103 @@ static void test_endpoint_quirk_probe(struct nvme_mi_ep *ep)
assert(rc == 0);
}
+struct req_dlen_doff_data {
+ enum {
+ DATA_DIR_IN,
+ DATA_DIR_OUT,
+ } direction;
+ unsigned int req_len;
+ unsigned int resp_len;
+ unsigned int exp_doff;
+};
+
+static int test_admin_dlen_doff_cb(struct nvme_mi_ep *ep,
+ struct nvme_mi_req *req,
+ struct nvme_mi_resp *resp,
+ void *data)
+{
+ struct req_dlen_doff_data *args = data;
+ __u8 *hdr = (__u8 *)req->hdr;
+ __u32 dlen, doff;
+
+ dlen = hdr[35] << 24 | hdr[34] << 16 | hdr[33] << 8 | hdr[32];
+ doff = hdr[39] << 24 | hdr[38] << 16 | hdr[37] << 8 | hdr[36];
+
+ if (args->direction == DATA_DIR_OUT) {
+ assert(dlen == args->req_len);
+ assert(dlen == req->data_len);
+ assert(doff == 0);
+ } else {
+ assert(dlen == args->resp_len);
+ assert(dlen == resp->data_len);
+ assert(doff == args->exp_doff);
+ }
+
+ /* minimal valid response */
+ hdr = (__u8 *)resp->hdr;
+ hdr[4] = 0x00; /* status: success */
+
+ test_transport_resp_calc_mic(resp);
+
+ return 0;
+}
+
+/* Check dlen value on admin_xfer requests that include data. */
+static void test_admin_dlen_doff_req(struct nvme_mi_ep *ep)
+{
+ struct {
+ struct nvme_mi_admin_req_hdr hdr;
+ unsigned char data[4096];
+ } admin_req = { 0 };
+ struct nvme_mi_admin_resp_hdr admin_resp = { 0 };
+ struct req_dlen_doff_data data = { 0 };
+ size_t resp_sz = 0;
+ nvme_mi_ctrl_t ctrl;
+ int rc;
+
+ data.direction = DATA_DIR_OUT;
+ data.req_len = sizeof(admin_req.data);
+
+ test_set_transport_callback(ep, test_admin_dlen_doff_cb, &data);
+
+ ctrl = nvme_mi_init_ctrl(ep, 0);
+ assert(ctrl);
+
+ rc = nvme_mi_admin_xfer(ctrl, &admin_req.hdr, sizeof(admin_req.data),
+ &admin_resp, 0, &resp_sz);
+
+ assert(!rc);
+};
+
+/* Check dlen value on admin_xfer requests that return data in their response.
+ */
+static void test_admin_dlen_doff_resp(struct nvme_mi_ep *ep)
+{
+ struct {
+ struct nvme_mi_admin_resp_hdr hdr;
+ unsigned char data[4096];
+ } admin_resp = { 0 };
+ struct nvme_mi_admin_req_hdr admin_req = { 0 };
+ struct req_dlen_doff_data data = { 0 };
+ nvme_mi_ctrl_t ctrl;
+ size_t resp_sz;
+ int rc;
+
+ data.direction = DATA_DIR_IN;
+ data.resp_len = sizeof(admin_resp.data);
+ resp_sz = sizeof(admin_resp.data);
+
+ test_set_transport_callback(ep, test_admin_dlen_doff_cb, &data);
+
+ ctrl = nvme_mi_init_ctrl(ep, 0);
+ assert(ctrl);
+
+ rc = nvme_mi_admin_xfer(ctrl, &admin_req, 0, &admin_resp.hdr, 0,
+ &resp_sz);
+
+ assert(!rc);
+};
+
#define DEFINE_TEST(name) { #name, test_ ## name }
struct test {
const char *name;
@@ -1950,6 +2047,8 @@ struct test {
DEFINE_TEST(admin_sanitize_nvm),
DEFINE_TEST(admin_get_log_split),
DEFINE_TEST(endpoint_quirk_probe),
+ DEFINE_TEST(admin_dlen_doff_req),
+ DEFINE_TEST(admin_dlen_doff_resp),
};
static void run_test(struct test *test, FILE *logfd, nvme_mi_ep_t ep)
diff --git a/test/psk.c b/test/psk.c
new file mode 100644
index 0000000..02cb6d8
--- /dev/null
+++ b/test/psk.c
@@ -0,0 +1,225 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+/**
+ * This file is part of libnvme.
+ * Copyright (c) 2024 Daniel Wagner, SUSE Software Solutions
+ */
+
+#include "nvme/linux.h"
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <ccan/array_size/array_size.h>
+
+#include <libnvme.h>
+
+static int test_rc;
+
+struct test_data {
+ const unsigned char configured_psk[48];
+ size_t psk_length;
+ unsigned char version;
+ unsigned char hmac;
+ const char *exported_psk;
+};
+
+static struct test_data test_data[] = {
+ { { 0x55, 0x12, 0xDB, 0xB6,
+ 0x73, 0x7D, 0x01, 0x06,
+ 0xF6, 0x59, 0x75, 0xB7,
+ 0x73, 0xDF, 0xB0, 0x11,
+ 0xFF, 0xC3, 0x44, 0xBC,
+ 0xF4, 0x42, 0xE2, 0xDD,
+ 0x6D, 0x8B, 0xC4, 0x87,
+ 0x0B, 0x5D, 0x5B, 0x03},
+ 32, 1, NVME_HMAC_ALG_NONE,
+ "NVMeTLSkey-1:00:VRLbtnN9AQb2WXW3c9+wEf/DRLz0QuLdbYvEhwtdWwNf9LrZ:" },
+ { { 0x55, 0x12, 0xDB, 0xB6,
+ 0x73, 0x7D, 0x01, 0x06,
+ 0xF6, 0x59, 0x75, 0xB7,
+ 0x73, 0xDF, 0xB0, 0x11,
+ 0xFF, 0xC3, 0x44, 0xBC,
+ 0xF4, 0x42, 0xE2, 0xDD,
+ 0x6D, 0x8B, 0xC4, 0x87,
+ 0x0B, 0x5D, 0x5B, 0x03},
+ 32, 1, NVME_HMAC_ALG_SHA2_256,
+ "NVMeTLSkey-1:01:VRLbtnN9AQb2WXW3c9+wEf/DRLz0QuLdbYvEhwtdWwNf9LrZ:" },
+ { { 0x55, 0x12, 0xDB, 0xB6,
+ 0x73, 0x7D, 0x01, 0x06,
+ 0xF6, 0x59, 0x75, 0xB7,
+ 0x73, 0xDF, 0xB0, 0x11,
+ 0xFF, 0xC3, 0x44, 0xBC,
+ 0xF4, 0x42, 0xE2, 0xDD,
+ 0x6D, 0x8B, 0xC4, 0x87,
+ 0x0B, 0x5D, 0x5B, 0x03,
+ 0xFF, 0xC3, 0x44, 0xBC,
+ 0xF4, 0x42, 0xE2, 0xDD,
+ 0x6D, 0x8B, 0xC4, 0x87,
+ 0x0B, 0x5D, 0x5B, 0x03},
+ 48, 1, NVME_HMAC_ALG_SHA2_384,
+ "NVMeTLSkey-1:02:VRLbtnN9AQb2WXW3c9+wEf/DRLz0QuLdbYvEhwtdWwP/w0S89ELi3W2LxIcLXVsDn8kXZQ==:" },
+};
+
+static void check_str(const char *exp, const char *res)
+{
+ if (!strcmp(res, exp))
+ return;
+
+ printf("ERROR: got '%s', expected '%s'\n", res, exp);
+
+ test_rc = 1;
+}
+
+static void export_test(struct test_data *test)
+{
+ char *psk;
+
+ if (test->version != 1 ||
+ !(test->hmac == NVME_HMAC_ALG_SHA2_256 ||
+ test->hmac == NVME_HMAC_ALG_SHA2_384))
+ return;
+
+ printf("test nvme_export_tls_key hmac %d %s\n",
+ test->hmac, test->exported_psk);
+
+ psk = nvme_export_tls_key(test->configured_psk, test->psk_length);
+ if (!psk) {
+ test_rc = 1;
+ printf("ERROR: nvme_export_tls_key() failed with %d\n", errno);
+ return;
+ }
+ check_str(test->exported_psk, psk);
+ free(psk);
+}
+
+static void import_test(struct test_data *test)
+{
+ unsigned char *psk;
+ int psk_length;
+ unsigned int hmac;
+
+ if (test->version != 1 ||
+ !(test->hmac == NVME_HMAC_ALG_SHA2_256 ||
+ test->hmac == NVME_HMAC_ALG_SHA2_384))
+ return;
+
+ printf("test nvme_import_tls_key hmac %d %s\n",
+ test->hmac, test->exported_psk);
+
+ psk = nvme_import_tls_key(test->exported_psk, &psk_length, &hmac);
+ if (!psk) {
+ test_rc = 1;
+ printf("ERROR: nvme_import_tls_key() failed with %d\n", errno);
+ return;
+ }
+
+ if (test->hmac != hmac) {
+ test_rc = 1;
+ printf("ERROR: hmac parsing failed\n");
+ goto out;
+ }
+
+ if (test->psk_length != psk_length) {
+ test_rc = 1;
+ printf("ERROR: length parsing failed\n");
+ goto out;
+ }
+ if (memcmp(test->configured_psk, psk, psk_length)) {
+ test_rc = 1;
+ printf("ERROR: parsing psk failed\n");
+ }
+
+out:
+ free(psk);
+}
+
+static void export_versioned_test(struct test_data *test)
+{
+ char *psk;
+
+ if (test->version != 1)
+ return;
+
+ printf("test nvme_export_tls_key_versioned hmac %d %s\n",
+ test->hmac, test->exported_psk);
+
+ psk = nvme_export_tls_key_versioned(test->version, test->hmac,
+ test->configured_psk,
+ test->psk_length);
+ if (!psk) {
+ test_rc = 1;
+ printf("ERROR: nvme_export_tls_key_versioned() failed with %d\n",
+ errno);
+ return;
+ }
+
+ check_str(test->exported_psk, psk);
+
+ free(psk);
+}
+
+static void import_versioned_test(struct test_data *test)
+{
+ unsigned char *psk;
+ unsigned char version;
+ unsigned char hmac;
+ size_t psk_length;
+
+ if (test->version != 1)
+ return;
+
+ printf("test nvme_import_tls_key_versioned hmac %d %s\n",
+ test->hmac, test->exported_psk);
+
+ psk = nvme_import_tls_key_versioned(test->exported_psk, &version,
+ &hmac, &psk_length);
+ if (!psk) {
+ test_rc = 1;
+ printf("ERROR: nvme_import_tls_key_versioned() failed with %d\n",
+ errno);
+ return;
+ }
+
+ if (test->version != version) {
+ test_rc = 1;
+ printf("ERROR: version parsing failed\n");
+ goto out;
+ }
+
+ if (test->hmac != hmac) {
+ test_rc = 1;
+ printf("ERROR: hmac parsing failed\n");
+ goto out;
+ }
+
+ if (test->psk_length != psk_length) {
+ test_rc = 1;
+ printf("ERROR: length parsing failed\n");
+ goto out;
+ }
+
+ if (memcmp(test->configured_psk, psk, psk_length)) {
+ test_rc = 1;
+ printf("ERROR: parsing psk failed\n");
+ }
+
+out:
+ free(psk);
+}
+
+int main(void)
+{
+ for (int i = 0; i < ARRAY_SIZE(test_data); i++)
+ export_test(&test_data[i]);
+
+ for (int i = 0; i < ARRAY_SIZE(test_data); i++)
+ import_test(&test_data[i]);
+
+ for (int i = 0; i < ARRAY_SIZE(test_data); i++)
+ export_versioned_test(&test_data[i]);
+
+ for (int i = 0; i < ARRAY_SIZE(test_data); i++)
+ import_versioned_test(&test_data[i]);
+
+ return test_rc ? EXIT_FAILURE : EXIT_SUCCESS;
+}