]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
doc: Documentation update (fix doc build error #1257)
authorSteven Seungcheol Lee <sc108.lee@samsung.com>
Thu, 25 Nov 2021 05:21:51 +0000 (14:21 +0900)
committerSteven Seungcheol Lee <sc108.lee@samsung.com>
Thu, 25 Nov 2021 05:21:51 +0000 (14:21 +0900)
nvme-check-dhchap-key, nvme-gen-dhchap-key the line of === under title
    need to be written same length as title
    -> fix [asciidoc: FAILED: manpage document title is mandatory]

nvme-connect-all, nvme-connect, nvme-discover new options are added

Signed-off-by: Steven Seungcheol Lee <sc108.lee@samsung.com>
12 files changed:
Documentation/nvme-check-dhchap-key.1 [new file with mode: 0644]
Documentation/nvme-check-dhchap-key.html [new file with mode: 0644]
Documentation/nvme-check-dhchap-key.txt
Documentation/nvme-connect-all.1
Documentation/nvme-connect-all.html
Documentation/nvme-connect.1
Documentation/nvme-connect.html
Documentation/nvme-discover.1
Documentation/nvme-discover.html
Documentation/nvme-gen-dhchap-key.1 [new file with mode: 0644]
Documentation/nvme-gen-dhchap-key.html [new file with mode: 0644]
Documentation/nvme-gen-dhchap-key.txt

diff --git a/Documentation/nvme-check-dhchap-key.1 b/Documentation/nvme-check-dhchap-key.1
new file mode 100644 (file)
index 0000000..df8df21
--- /dev/null
@@ -0,0 +1,51 @@
+'\" t
+.\"     Title: nvme-check-dhchap-key
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\"      Date: 11/25/2021
+.\"    Manual: NVMe Manual
+.\"    Source: NVMe
+.\"  Language: English
+.\"
+.TH "NVME\-CHECK\-DHCHAP\" "1" "11/25/2021" "NVMe" "NVMe Manual"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nvme-check-dhchap-key \- Check a generated host DH\-HMAC\-CHAP key
+.SH "SYNOPSIS"
+.sp
+.nf
+\fInvme check\-dhchap\-key\fR [\-\-key=<key> ]
+.fi
+.SH "DESCRIPTION"
+.sp
+Checks if the key is a valid DH\-HMAC\-CHAP host key of the form: DHHC\-1:00:ia6zGodOr4SEG0Zzaw398rpY0wqipUWj4jWjUh4HWUz6aQ2n: and prints it to stdout\&.
+.SH "OPTIONS"
+.PP
+\-k <key>, \-\-key=<key>
+.RS 4
+Key to be checked\&.
+.RE
+.SH "EXAMPLES"
+.sp
+No Examples
+.SH "NVME"
+.sp
+Part of the nvme\-user suite
diff --git a/Documentation/nvme-check-dhchap-key.html b/Documentation/nvme-check-dhchap-key.html
new file mode 100644 (file)
index 0000000..927ed7e
--- /dev/null
@@ -0,0 +1,800 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
+<head>\r
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
+<meta name="generator" content="AsciiDoc 8.6.8" />\r
+<title>nvme-check-dhchap-key(1)</title>\r
+<style type="text/css">\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
+h1, h2, h3, h4, h5, h6,\r
+div.title, caption.title,\r
+thead, p.table.header,\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
+  font-family: Arial,Helvetica,sans-serif;\r
+}\r
+\r
+body {\r
+  margin: 1em 5% 1em 5%;\r
+}\r
+\r
+a {\r
+  color: blue;\r
+  text-decoration: underline;\r
+}\r
+a:visited {\r
+  color: fuchsia;\r
+}\r
+\r
+em {\r
+  font-style: italic;\r
+  color: navy;\r
+}\r
+\r
+strong {\r
+  font-weight: bold;\r
+  color: #083194;\r
+}\r
+\r
+h1, h2, h3, h4, h5, h6 {\r
+  color: #527bbd;\r
+  margin-top: 1.2em;\r
+  margin-bottom: 0.5em;\r
+  line-height: 1.3;\r
+}\r
+\r
+h1, h2, h3 {\r
+  border-bottom: 2px solid silver;\r
+}\r
+h2 {\r
+  padding-top: 0.5em;\r
+}\r
+h3 {\r
+  float: left;\r
+}\r
+h3 + * {\r
+  clear: left;\r
+}\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
+\r
+div.sectionbody {\r
+  margin-left: 0;\r
+}\r
+\r
+hr {\r
+  border: 1px solid silver;\r
+}\r
+\r
+p {\r
+  margin-top: 0.5em;\r
+  margin-bottom: 0.5em;\r
+}\r
+\r
+ul, ol, li > p {\r
+  margin-top: 0;\r
+}\r
+ul > li     { color: #aaa; }\r
+ul > li > * { color: black; }\r
+\r
+.monospaced, code, pre {\r
+  font-family: "Courier New", Courier, monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+  padding: 0;\r
+  margin: 0;\r
+}\r
+\r
+\r
+#author {\r
+  color: #527bbd;\r
+  font-weight: bold;\r
+  font-size: 1.1em;\r
+}\r
+#email {\r
+}\r
+#revnumber, #revdate, #revremark {\r
+}\r
+\r
+#footer {\r
+  font-size: small;\r
+  border-top: 2px solid silver;\r
+  padding-top: 0.5em;\r
+  margin-top: 4.0em;\r
+}\r
+#footer-text {\r
+  float: left;\r
+  padding-bottom: 0.5em;\r
+}\r
+#footer-badges {\r
+  float: right;\r
+  padding-bottom: 0.5em;\r
+}\r
+\r
+#preamble {\r
+  margin-top: 1.5em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.imageblock, div.exampleblock, div.verseblock,\r
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
+div.admonitionblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.admonitionblock {\r
+  margin-top: 2.0em;\r
+  margin-bottom: 2.0em;\r
+  margin-right: 10%;\r
+  color: #606060;\r
+}\r
+\r
+div.content { /* Block element content. */\r
+  padding: 0;\r
+}\r
+\r
+/* Block element titles. */\r
+div.title, caption.title {\r
+  color: #527bbd;\r
+  font-weight: bold;\r
+  text-align: left;\r
+  margin-top: 1.0em;\r
+  margin-bottom: 0.5em;\r
+}\r
+div.title + * {\r
+  margin-top: 0;\r
+}\r
+\r
+td div.title:first-child {\r
+  margin-top: 0.0em;\r
+}\r
+div.content div.title:first-child {\r
+  margin-top: 0.0em;\r
+}\r
+div.content + div.title {\r
+  margin-top: 0.0em;\r
+}\r
+\r
+div.sidebarblock > div.content {\r
+  background: #ffffee;\r
+  border: 1px solid #dddddd;\r
+  border-left: 4px solid #f0f0f0;\r
+  padding: 0.5em;\r
+}\r
+\r
+div.listingblock > div.content {\r
+  border: 1px solid #dddddd;\r
+  border-left: 5px solid #f0f0f0;\r
+  background: #f8f8f8;\r
+  padding: 0.5em;\r
+}\r
+\r
+div.quoteblock, div.verseblock {\r
+  padding-left: 1.0em;\r
+  margin-left: 1.0em;\r
+  margin-right: 10%;\r
+  border-left: 5px solid #f0f0f0;\r
+  color: #888;\r
+}\r
+\r
+div.quoteblock > div.attribution {\r
+  padding-top: 0.5em;\r
+  text-align: right;\r
+}\r
+\r
+div.verseblock > pre.content {\r
+  font-family: inherit;\r
+  font-size: inherit;\r
+}\r
+div.verseblock > div.attribution {\r
+  padding-top: 0.75em;\r
+  text-align: left;\r
+}\r
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */\r
+div.verseblock + div.attribution {\r
+  text-align: left;\r
+}\r
+\r
+div.admonitionblock .icon {\r
+  vertical-align: top;\r
+  font-size: 1.1em;\r
+  font-weight: bold;\r
+  text-decoration: underline;\r
+  color: #527bbd;\r
+  padding-right: 0.5em;\r
+}\r
+div.admonitionblock td.content {\r
+  padding-left: 0.5em;\r
+  border-left: 3px solid #dddddd;\r
+}\r
+\r
+div.exampleblock > div.content {\r
+  border-left: 3px solid #dddddd;\r
+  padding-left: 0.5em;\r
+}\r
+\r
+div.imageblock div.content { padding-left: 0; }\r
+span.image img { border-style: none; }\r
+a.image:visited { color: white; }\r
+\r
+dl {\r
+  margin-top: 0.8em;\r
+  margin-bottom: 0.8em;\r
+}\r
+dt {\r
+  margin-top: 0.5em;\r
+  margin-bottom: 0;\r
+  font-style: normal;\r
+  color: navy;\r
+}\r
+dd > *:first-child {\r
+  margin-top: 0.1em;\r
+}\r
+\r
+ul, ol {\r
+    list-style-position: outside;\r
+}\r
+ol.arabic {\r
+  list-style-type: decimal;\r
+}\r
+ol.loweralpha {\r
+  list-style-type: lower-alpha;\r
+}\r
+ol.upperalpha {\r
+  list-style-type: upper-alpha;\r
+}\r
+ol.lowerroman {\r
+  list-style-type: lower-roman;\r
+}\r
+ol.upperroman {\r
+  list-style-type: upper-roman;\r
+}\r
+\r
+div.compact ul, div.compact ol,\r
+div.compact p, div.compact p,\r
+div.compact div, div.compact div {\r
+  margin-top: 0.1em;\r
+  margin-bottom: 0.1em;\r
+}\r
+\r
+tfoot {\r
+  font-weight: bold;\r
+}\r
+td > div.verse {\r
+  white-space: pre;\r
+}\r
+\r
+div.hdlist {\r
+  margin-top: 0.8em;\r
+  margin-bottom: 0.8em;\r
+}\r
+div.hdlist tr {\r
+  padding-bottom: 15px;\r
+}\r
+dt.hdlist1.strong, td.hdlist1.strong {\r
+  font-weight: bold;\r
+}\r
+td.hdlist1 {\r
+  vertical-align: top;\r
+  font-style: normal;\r
+  padding-right: 0.8em;\r
+  color: navy;\r
+}\r
+td.hdlist2 {\r
+  vertical-align: top;\r
+}\r
+div.hdlist.compact tr {\r
+  margin: 0;\r
+  padding-bottom: 0;\r
+}\r
+\r
+.comment {\r
+  background: yellow;\r
+}\r
+\r
+.footnote, .footnoteref {\r
+  font-size: 0.8em;\r
+}\r
+\r
+span.footnote, span.footnoteref {\r
+  vertical-align: super;\r
+}\r
+\r
+#footnotes {\r
+  margin: 20px 0 20px 0;\r
+  padding: 7px 0 0 0;\r
+}\r
+\r
+#footnotes div.footnote {\r
+  margin: 0 0 5px 0;\r
+}\r
+\r
+#footnotes hr {\r
+  border: none;\r
+  border-top: 1px solid silver;\r
+  height: 1px;\r
+  text-align: left;\r
+  margin-left: 0;\r
+  width: 20%;\r
+  min-width: 100px;\r
+}\r
+\r
+div.colist td {\r
+  padding-right: 0.5em;\r
+  padding-bottom: 0.3em;\r
+  vertical-align: top;\r
+}\r
+div.colist td img {\r
+  margin-top: 0.3em;\r
+}\r
+\r
+@media print {\r
+  #footer-badges { display: none; }\r
+}\r
+\r
+#toc {\r
+  margin-bottom: 2.5em;\r
+}\r
+\r
+#toctitle {\r
+  color: #527bbd;\r
+  font-size: 1.1em;\r
+  font-weight: bold;\r
+  margin-top: 1.0em;\r
+  margin-bottom: 0.1em;\r
+}\r
+\r
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {\r
+  margin-top: 0;\r
+  margin-bottom: 0;\r
+}\r
+div.toclevel2 {\r
+  margin-left: 2em;\r
+  font-size: 0.9em;\r
+}\r
+div.toclevel3 {\r
+  margin-left: 4em;\r
+  font-size: 0.9em;\r
+}\r
+div.toclevel4 {\r
+  margin-left: 6em;\r
+  font-size: 0.9em;\r
+}\r
+\r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+div.unbreakable { page-break-inside: avoid; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
+\r
+\r
+</style>\r
+<script type="text/javascript">\r
+/*<![CDATA[*/\r
+var asciidoc = {  // Namespace.\r
+\r
+/////////////////////////////////////////////////////////////////////\r
+// Table Of Contents generator\r
+/////////////////////////////////////////////////////////////////////\r
+\r
+/* Author: Mihai Bazon, September 2002\r
+ * http://students.infoiasi.ro/~mishoo\r
+ *\r
+ * Table Of Content generator\r
+ * Version: 0.4\r
+ *\r
+ * Feel free to use this script under the terms of the GNU General Public\r
+ * License, as long as you do not remove or alter this notice.\r
+ */\r
+\r
+ /* modified by Troy D. Hanson, September 2006. License: GPL */\r
+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */\r
+\r
+// toclevels = 1..4.\r
+toc: function (toclevels) {\r
+\r
+  function getText(el) {\r
+    var text = "";\r
+    for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
+      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.\r
+        text += i.data;\r
+      else if (i.firstChild != null)\r
+        text += getText(i);\r
+    }\r
+    return text;\r
+  }\r
+\r
+  function TocEntry(el, text, toclevel) {\r
+    this.element = el;\r
+    this.text = text;\r
+    this.toclevel = toclevel;\r
+  }\r
+\r
+  function tocEntries(el, toclevels) {\r
+    var result = new Array;\r
+    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');\r
+    // Function that scans the DOM tree for header elements (the DOM2\r
+    // nodeIterator API would be a better technique but not supported by all\r
+    // browsers).\r
+    var iterate = function (el) {\r
+      for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
+        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {\r
+          var mo = re.exec(i.tagName);\r
+          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {\r
+            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);\r
+          }\r
+          iterate(i);\r
+        }\r
+      }\r
+    }\r
+    iterate(el);\r
+    return result;\r
+  }\r
+\r
+  var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName.toLowerCase() == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
+  var entries = tocEntries(document.getElementById("content"), toclevels);\r
+  for (var i = 0; i < entries.length; ++i) {\r
+    var entry = entries[i];\r
+    if (entry.element.id == "")\r
+      entry.element.id = "_toc_" + i;\r
+    var a = document.createElement("a");\r
+    a.href = "#" + entry.element.id;\r
+    a.appendChild(document.createTextNode(entry.text));\r
+    var div = document.createElement("div");\r
+    div.appendChild(a);\r
+    div.className = "toclevel" + entry.toclevel;\r
+    toc.appendChild(div);\r
+  }\r
+  if (entries.length == 0)\r
+    toc.parentNode.removeChild(toc);\r
+},\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////\r
+// Footnotes generator\r
+/////////////////////////////////////////////////////////////////////\r
+\r
+/* Based on footnote generation code from:\r
+ * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html\r
+ */\r
+\r
+footnotes: function () {\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
+  var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
+  var spans = cont.getElementsByTagName("span");\r
+  var refs = {};\r
+  var n = 0;\r
+  for (i=0; i<spans.length; i++) {\r
+    if (spans[i].className == "footnote") {\r
+      n++;\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
+      noteholder.innerHTML +=\r
+        "<div class='footnote' id='_footnote_" + n + "'>" +\r
+        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
+        n + "</a>. " + note + "</div>";\r
+      var id =spans[i].getAttribute("id");\r
+      if (id != null) refs["#"+id] = n;\r
+    }\r
+  }\r
+  if (n == 0)\r
+    noteholder.parentNode.removeChild(noteholder);\r
+  else {\r
+    // Process footnoterefs.\r
+    for (i=0; i<spans.length; i++) {\r
+      if (spans[i].className == "footnoteref") {\r
+        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");\r
+        href = href.match(/#.*/)[0];  // Because IE return full URL.\r
+        n = refs[href];\r
+        spans[i].innerHTML =\r
+          "[<a href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+      }\r
+    }\r
+  }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
+}\r
+\r
+}\r
+asciidoc.install();\r
+/*]]>*/\r
+</script>\r
+</head>\r
+<body class="manpage">\r
+<div id="header">\r
+<h1>\r
+nvme-check-dhchap-key(1) Manual Page\r
+</h1>\r
+<h2>NAME</h2>\r
+<div class="sectionbody">\r
+<p>nvme-check-dhchap-key -\r
+   Check a generated host DH-HMAC-CHAP key\r
+</p>\r
+</div>\r
+</div>\r
+<div id="content">\r
+<div class="sect1">\r
+<h2 id="_synopsis">SYNOPSIS</h2>\r
+<div class="sectionbody">\r
+<div class="verseblock">\r
+<pre class="content"><em>nvme check-dhchap-key</em> [--key=&lt;key&gt; ]</pre>\r
+<div class="attribution">\r
+</div></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_description">DESCRIPTION</h2>\r
+<div class="sectionbody">\r
+<div class="paragraph"><p>Checks if the key is a valid DH-HMAC-CHAP host key of the form:\r
+DHHC-1:00:ia6zGodOr4SEG0Zzaw398rpY0wqipUWj4jWjUh4HWUz6aQ2n:\r
+and prints it to stdout.</p></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_options">OPTIONS</h2>\r
+<div class="sectionbody">\r
+<div class="dlist"><dl>\r
+<dt class="hdlist1">\r
+-k &lt;key&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--key=&lt;key&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Key to be checked.\r
+</p>\r
+</dd>\r
+</dl></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_examples">EXAMPLES</h2>\r
+<div class="sectionbody">\r
+<div class="paragraph"><p>No Examples</p></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_nvme">NVME</h2>\r
+<div class="sectionbody">\r
+<div class="paragraph"><p>Part of the nvme-user suite</p></div>\r
+</div>\r
+</div>\r
+</div>\r
+<div id="footnotes"><hr /></div>\r
+<div id="footer">\r
+<div id="footer-text">\r
+Last updated 2021-11-25 14:13:07 KST\r
+</div>\r
+</div>\r
+</body>\r
+</html>\r
index 75008c7b96ba21a6bb47181b615ae2a493487a71..9cfa1f73077e4d5be5018ed1d9e37e26256ad376 100644 (file)
@@ -1,5 +1,5 @@
 nvme-check-dhchap-key(1)
-===================
+========================
 
 NAME
 ----
index a53a0179e706eab3209e823bc2ca40f5ac7d6b45..f2a03f47be46a6e9764197e4e926b99a21848577 100644 (file)
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: nvme-connect-all
-.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
-.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 01/20/2021
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\"      Date: 11/25/2021
 .\"    Manual: NVMe Manual
 .\"    Source: NVMe
 .\"  Language: English
 .\"
-.TH "NVME\-CONNECT\-ALL" "1" "01/20/2021" "NVMe" "NVMe Manual"
+.TH "NVME\-CONNECT\-ALL" "1" "11/25/2021" "NVMe" "NVMe Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -34,12 +34,15 @@ nvme-connect-all \- Discover and Connect to Fabrics controllers\&.
 .nf
 \fInvme connect\-all\fR
                 [\-\-transport=<trtype>     | \-t <trtype>]
+                [\-\-nqn=<subnqn>           | \-n <subnqn>]
                 [\-\-traddr=<traddr>        | \-a <traddr>]
                 [\-\-trsvcid=<trsvcid>      | \-s <trsvcid>]
                 [\-\-host\-traddr=<traddr>   | \-w <traddr>]
+                [\-\-host\-iface=<iface>     | \-f <iface>]
                 [\-\-hostnqn=<hostnqn>      | \-q <hostnqn>]
                 [\-\-hostid=<hostid>        | \-I <hostid>]
                 [\-\-raw=<filename>         | \-r <filename>]
+                [\-\-cfg\-file=<cfg>         | \-C <cfg>]
                 [\-\-keep\-alive\-tmo=<#>     | \-k <#>]
                 [\-\-reconnect\-delay=<#>    | \-c <#>]
                 [\-\-ctrl\-loss\-tmo=<#>      | \-l <#>]
@@ -52,6 +55,7 @@ nvme-connect-all \- Discover and Connect to Fabrics controllers\&.
                 [\-\-matching               | \-m]
                 [\-\-persistent             | \-p]
                 [\-\-quiet                  | \-S]
+                [\-\-dump\-config            | \-O]
 .fi
 .SH "DESCRIPTION"
 .sp
@@ -104,6 +108,11 @@ T}
 .sp 1
 .RE
 .PP
+\-n <subnqn>, \-\-nqn <subnqn>
+.RS 4
+This field specifies the name for the NVMe subsystem to connect to\&.
+.RE
+.PP
 \-a <traddr>, \-\-traddr=<traddr>
 .RS 4
 This field specifies the network address of the Discovery Controller\&. For transports using IP addressing (e\&.g\&. rdma) this should be an IP\-based address (ex\&. IPv4)\&.
@@ -116,7 +125,12 @@ This field specifies the transport service id\&. For transports using IP address
 .PP
 \-w <traddr>, \-\-host\-traddr=<traddr>
 .RS 4
-This field specifies the network address used on the host to connect to the Discovery Controller\&.
+This field specifies the network address used on the host to connect to the Controller\&. For TCP, this sets the source address on the socket\&.
+.RE
+.PP
+\-f <iface>, \-\-host\-iface=<iface>
+.RS 4
+This field specifies the network interface used on the host to connect to the Controller (e\&.g\&. IP eth1, enp2s0, enx78e7d1ea46da)\&. This forces the connection to be made on a specific interface instead of letting the system decide\&.
 .RE
 .PP
 \-q <hostnqn>, \-\-hostnqn=<hostnqn>
@@ -138,6 +152,14 @@ command and dump it to a raw binary file\&. By default
 will dump the output to stdout\&.
 .RE
 .PP
+\-C <cfg>, \-\-config\-file=<cfg>
+.RS 4
+Use the specified JSON configuration file instead of the default /etc/nvme/config\&.json file or
+\fInone\fR
+to not read in an existing configuration file\&. The JSON configuration file format is documented in
+\m[blue]\fBhttps://github\&.com/linux\-nvme/libnvme/doc/config\-schema\&.json\fR\m[]
+.RE
+.PP
 \-k <#>, \-\-keep\-alive\-tmo=<#>
 .RS 4
 Overrides the default keep alive timeout (in seconds)\&. This option will be ignored for discovery, but will be passed on to the subsequent connect call\&.
@@ -197,6 +219,11 @@ Don\(cqt remove the discovery controller after retrieving the discovery log page
 .RS 4
 Suppress error messages\&.
 .RE
+.PP
+\-O, \-\-dump\-config
+.RS 4
+Print out resulting JSON configuration file to stdout\&.
+.RE
 .SH "EXAMPLES"
 .sp
 .RS 4
index f779c7b9028717cd9cdcecc85036d79e33ca842a..8d6448b0cd0ac9b6c9949959e9b415a1e43ae6ca 100644 (file)
@@ -1,10 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc" />\r
+<meta name="generator" content="AsciiDoc 8.6.8" />\r
 <title>nvme-connect-all(1)</title>\r
 <style type="text/css">\r
 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
@@ -95,9 +94,7 @@ ul > li > * { color: black; }
   padding: 0;\r
   margin: 0;\r
 }\r
-pre {\r
-  white-space: pre-wrap;\r
-}\r
+\r
 \r
 #author {\r
   color: #527bbd;\r
@@ -226,7 +223,7 @@ div.exampleblock > div.content {
 }\r
 \r
 div.imageblock div.content { padding-left: 0; }\r
-span.image img { border-style: none; vertical-align: text-bottom; }\r
+span.image img { border-style: none; }\r
 a.image:visited { color: white; }\r
 \r
 dl {\r
@@ -436,7 +433,7 @@ thead, p.table.header {
 p.table {\r
   margin-top: 0;\r
 }\r
-/* Because the table frame attribute is overridden by CSS in most browsers. */\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
 div.tableblock > table[frame="void"] {\r
   border-style: none;\r
 }\r
@@ -751,12 +748,15 @@ nvme-connect-all(1) Manual Page
 <div class="verseblock">\r
 <pre class="content"><em>nvme connect-all</em>\r
                 [--transport=&lt;trtype&gt;     | -t &lt;trtype&gt;]\r
+                [--nqn=&lt;subnqn&gt;           | -n &lt;subnqn&gt;]\r
                 [--traddr=&lt;traddr&gt;        | -a &lt;traddr&gt;]\r
                 [--trsvcid=&lt;trsvcid&gt;      | -s &lt;trsvcid&gt;]\r
                 [--host-traddr=&lt;traddr&gt;   | -w &lt;traddr&gt;]\r
+                [--host-iface=&lt;iface&gt;     | -f &lt;iface&gt;]\r
                 [--hostnqn=&lt;hostnqn&gt;      | -q &lt;hostnqn&gt;]\r
                 [--hostid=&lt;hostid&gt;        | -I &lt;hostid&gt;]\r
                 [--raw=&lt;filename&gt;         | -r &lt;filename&gt;]\r
+                [--cfg-file=&lt;cfg&gt;         | -C &lt;cfg&gt;]\r
                 [--keep-alive-tmo=&lt;#&gt;     | -k &lt;#&gt;]\r
                 [--reconnect-delay=&lt;#&gt;    | -c &lt;#&gt;]\r
                 [--ctrl-loss-tmo=&lt;#&gt;      | -l &lt;#&gt;]\r
@@ -768,7 +768,8 @@ nvme-connect-all(1) Manual Page
                 [--queue-size=&lt;#&gt;         | -Q &lt;#&gt;]\r
                 [--matching               | -m]\r
                 [--persistent             | -p]\r
-                [--quiet                  | -S]</pre>\r
+                [--quiet                  | -S]\r
+                [--dump-config            | -O]</pre>\r
 <div class="attribution">\r
 </div></div>\r
 </div>\r
@@ -837,6 +838,17 @@ cellspacing="0" cellpadding="4">
 </div>\r
 </dd>\r
 <dt class="hdlist1">\r
+-n &lt;subnqn&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--nqn &lt;subnqn&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        This field specifies the name for the NVMe subsystem to connect to.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
 -a &lt;traddr&gt;\r
 </dt>\r
 <dt class="hdlist1">\r
@@ -871,7 +883,21 @@ cellspacing="0" cellpadding="4">
 <dd>\r
 <p>\r
         This field specifies the network address used on the host to connect\r
-        to the Discovery Controller.\r
+        to the Controller. For TCP, this sets the source address on the socket.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-f &lt;iface&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--host-iface=&lt;iface&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        This field specifies the network interface used on the host to connect\r
+        to the Controller (e.g. IP eth1, enp2s0, enx78e7d1ea46da). This forces\r
+        the connection to be made on a specific interface instead of letting\r
+        the system decide.\r
 </p>\r
 </dd>\r
 <dt class="hdlist1">\r
@@ -917,6 +943,21 @@ cellspacing="0" cellpadding="4">
 </p>\r
 </dd>\r
 <dt class="hdlist1">\r
+-C &lt;cfg&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--config-file=&lt;cfg&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Use the specified JSON configuration file instead of the\r
+        default /etc/nvme/config.json file or <em>none</em> to not read in\r
+        an existing configuration file. The JSON configuration file\r
+        format is documented in\r
+        <a href="https://github.com/linux-nvme/libnvme/doc/config-schema.json">https://github.com/linux-nvme/libnvme/doc/config-schema.json</a>\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
 -k &lt;#&gt;\r
 </dt>\r
 <dt class="hdlist1">\r
@@ -1058,6 +1099,17 @@ cellspacing="0" cellpadding="4">
         Suppress error messages.\r
 </p>\r
 </dd>\r
+<dt class="hdlist1">\r
+-O\r
+</dt>\r
+<dt class="hdlist1">\r
+--dump-config\r
+</dt>\r
+<dd>\r
+<p>\r
+        Print out resulting JSON configuration file to stdout.\r
+</p>\r
+</dd>\r
 </dl></div>\r
 </div>\r
 </div>\r
@@ -1114,8 +1166,7 @@ nvme-connect(1)</p></div>
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Last updated\r
- 2021-01-20 23:40:57 CET\r
+Last updated 2021-11-25 14:00:47 KST\r
 </div>\r
 </div>\r
 </body>\r
index dbb4191285cbcec6f9b3c26a1bda057b7393e692..d4675410a70919ab14fbf2b935af68a15486825d 100644 (file)
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: nvme-connect
 .\"    Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 10/20/2020
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\"      Date: 11/25/2021
 .\"    Manual: NVMe Manual
 .\"    Source: NVMe
 .\"  Language: English
 .\"
-.TH "NVME\-CONNECT" "1" "10/20/2020" "NVMe" "NVMe Manual"
+.TH "NVME\-CONNECT" "1" "11/25/2021" "NVMe" "NVMe Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -38,8 +38,12 @@ nvme-connect \- Connect to a Fabrics controller\&.
                 [\-\-traddr=<traddr>        | \-a <traddr>]
                 [\-\-trsvcid=<trsvcid>      | \-s <trsvcid>]
                 [\-\-host\-traddr=<traddr>   | \-w <traddr>]
+                [\-\-host\-iface=<iface>     | \-f <iface>]
                 [\-\-hostnqn=<hostnqn>      | \-q <hostnqn>]
                 [\-\-hostid=<hostid>        | \-I <hostid>]
+                [\-\-config\-file=<cfg>      | \-J <cfg> ]
+                [\-\-dhchap\-secret=<secret> | \-S <secret>]
+                [\-\-dhchap\-ctrl\-secret=<secret> | \-C <secret>]
                 [\-\-nr\-io\-queues=<#>       | \-i <#>]
                 [\-\-nr\-write\-queues=<#>    | \-W <#>]
                 [\-\-nr\-poll\-queues=<#>     | \-P <#>]
@@ -51,6 +55,7 @@ nvme-connect \- Connect to a Fabrics controller\&.
                 [\-\-disable\-sqflow         | \-d]
                 [\-\-hdr\-digest             | \-g]
                 [\-\-data\-digest            | \-G]
+                [\-\-dump\-config            | \-O]
 .fi
 .SH "DESCRIPTION"
 .sp
@@ -114,7 +119,12 @@ This field specifies the transport service id\&. For transports using IP address
 .PP
 \-w <traddr>, \-\-host\-traddr=<traddr>
 .RS 4
-This field specifies the network address used on the host to connect to the Controller\&.
+This field specifies the network address used on the host to connect to the Controller\&. For TCP, this sets the source address on the socket\&.
+.RE
+.PP
+\-f <iface>, \-\-host\-iface=<iface>
+.RS 4
+This field specifies the network interface used on the host to connect to the Controller (e\&.g\&. IP eth1, enp2s0, enx78e7d1ea46da)\&. This forces the connection to be made on a specific interface instead of letting the system decide\&.
 .RE
 .PP
 \-q <hostnqn>, \-\-hostnqn=<hostnqn>
@@ -127,6 +137,26 @@ Overrides the default Host NQN that identifies the NVMe Host\&. If this option i
 UUID(Universally Unique Identifier) to be discovered which should be formatted\&.
 .RE
 .PP
+\-J <cfg>, \-\-config\-file=<cfg>
+.RS 4
+Use the specified JSON configuration file instead of the default /etc/nvme/config\&.json file or
+\fInone\fR
+to not read in an existing configuration file\&. The JSON configuration file format is documented in
+\m[blue]\fBhttps://github\&.com/linux\-nvme/libnvme/doc/config\-schema\&.json\fR\m[]
+.RE
+.PP
+\-S <secret>, \-\-dhchap\-secret=<secret>
+.RS 4
+NVMe In\-band authentication secret; needs to be in ASCII format as specified in NVMe 2\&.0 section 8\&.13\&.5\&.8
+\fISecret representation\fR\&. If this option is not specified, the default is read from /etc/nvme/hostkey\&. If that does not exist no in\-band authentication is attempted\&.
+.RE
+.PP
+\-C <secret>, \-\-dhchap\-ctrl\-secret=<secret>
+.RS 4
+NVMe In\-band authentication controller secret for bi\-directional authentication; needs to be in ASCII format as specified in NVMe 2\&.0 section 8\&.13\&.5\&.8
+\fISecret representation\fR\&. If not present bi\-directional authentication is not attempted\&.
+.RE
+.PP
 \-i <#>, \-\-nr\-io\-queues=<#>
 .RS 4
 Overrides the default number of I/O queues create by the driver\&.
@@ -181,6 +211,11 @@ Generates/verifies header digest (TCP)\&.
 .RS 4
 Generates/verifies data digest (TCP)\&.
 .RE
+.PP
+\-O, \-\-dump\-config
+.RS 4
+Print out resulting JSON configuration file to stdout\&.
+.RE
 .SH "EXAMPLES"
 .sp
 .RS 4
index 8e25db9c22b1ed7d2ec0cc8617439f5383297493..ad0a60d418edeac3ead7f49a82f3c5cd3ab6c3b2 100644 (file)
@@ -1,10 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc" />\r
+<meta name="generator" content="AsciiDoc 8.6.8" />\r
 <title>nvme-connect(1)</title>\r
 <style type="text/css">\r
 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
@@ -95,9 +94,7 @@ ul > li > * { color: black; }
   padding: 0;\r
   margin: 0;\r
 }\r
-pre {\r
-  white-space: pre-wrap;\r
-}\r
+\r
 \r
 #author {\r
   color: #527bbd;\r
@@ -226,7 +223,7 @@ div.exampleblock > div.content {
 }\r
 \r
 div.imageblock div.content { padding-left: 0; }\r
-span.image img { border-style: none; vertical-align: text-bottom; }\r
+span.image img { border-style: none; }\r
 a.image:visited { color: white; }\r
 \r
 dl {\r
@@ -755,8 +752,12 @@ nvme-connect(1) Manual Page
                 [--traddr=&lt;traddr&gt;        | -a &lt;traddr&gt;]\r
                 [--trsvcid=&lt;trsvcid&gt;      | -s &lt;trsvcid&gt;]\r
                 [--host-traddr=&lt;traddr&gt;   | -w &lt;traddr&gt;]\r
+                [--host-iface=&lt;iface&gt;     | -f &lt;iface&gt;]\r
                 [--hostnqn=&lt;hostnqn&gt;      | -q &lt;hostnqn&gt;]\r
                 [--hostid=&lt;hostid&gt;        | -I &lt;hostid&gt;]\r
+                [--config-file=&lt;cfg&gt;      | -J &lt;cfg&gt; ]\r
+                [--dhchap-secret=&lt;secret&gt; | -S &lt;secret&gt;]\r
+                [--dhchap-ctrl-secret=&lt;secret&gt; | -C &lt;secret&gt;]\r
                 [--nr-io-queues=&lt;#&gt;       | -i &lt;#&gt;]\r
                 [--nr-write-queues=&lt;#&gt;    | -W &lt;#&gt;]\r
                 [--nr-poll-queues=&lt;#&gt;     | -P &lt;#&gt;]\r
@@ -767,7 +768,8 @@ nvme-connect(1) Manual Page
                 [--duplicate-connect      | -D]\r
                 [--disable-sqflow         | -d]\r
                 [--hdr-digest             | -g]\r
-                [--data-digest            | -G]</pre>\r
+                [--data-digest            | -G]\r
+                [--dump-config            | -O]</pre>\r
 <div class="attribution">\r
 </div></div>\r
 </div>\r
@@ -873,7 +875,21 @@ cellspacing="0" cellpadding="4">
 <dd>\r
 <p>\r
         This field specifies the network address used on the host to connect\r
-        to the Controller.\r
+        to the Controller. For TCP, this sets the source address on the socket.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-f &lt;iface&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--host-iface=&lt;iface&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        This field specifies the network interface used on the host to connect\r
+        to the Controller (e.g. IP eth1, enp2s0, enx78e7d1ea46da). This forces\r
+        the connection to be made on a specific interface instead of letting\r
+        the system decide.\r
 </p>\r
 </dd>\r
 <dt class="hdlist1">\r
@@ -904,6 +920,50 @@ cellspacing="0" cellpadding="4">
 </p>\r
 </dd>\r
 <dt class="hdlist1">\r
+-J &lt;cfg&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--config-file=&lt;cfg&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Use the specified JSON configuration file instead of the\r
+        default /etc/nvme/config.json file or <em>none</em> to not read in\r
+        an existing configuration file. The JSON configuration file\r
+        format is documented in\r
+        <a href="https://github.com/linux-nvme/libnvme/doc/config-schema.json">https://github.com/linux-nvme/libnvme/doc/config-schema.json</a>\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-S &lt;secret&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--dhchap-secret=&lt;secret&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        NVMe In-band authentication secret; needs to be in ASCII format as\r
+        specified in NVMe 2.0 section 8.13.5.8 <em>Secret representation</em>.\r
+        If this option is not specified, the default is read from\r
+        /etc/nvme/hostkey. If that does not exist no in-band authentication\r
+        is attempted.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-C &lt;secret&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--dhchap-ctrl-secret=&lt;secret&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        NVMe In-band authentication controller secret for bi-directional\r
+        authentication; needs to be in ASCII format as\r
+        specified in NVMe 2.0 section 8.13.5.8 <em>Secret representation</em>.\r
+        If not present bi-directional authentication is not attempted.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
 -i &lt;#&gt;\r
 </dt>\r
 <dt class="hdlist1">\r
@@ -1028,6 +1088,17 @@ cellspacing="0" cellpadding="4">
         Generates/verifies data digest (TCP).\r
 </p>\r
 </dd>\r
+<dt class="hdlist1">\r
+-O\r
+</dt>\r
+<dt class="hdlist1">\r
+--dump-config\r
+</dt>\r
+<dd>\r
+<p>\r
+        Print out resulting JSON configuration file to stdout.\r
+</p>\r
+</dd>\r
 </dl></div>\r
 </div>\r
 </div>\r
@@ -1073,8 +1144,7 @@ and <a href="mailto:hch@lst.de">Christoph Hellwig</a></p></div>
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Last updated\r
- 2020-07-14 17:50:40 -03\r
+Last updated 2021-11-25 14:00:47 KST\r
 </div>\r
 </div>\r
 </body>\r
index 80b8a477e9592de505fd91dee15793e0379d0fc4..c152299688c41bc6a0334ad7fddaa31918f255ec 100644 (file)
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: nvme-discover
 .\"    Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 10/20/2020
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\"      Date: 11/25/2021
 .\"    Manual: NVMe Manual
 .\"    Source: NVMe
 .\"  Language: English
 .\"
-.TH "NVME\-DISCOVER" "1" "10/20/2020" "NVMe" "NVMe Manual"
+.TH "NVME\-DISCOVER" "1" "11/25/2021" "NVMe" "NVMe Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -34,12 +34,16 @@ nvme-discover \- Send Get Log Page request to Discovery Controller\&.
 .nf
 \fInvme discover\fR
                 [\-\-transport=<trtype>     | \-t <trtype>]
+                [\-\-nqn=<subnqn>           | \-n <subnqn>]
                 [\-\-traddr=<traddr>        | \-a <traddr>]
                 [\-\-trsvcid=<trsvcid>      | \-s <trsvcid>]
                 [\-\-host\-traddr=<traddr>   | \-w <traddr>]
+                [\-\-host\-iface=<iface>     | \-f <iface>]
                 [\-\-hostnqn=<hostnqn>      | \-q <hostnqn>]
                 [\-\-hostid=<hostid>        | \-I <hostid>]
                 [\-\-raw=<filename>         | \-r <filename>]
+                [\-\-device=<device>        | \-d <device>]
+                [\-\-cfg\-file=<cfg>         | \-C <cfg> ]
                 [\-\-keep\-alive\-tmo=<sec>   | \-k <sec>]
                 [\-\-reconnect\-delay=<#>    | \-c <#>]
                 [\-\-ctrl\-loss\-tmo=<#>      | \-l <#>]
@@ -51,6 +55,8 @@ nvme-discover \- Send Get Log Page request to Discovery Controller\&.
                 [\-\-queue\-size=<#>         | \-Q <#>]
                 [\-\-persistent             | \-p]
                 [\-\-quiet                  | \-S]
+                [\-\-dump\-config            | \-O]
+                [\-\-output\-format=<fmt>    | \-o <fmt>]
 .fi
 .SH "DESCRIPTION"
 .sp
@@ -108,6 +114,11 @@ T}
 .sp 1
 .RE
 .PP
+\-n <subnqn>, \-\-nqn <subnqn>
+.RS 4
+This field specifies the name for the NVMe subsystem to connect to\&.
+.RE
+.PP
 \-a <traddr>, \-\-traddr=<traddr>
 .RS 4
 This field specifies the network address of the Discovery Controller\&. For transports using IP addressing (e\&.g\&. rdma) this should be an IP\-based (ex\&. IPv4) address\&.
@@ -120,7 +131,12 @@ This field specifies the transport service id\&. For transports using IP address
 .PP
 \-w <traddr>, \-\-host\-traddr=<traddr>
 .RS 4
-This field specifies the network address used on the host to connect to the Discovery Controller\&.
+This field specifies the network address used on the host to connect to the Controller\&. For TCP, this sets the source address on the socket\&.
+.RE
+.PP
+\-f <iface>, \-\-host\-iface=<iface>
+.RS 4
+This field specifies the network interface used on the host to connect to the Controller (e\&.g\&. IP eth1, enp2s0, enx78e7d1ea46da)\&. This forces the connection to be made on a specific interface instead of letting the system decide\&.
 .RE
 .PP
 \-q <hostnqn>, \-\-hostnqn=<hostnqn>
@@ -142,6 +158,19 @@ command and dump it to a raw binary file\&. By default
 will dump the output to stdout\&.
 .RE
 .PP
+\-d <device>, \-\-device=<device>
+.RS 4
+This field takes a device as input\&. Device is in the format of nvme*, eg\&. nvme0, nvme1
+.RE
+.PP
+\-C <cfg>, \-\-config\-file=<cfg>
+.RS 4
+Use the specified JSON configuration file instead of the default /etc/nvme/config\&.json file or
+\fInone\fR
+to not read in an existing configuration file\&. The JSON configuration file format is documented in
+\m[blue]\fBhttps://github\&.com/linux\-nvme/libnvme/doc/config\-schema\&.json\fR\m[]
+.RE
+.PP
 \-k <#>, \-\-keep\-alive\-tmo=<#>
 .RS 4
 Overrides the default dealy (in seconds) for keep alive\&. This option will be ignored for the discovery, and it is only implemented for completeness\&.
@@ -196,6 +225,19 @@ Persistent discovery connection\&.
 .RS 4
 Suppress already connected errors\&.
 .RE
+.PP
+\-O, \-\-dump\-config
+.RS 4
+Print out resulting JSON configuration file to stdout\&.
+.RE
+.PP
+\-o <format>, \-\-output\-format=<format>
+.RS 4
+Set the reporting format to
+\fInormal\fR,
+\fIjson\fR, or
+\fIbinary\fR\&. Only one output format can be used at a time\&.
+.RE
 .SH "EXAMPLES"
 .sp
 .RS 4
index e03361d9260e2ca163a8483b13295cba2d9a6ebe..622ae4cc19f23016f31e2795c5a3eeedeae200a9 100644 (file)
@@ -1,10 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc" />\r
+<meta name="generator" content="AsciiDoc 8.6.8" />\r
 <title>nvme-discover(1)</title>\r
 <style type="text/css">\r
 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
@@ -95,9 +94,7 @@ ul > li > * { color: black; }
   padding: 0;\r
   margin: 0;\r
 }\r
-pre {\r
-  white-space: pre-wrap;\r
-}\r
+\r
 \r
 #author {\r
   color: #527bbd;\r
@@ -226,7 +223,7 @@ div.exampleblock > div.content {
 }\r
 \r
 div.imageblock div.content { padding-left: 0; }\r
-span.image img { border-style: none; vertical-align: text-bottom; }\r
+span.image img { border-style: none; }\r
 a.image:visited { color: white; }\r
 \r
 dl {\r
@@ -751,12 +748,16 @@ nvme-discover(1) Manual Page
 <div class="verseblock">\r
 <pre class="content"><em>nvme discover</em>\r
                 [--transport=&lt;trtype&gt;     | -t &lt;trtype&gt;]\r
+                [--nqn=&lt;subnqn&gt;           | -n &lt;subnqn&gt;]\r
                 [--traddr=&lt;traddr&gt;        | -a &lt;traddr&gt;]\r
                 [--trsvcid=&lt;trsvcid&gt;      | -s &lt;trsvcid&gt;]\r
                 [--host-traddr=&lt;traddr&gt;   | -w &lt;traddr&gt;]\r
+                [--host-iface=&lt;iface&gt;     | -f &lt;iface&gt;]\r
                 [--hostnqn=&lt;hostnqn&gt;      | -q &lt;hostnqn&gt;]\r
                 [--hostid=&lt;hostid&gt;        | -I &lt;hostid&gt;]\r
                 [--raw=&lt;filename&gt;         | -r &lt;filename&gt;]\r
+                [--device=&lt;device&gt;        | -d &lt;device&gt;]\r
+                [--cfg-file=&lt;cfg&gt;         | -C &lt;cfg&gt; ]\r
                 [--keep-alive-tmo=&lt;sec&gt;   | -k &lt;sec&gt;]\r
                 [--reconnect-delay=&lt;#&gt;    | -c &lt;#&gt;]\r
                 [--ctrl-loss-tmo=&lt;#&gt;      | -l &lt;#&gt;]\r
@@ -767,7 +768,9 @@ nvme-discover(1) Manual Page
                 [--nr-poll-queues=&lt;#&gt;     | -P &lt;#&gt;]\r
                 [--queue-size=&lt;#&gt;         | -Q &lt;#&gt;]\r
                 [--persistent             | -p]\r
-                [--quiet                  | -S]</pre>\r
+                [--quiet                  | -S]\r
+                [--dump-config            | -O]\r
+                [--output-format=&lt;fmt&gt;    | -o &lt;fmt&gt;]</pre>\r
 <div class="attribution">\r
 </div></div>\r
 </div>\r
@@ -858,6 +861,17 @@ cellspacing="0" cellpadding="4">
 </div>\r
 </dd>\r
 <dt class="hdlist1">\r
+-n &lt;subnqn&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--nqn &lt;subnqn&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        This field specifies the name for the NVMe subsystem to connect to.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
 -a &lt;traddr&gt;\r
 </dt>\r
 <dt class="hdlist1">\r
@@ -892,7 +906,21 @@ cellspacing="0" cellpadding="4">
 <dd>\r
 <p>\r
         This field specifies the network address used on the host to connect\r
-        to the Discovery Controller.\r
+        to the Controller. For TCP, this sets the source address on the socket.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-f &lt;iface&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--host-iface=&lt;iface&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        This field specifies the network interface used on the host to connect\r
+        to the Controller (e.g. IP eth1, enp2s0, enx78e7d1ea46da). This forces\r
+        the connection to be made on a specific interface instead of letting\r
+        the system decide.\r
 </p>\r
 </dd>\r
 <dt class="hdlist1">\r
@@ -935,6 +963,33 @@ cellspacing="0" cellpadding="4">
 </p>\r
 </dd>\r
 <dt class="hdlist1">\r
+-d &lt;device&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--device=&lt;device&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        This field takes a device as input. Device is in the format of nvme*,\r
+        eg. nvme0, nvme1\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-C &lt;cfg&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--config-file=&lt;cfg&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Use the specified JSON configuration file instead of the\r
+        default /etc/nvme/config.json file or <em>none</em> to not read in\r
+        an existing configuration file. The JSON configuration file\r
+        format is documented in\r
+        <a href="https://github.com/linux-nvme/libnvme/doc/config-schema.json">https://github.com/linux-nvme/libnvme/doc/config-schema.json</a>\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
 -k &lt;#&gt;\r
 </dt>\r
 <dt class="hdlist1">\r
@@ -1063,6 +1118,29 @@ cellspacing="0" cellpadding="4">
         Suppress already connected errors.\r
 </p>\r
 </dd>\r
+<dt class="hdlist1">\r
+-O\r
+</dt>\r
+<dt class="hdlist1">\r
+--dump-config\r
+</dt>\r
+<dd>\r
+<p>\r
+        Print out resulting JSON configuration file to stdout.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-o &lt;format&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--output-format=&lt;format&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+              Set the reporting format to <em>normal</em>, <em>json</em>, or\r
+              <em>binary</em>. Only one output format can be used at a time.\r
+</p>\r
+</dd>\r
 </dl></div>\r
 </div>\r
 </div>\r
@@ -1125,8 +1203,7 @@ nvme-connect-all(1)</p></div>
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Last updated\r
- 2020-07-14 17:46:53 -03\r
+Last updated 2021-11-25 14:00:47 KST\r
 </div>\r
 </div>\r
 </body>\r
diff --git a/Documentation/nvme-gen-dhchap-key.1 b/Documentation/nvme-gen-dhchap-key.1
new file mode 100644 (file)
index 0000000..ad54b1f
--- /dev/null
@@ -0,0 +1,69 @@
+'\" t
+.\"     Title: nvme-gen-dhchap-key
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\"      Date: 11/25/2021
+.\"    Manual: NVMe Manual
+.\"    Source: NVMe
+.\"  Language: English
+.\"
+.TH "NVME\-GEN\-DHCHAP\-K" "1" "11/25/2021" "NVMe" "NVMe Manual"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nvme-gen-dhchap-key \- Generate a host DH\-HMAC\-CHAP key
+.SH "SYNOPSIS"
+.sp
+.nf
+\fInvme gen\-dhchap\-key\fR [\-\-hmac=<hmac\-id> | \-h <hmac\-id>]
+                      [\-\-secret=<secret> | \-s <secret> ]
+                      [\-\-key\-length=<len> | \-l <len> ]
+                      [\-\-nqn=<host\-nqn> | \-n <host\-nqn> ]
+.fi
+.SH "DESCRIPTION"
+.sp
+Generate a base64\-encoded DH\-HMAC\-CHAP host key in the form: DHHC\-1:00:ia6zGodOr4SEG0Zzaw398rpY0wqipUWj4jWjUh4HWUz6aQ2n: and prints it to stdout\&.
+.SH "OPTIONS"
+.PP
+\-h <hmac\-id>, \-\-hmac=<hmac\-id>
+.RS 4
+Select a HMAC algorithm to use\&. Possible values are: 0 \- No HMAC algorithm 1 \- SHA\-256 2 \- SHA\-384 3 \- SHA\-512
+.RE
+.PP
+\-s <secret>, \-\-secret=<secret>
+.RS 4
+Secret value (in hexadecimal) to be used for the key\&. If none are provided a random value is used\&.
+.RE
+.PP
+\-l <len>, \-\-key\-length=<len>
+.RS 4
+Length of the resulting key\&. Possible values are 32, 48, or 64\&.
+.RE
+.PP
+\-n <hostnqn>, \-\-nqn=<hostnqn>
+.RS 4
+Host\-NQN to be used for the transformation\&. This parameter is only valid if a non\-zero HMAC function has been specified\&.
+.RE
+.SH "EXAMPLES"
+.sp
+No Examples
+.SH "NVME"
+.sp
+Part of the nvme\-user suite
diff --git a/Documentation/nvme-gen-dhchap-key.html b/Documentation/nvme-gen-dhchap-key.html
new file mode 100644 (file)
index 0000000..224e773
--- /dev/null
@@ -0,0 +1,842 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
+<head>\r
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
+<meta name="generator" content="AsciiDoc 8.6.8" />\r
+<title>nvme-gen-dhchap-key(1)</title>\r
+<style type="text/css">\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
+h1, h2, h3, h4, h5, h6,\r
+div.title, caption.title,\r
+thead, p.table.header,\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
+  font-family: Arial,Helvetica,sans-serif;\r
+}\r
+\r
+body {\r
+  margin: 1em 5% 1em 5%;\r
+}\r
+\r
+a {\r
+  color: blue;\r
+  text-decoration: underline;\r
+}\r
+a:visited {\r
+  color: fuchsia;\r
+}\r
+\r
+em {\r
+  font-style: italic;\r
+  color: navy;\r
+}\r
+\r
+strong {\r
+  font-weight: bold;\r
+  color: #083194;\r
+}\r
+\r
+h1, h2, h3, h4, h5, h6 {\r
+  color: #527bbd;\r
+  margin-top: 1.2em;\r
+  margin-bottom: 0.5em;\r
+  line-height: 1.3;\r
+}\r
+\r
+h1, h2, h3 {\r
+  border-bottom: 2px solid silver;\r
+}\r
+h2 {\r
+  padding-top: 0.5em;\r
+}\r
+h3 {\r
+  float: left;\r
+}\r
+h3 + * {\r
+  clear: left;\r
+}\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
+\r
+div.sectionbody {\r
+  margin-left: 0;\r
+}\r
+\r
+hr {\r
+  border: 1px solid silver;\r
+}\r
+\r
+p {\r
+  margin-top: 0.5em;\r
+  margin-bottom: 0.5em;\r
+}\r
+\r
+ul, ol, li > p {\r
+  margin-top: 0;\r
+}\r
+ul > li     { color: #aaa; }\r
+ul > li > * { color: black; }\r
+\r
+.monospaced, code, pre {\r
+  font-family: "Courier New", Courier, monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+  padding: 0;\r
+  margin: 0;\r
+}\r
+\r
+\r
+#author {\r
+  color: #527bbd;\r
+  font-weight: bold;\r
+  font-size: 1.1em;\r
+}\r
+#email {\r
+}\r
+#revnumber, #revdate, #revremark {\r
+}\r
+\r
+#footer {\r
+  font-size: small;\r
+  border-top: 2px solid silver;\r
+  padding-top: 0.5em;\r
+  margin-top: 4.0em;\r
+}\r
+#footer-text {\r
+  float: left;\r
+  padding-bottom: 0.5em;\r
+}\r
+#footer-badges {\r
+  float: right;\r
+  padding-bottom: 0.5em;\r
+}\r
+\r
+#preamble {\r
+  margin-top: 1.5em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.imageblock, div.exampleblock, div.verseblock,\r
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
+div.admonitionblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.admonitionblock {\r
+  margin-top: 2.0em;\r
+  margin-bottom: 2.0em;\r
+  margin-right: 10%;\r
+  color: #606060;\r
+}\r
+\r
+div.content { /* Block element content. */\r
+  padding: 0;\r
+}\r
+\r
+/* Block element titles. */\r
+div.title, caption.title {\r
+  color: #527bbd;\r
+  font-weight: bold;\r
+  text-align: left;\r
+  margin-top: 1.0em;\r
+  margin-bottom: 0.5em;\r
+}\r
+div.title + * {\r
+  margin-top: 0;\r
+}\r
+\r
+td div.title:first-child {\r
+  margin-top: 0.0em;\r
+}\r
+div.content div.title:first-child {\r
+  margin-top: 0.0em;\r
+}\r
+div.content + div.title {\r
+  margin-top: 0.0em;\r
+}\r
+\r
+div.sidebarblock > div.content {\r
+  background: #ffffee;\r
+  border: 1px solid #dddddd;\r
+  border-left: 4px solid #f0f0f0;\r
+  padding: 0.5em;\r
+}\r
+\r
+div.listingblock > div.content {\r
+  border: 1px solid #dddddd;\r
+  border-left: 5px solid #f0f0f0;\r
+  background: #f8f8f8;\r
+  padding: 0.5em;\r
+}\r
+\r
+div.quoteblock, div.verseblock {\r
+  padding-left: 1.0em;\r
+  margin-left: 1.0em;\r
+  margin-right: 10%;\r
+  border-left: 5px solid #f0f0f0;\r
+  color: #888;\r
+}\r
+\r
+div.quoteblock > div.attribution {\r
+  padding-top: 0.5em;\r
+  text-align: right;\r
+}\r
+\r
+div.verseblock > pre.content {\r
+  font-family: inherit;\r
+  font-size: inherit;\r
+}\r
+div.verseblock > div.attribution {\r
+  padding-top: 0.75em;\r
+  text-align: left;\r
+}\r
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */\r
+div.verseblock + div.attribution {\r
+  text-align: left;\r
+}\r
+\r
+div.admonitionblock .icon {\r
+  vertical-align: top;\r
+  font-size: 1.1em;\r
+  font-weight: bold;\r
+  text-decoration: underline;\r
+  color: #527bbd;\r
+  padding-right: 0.5em;\r
+}\r
+div.admonitionblock td.content {\r
+  padding-left: 0.5em;\r
+  border-left: 3px solid #dddddd;\r
+}\r
+\r
+div.exampleblock > div.content {\r
+  border-left: 3px solid #dddddd;\r
+  padding-left: 0.5em;\r
+}\r
+\r
+div.imageblock div.content { padding-left: 0; }\r
+span.image img { border-style: none; }\r
+a.image:visited { color: white; }\r
+\r
+dl {\r
+  margin-top: 0.8em;\r
+  margin-bottom: 0.8em;\r
+}\r
+dt {\r
+  margin-top: 0.5em;\r
+  margin-bottom: 0;\r
+  font-style: normal;\r
+  color: navy;\r
+}\r
+dd > *:first-child {\r
+  margin-top: 0.1em;\r
+}\r
+\r
+ul, ol {\r
+    list-style-position: outside;\r
+}\r
+ol.arabic {\r
+  list-style-type: decimal;\r
+}\r
+ol.loweralpha {\r
+  list-style-type: lower-alpha;\r
+}\r
+ol.upperalpha {\r
+  list-style-type: upper-alpha;\r
+}\r
+ol.lowerroman {\r
+  list-style-type: lower-roman;\r
+}\r
+ol.upperroman {\r
+  list-style-type: upper-roman;\r
+}\r
+\r
+div.compact ul, div.compact ol,\r
+div.compact p, div.compact p,\r
+div.compact div, div.compact div {\r
+  margin-top: 0.1em;\r
+  margin-bottom: 0.1em;\r
+}\r
+\r
+tfoot {\r
+  font-weight: bold;\r
+}\r
+td > div.verse {\r
+  white-space: pre;\r
+}\r
+\r
+div.hdlist {\r
+  margin-top: 0.8em;\r
+  margin-bottom: 0.8em;\r
+}\r
+div.hdlist tr {\r
+  padding-bottom: 15px;\r
+}\r
+dt.hdlist1.strong, td.hdlist1.strong {\r
+  font-weight: bold;\r
+}\r
+td.hdlist1 {\r
+  vertical-align: top;\r
+  font-style: normal;\r
+  padding-right: 0.8em;\r
+  color: navy;\r
+}\r
+td.hdlist2 {\r
+  vertical-align: top;\r
+}\r
+div.hdlist.compact tr {\r
+  margin: 0;\r
+  padding-bottom: 0;\r
+}\r
+\r
+.comment {\r
+  background: yellow;\r
+}\r
+\r
+.footnote, .footnoteref {\r
+  font-size: 0.8em;\r
+}\r
+\r
+span.footnote, span.footnoteref {\r
+  vertical-align: super;\r
+}\r
+\r
+#footnotes {\r
+  margin: 20px 0 20px 0;\r
+  padding: 7px 0 0 0;\r
+}\r
+\r
+#footnotes div.footnote {\r
+  margin: 0 0 5px 0;\r
+}\r
+\r
+#footnotes hr {\r
+  border: none;\r
+  border-top: 1px solid silver;\r
+  height: 1px;\r
+  text-align: left;\r
+  margin-left: 0;\r
+  width: 20%;\r
+  min-width: 100px;\r
+}\r
+\r
+div.colist td {\r
+  padding-right: 0.5em;\r
+  padding-bottom: 0.3em;\r
+  vertical-align: top;\r
+}\r
+div.colist td img {\r
+  margin-top: 0.3em;\r
+}\r
+\r
+@media print {\r
+  #footer-badges { display: none; }\r
+}\r
+\r
+#toc {\r
+  margin-bottom: 2.5em;\r
+}\r
+\r
+#toctitle {\r
+  color: #527bbd;\r
+  font-size: 1.1em;\r
+  font-weight: bold;\r
+  margin-top: 1.0em;\r
+  margin-bottom: 0.1em;\r
+}\r
+\r
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {\r
+  margin-top: 0;\r
+  margin-bottom: 0;\r
+}\r
+div.toclevel2 {\r
+  margin-left: 2em;\r
+  font-size: 0.9em;\r
+}\r
+div.toclevel3 {\r
+  margin-left: 4em;\r
+  font-size: 0.9em;\r
+}\r
+div.toclevel4 {\r
+  margin-left: 6em;\r
+  font-size: 0.9em;\r
+}\r
+\r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+div.unbreakable { page-break-inside: avoid; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
+\r
+\r
+</style>\r
+<script type="text/javascript">\r
+/*<![CDATA[*/\r
+var asciidoc = {  // Namespace.\r
+\r
+/////////////////////////////////////////////////////////////////////\r
+// Table Of Contents generator\r
+/////////////////////////////////////////////////////////////////////\r
+\r
+/* Author: Mihai Bazon, September 2002\r
+ * http://students.infoiasi.ro/~mishoo\r
+ *\r
+ * Table Of Content generator\r
+ * Version: 0.4\r
+ *\r
+ * Feel free to use this script under the terms of the GNU General Public\r
+ * License, as long as you do not remove or alter this notice.\r
+ */\r
+\r
+ /* modified by Troy D. Hanson, September 2006. License: GPL */\r
+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */\r
+\r
+// toclevels = 1..4.\r
+toc: function (toclevels) {\r
+\r
+  function getText(el) {\r
+    var text = "";\r
+    for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
+      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.\r
+        text += i.data;\r
+      else if (i.firstChild != null)\r
+        text += getText(i);\r
+    }\r
+    return text;\r
+  }\r
+\r
+  function TocEntry(el, text, toclevel) {\r
+    this.element = el;\r
+    this.text = text;\r
+    this.toclevel = toclevel;\r
+  }\r
+\r
+  function tocEntries(el, toclevels) {\r
+    var result = new Array;\r
+    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');\r
+    // Function that scans the DOM tree for header elements (the DOM2\r
+    // nodeIterator API would be a better technique but not supported by all\r
+    // browsers).\r
+    var iterate = function (el) {\r
+      for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
+        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {\r
+          var mo = re.exec(i.tagName);\r
+          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {\r
+            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);\r
+          }\r
+          iterate(i);\r
+        }\r
+      }\r
+    }\r
+    iterate(el);\r
+    return result;\r
+  }\r
+\r
+  var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName.toLowerCase() == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
+  var entries = tocEntries(document.getElementById("content"), toclevels);\r
+  for (var i = 0; i < entries.length; ++i) {\r
+    var entry = entries[i];\r
+    if (entry.element.id == "")\r
+      entry.element.id = "_toc_" + i;\r
+    var a = document.createElement("a");\r
+    a.href = "#" + entry.element.id;\r
+    a.appendChild(document.createTextNode(entry.text));\r
+    var div = document.createElement("div");\r
+    div.appendChild(a);\r
+    div.className = "toclevel" + entry.toclevel;\r
+    toc.appendChild(div);\r
+  }\r
+  if (entries.length == 0)\r
+    toc.parentNode.removeChild(toc);\r
+},\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////\r
+// Footnotes generator\r
+/////////////////////////////////////////////////////////////////////\r
+\r
+/* Based on footnote generation code from:\r
+ * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html\r
+ */\r
+\r
+footnotes: function () {\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
+  var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
+  var spans = cont.getElementsByTagName("span");\r
+  var refs = {};\r
+  var n = 0;\r
+  for (i=0; i<spans.length; i++) {\r
+    if (spans[i].className == "footnote") {\r
+      n++;\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
+      noteholder.innerHTML +=\r
+        "<div class='footnote' id='_footnote_" + n + "'>" +\r
+        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
+        n + "</a>. " + note + "</div>";\r
+      var id =spans[i].getAttribute("id");\r
+      if (id != null) refs["#"+id] = n;\r
+    }\r
+  }\r
+  if (n == 0)\r
+    noteholder.parentNode.removeChild(noteholder);\r
+  else {\r
+    // Process footnoterefs.\r
+    for (i=0; i<spans.length; i++) {\r
+      if (spans[i].className == "footnoteref") {\r
+        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");\r
+        href = href.match(/#.*/)[0];  // Because IE return full URL.\r
+        n = refs[href];\r
+        spans[i].innerHTML =\r
+          "[<a href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+      }\r
+    }\r
+  }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
+}\r
+\r
+}\r
+asciidoc.install();\r
+/*]]>*/\r
+</script>\r
+</head>\r
+<body class="manpage">\r
+<div id="header">\r
+<h1>\r
+nvme-gen-dhchap-key(1) Manual Page\r
+</h1>\r
+<h2>NAME</h2>\r
+<div class="sectionbody">\r
+<p>nvme-gen-dhchap-key -\r
+   Generate a host DH-HMAC-CHAP key\r
+</p>\r
+</div>\r
+</div>\r
+<div id="content">\r
+<div class="sect1">\r
+<h2 id="_synopsis">SYNOPSIS</h2>\r
+<div class="sectionbody">\r
+<div class="verseblock">\r
+<pre class="content"><em>nvme gen-dhchap-key</em> [--hmac=&lt;hmac-id&gt; | -h &lt;hmac-id&gt;]\r
+                      [--secret=&lt;secret&gt; | -s &lt;secret&gt; ]\r
+                      [--key-length=&lt;len&gt; | -l &lt;len&gt; ]\r
+                      [--nqn=&lt;host-nqn&gt; | -n &lt;host-nqn&gt; ]</pre>\r
+<div class="attribution">\r
+</div></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_description">DESCRIPTION</h2>\r
+<div class="sectionbody">\r
+<div class="paragraph"><p>Generate a base64-encoded DH-HMAC-CHAP host key in the form:\r
+DHHC-1:00:ia6zGodOr4SEG0Zzaw398rpY0wqipUWj4jWjUh4HWUz6aQ2n:\r
+and prints it to stdout.</p></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_options">OPTIONS</h2>\r
+<div class="sectionbody">\r
+<div class="dlist"><dl>\r
+<dt class="hdlist1">\r
+-h &lt;hmac-id&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--hmac=&lt;hmac-id&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Select a HMAC algorithm to use. Possible values are:\r
+        0 - No HMAC algorithm\r
+        1 - SHA-256\r
+        2 - SHA-384\r
+        3 - SHA-512\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-s &lt;secret&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--secret=&lt;secret&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Secret value (in hexadecimal) to be used for the key. If none are\r
+        provided a random value is used.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-l &lt;len&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--key-length=&lt;len&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Length of the resulting key. Possible values are 32, 48, or 64.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-n &lt;hostnqn&gt;\r
+</dt>\r
+<dt class="hdlist1">\r
+--nqn=&lt;hostnqn&gt;\r
+</dt>\r
+<dd>\r
+<p>\r
+        Host-NQN to be used for the transformation. This parameter is only\r
+        valid if a non-zero HMAC function has been specified.\r
+</p>\r
+</dd>\r
+</dl></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_examples">EXAMPLES</h2>\r
+<div class="sectionbody">\r
+<div class="paragraph"><p>No Examples</p></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
+<h2 id="_nvme">NVME</h2>\r
+<div class="sectionbody">\r
+<div class="paragraph"><p>Part of the nvme-user suite</p></div>\r
+</div>\r
+</div>\r
+</div>\r
+<div id="footnotes"><hr /></div>\r
+<div id="footer">\r
+<div id="footer-text">\r
+Last updated 2021-11-25 14:12:38 KST\r
+</div>\r
+</div>\r
+</body>\r
+</html>\r
index eecde761c18a098c07835c03f01f788394ca4365..79e8ed588b8b3e4a36318137a5cbc3a3e9493c3d 100644 (file)
@@ -1,5 +1,5 @@
 nvme-gen-dhchap-key(1)
-===================
+======================
 
 NAME
 ----