Skip to content

Commit a2f0c69

Browse files
Merge pull request linux-nvme#471 from martin-belanger/doc-updates
docs: updating docs with nvme-stas vs nvme-cli comparison
2 parents ad9e057 + 3550185 commit a2f0c69

4 files changed

Lines changed: 25 additions & 2 deletions

File tree

NVME-STAS-CLI_COMPARISON.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Feature Comparison: nvme-stas vs. nvme-cli
2+
3+
| Feature | nvme-stas | nvme-cli |
4+
| --- | --- | --- |
5+
| IP address family filter | **Yes** – configured via `ip-family=[ipv4, ipv6, ipv4+ipv6]` in `/etc/stas/*.conf` | **No** |
6+
| Automatic DIM registration with a Central Discovery Controller (CDC) per TP8010 | **Yes** | **No** – manual only via `nvme dim` |
7+
| Automatic (zeroconf) discovery of Direct/Central Discovery Controllers (DDC/CDC) | **Yes** – registers with the Avahi daemon to receive mDNS notifications when CDCs or DDCs are detected, and connects to them automatically | **No** |
8+
| Manual Discovery Controller (DC) configuration with explicit include/exclude | **Yes** – use `controller=` and `exclude=` in `/etc/stas/stafd.conf`; exclusions are useful for filtering out unwanted mDNS-discovered DCs | **Partial** – no way to exclude DCs (moot since mDNS is not supported); use `/etc/nvme/discovery.conf` to include controllers |
9+
| Manual I/O Controller (IOC) configuration with explicit include/exclude | **Yes** – use `controller=` and `exclude=` in `/etc/stas/stacd.conf`; exclusions filter out unwanted IOCs from log pages (ideally handled via proper zone definitions at the DC) | **Partial** – JSON config files are supported, but excluding IOCs is not possible |
10+
| AEN monitoring + automatic connection/disconnection for Fabric Zoning | **Yes** – responds to Fabric Zoning changes with connect and disconnect operations with retries (configurable via `/etc/stas/stacd.conf`) | **Partial** – responds to Fabric Zoning changes with connect-only, no retries (one-shot udev rule) |
11+
| Use PLEO bit to retrieve only Port Local Entries from log pages | **Yes** | **No** |
12+
| Automatic Layer 3 connectivity without static routes | **Yes** – configurable via `ignore-iface=` in `/etc/stas/*.conf` | **No** – manual only via `--host-iface` |
13+
| Explicit exclusion of specific discovery interfaces | **Yes** – use `exclude = host-iface=<interface>` in `/etc/stas/*.conf` | **No** – not applicable without mDNS support |
14+
| AVE client support | **Planned** (implementation TBD) | **No** |
15+
| Human-friendly `nvme list` output | **No**`stafctl` and `stacctl` output JSON only; not a significant gap since `nvme list -v` covers this well | **Yes** – via `nvme list -v` |

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@
1919
- **Error handling and reporting**
2020
- Support for both **automatic (zeroconf)** and **manual configuration**
2121

22+
## Why nvme-stas Instead of nvme-cli?
23+
24+
*nvme-stas* was designed specifically to support the NVMe-oF Technical Proposals **TP8009** (Automated Discovery of NVMe-oF Discovery Controllers for IP Networks) and **TP8010** (NVMe-oF Centralized Discovery Controller), which cannot be implemented in [nvme-cli](https://github.com/linux-nvme/nvme-cli) / libnvme.
25+
26+
The fundamental reason is that **nvme-cli is stateless**: it issues one-off commands and exits. TP8009 and TP8010 require a host to *maintain persistent state* — registering with a Central Discovery Controller (CDC), tracking Asynchronous Event Notifications (AENs), reacting to Fabric Zoning changes with automatic connect and disconnect operations, and retrying failed connections. These are inherently long-running, event-driven behaviors that a stateless CLI tool cannot provide.
27+
28+
*nvme-stas* fills that gap by implementing two cooperating systemd daemons (*stafd* and *stacd*) that continuously monitor the NVMe-oF fabric and manage controller connections on behalf of the host. For a detailed feature-by-feature comparison, see [NVME-STAS-CLI_COMPARISON.md](./NVME-STAS-CLI_COMPARISON.md).
29+
2230
## High-Level Overview
2331

2432
*nvme-stas* is composed of two cooperating services:

etc/stas/stacd.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
#
9898
# Type: boolean
9999
# Range: [false, true]
100-
# Default: true
100+
# Default: false
101101
#ignore-iface=false
102102

103103
# ip-family: With this you can specify whether stacd will support IPv4, IPv6,

etc/stas/stafd.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
#
7878
# Type: boolean
7979
# Range: [false, true]
80-
# Default: true
80+
# Default: false
8181
#ignore-iface=false
8282

8383
# ip-family: With this you can specify whether stafd will support IPv4, IPv6,

0 commit comments

Comments
 (0)