nvme-lint

Validate content of NVMe specification


License
Apache-2.0
Install
pip install nvme-lint==0.1.5

Documentation

nvme-lint

nvme-lint is a tool that uses Camelot-py and Poppler to validate tables in NVMe specification documents.

Getting started

Dependencies

On Debian these packages are required:

  python
  pip
  poppler-utils
  libgl1

Before you can start using nvme-lint you must have pdftohtml in your PATH. Write the command pdftohtml -v to verify that it is available.

Installation

  • Install by running:
  pip install nvme-lint

Usage

To validate a NVMe specification file run the command:

  nvme-lint file_name

You can also run the tool directly from the source directory with the command:

  python -m nvme_lint

How it works

nvme-lint will extract every table from a NVMe specification pdf file, unless a target- or ignore-file is provided. Afterwards, it will proceed to parse and validate the tables.

The flags for nvme-lint are defined below:

  usage: nvme-lint [-h] [-l LOG] [-i IGNORE] [-t TARGET] [-y] file

  positional arguments:
    file                  
        The pdf file containing the tables to validate

  options:
    -h, --help            
        show this help message and exit
        
    -l LOG, --log LOG     
        The logging level. Possible values in order of severity: DEBUG, INFO, WARNING, ERROR, CRITICAL

    -i IGNORE, --ignore IGNORE
        A .txt file containing figure numbers to ignore, each number should go on a separate line.
        This file will be ignored if a target is specified

    -t TARGET, --target TARGET
        A .txt file containing figure numbers to validate, each number should go on a separate line. 
        If this file is specified only the figure numbers included will be validated

    -y, --yaml 
        If this flag is set, the content of the tables will be written to 'output.yaml' 
        NOTE: If you have a file called `output.yaml` in the directory you call `nvme-lint` from, it will be overwritten

Validation

During the process nvme-lint checks for the following:

Issue Log message
Incorrect format for the table captions Encountered a problem with the caption to Figure (figure number)
Incorrect format of footnotes (value) should be 'NOTES'
Columns called 'bit' instead of 'bits' 'bit' instead of 'bits'
Columns called 'byte' instead of 'bytes' 'byte' instead of 'bytes'
Incorrect format for bit- and byte-ranges (n to m instead of m:n) (bytes / bits) range is of the wrong format: (value)
Hexadecimal values in bits- and bytes-columns (bytes / bits) value is of the wrong type: (value)
Incorrect ordering for bits- and bytes-columns (bytes / bits) are in wrong order
Incorrect ordering for bits- and bytes-ranges (bytes / bits) range is in wrong order: (value)
Overlapping bits or bytes overlap of (bytes / bits)
Holes in the bits or bytes hole in (bytes / bits)
Incorrect sum of bits or bytes (not a power of 2) sum of (bytes / bits) is not a power of 2
Incorrect sum of bits for commands bits doesn't sum up to (32 / 64)

Logging

The messages from nvme-lint will be outputted to the terminal and the file nvme-lint.log. This file is placed in $XDG_DATA_HOME/nvme-lint/, if $XDG_DATA_HOME is in the environment. Otherwise, it will be placed in ~/.local/share/nvme-lint/.

License

All software contained within this repository is dual licensed under the GNU General Public License version 2 or later or the Apache-2.0 license. See COPYING and LICENSE for more information.