Support matrix¶
Which model can do what, over which protocol. Every table on this page is
generated at build time from src/netgear_switch/registry.py and
src/netgear_switch/capabilities.py — the same data the library consults when
it dispatches an operation — so a table here cannot disagree with what the code
does.
The same answers are available at runtime:
from netgear_switch import Backend, support, matrix
support("gs110emx", Backend.NSDP, "get_poe").supported # False
support("gs110emx", Backend.NSDP, "get_poe").reason
# 'NSDP has no PoE status tag (measured by an exhaustive NSDP tag sweep ...)'
for capability in matrix():
...
Important
These tables describe SyncSwitch. The SNMP, NSDP
and HTTP entries hold for AsyncSwitch too, but
the CLI columns do not: all three CLI transports are blocking, so the
async facade has no CLI backend and refuses SSH, telnet and console outright.
See Concepts.
Protocol support¶
Which backends each model exposes — the model’s
backends, and exactly what
resolve_backend accepts.
Model |
|||||
|---|---|---|---|---|---|
✓ |
— |
✓ |
✓ |
✓ |
|
✓ |
— |
✓ |
✓ |
✓ |
|
✓ |
— |
✓ |
✓ |
✓ |
|
✓ |
— |
✓ |
— |
✓ |
|
— |
✓ |
✓ |
— |
— |
|
— |
✓ |
✓ |
— |
— |
|
✓ |
— |
✓ |
— |
— |
|
— |
✓ |
✓ |
— |
— |
SSH and TELNET are two transports for the same FASTPATH command surface.
A third, CONSOLE, drives that same CLI over a serial line; being a transport
rather than a network backend, it is never registered on a model and never
selected automatically.
Read operations¶
Rows are operations, columns are models. Each cell names the backends that serve that operation on that model:
S = SNMP · N = NSDP · H = HTTP web UI · C = FASTPATH CLI · — = not available on any backend.
Operation |
m4300-24x |
m4300-16x |
gsm7252ps |
gsm7228ps |
gs110emx |
gs305ep |
gs728tpp |
gs105pe |
|---|---|---|---|---|---|---|---|---|
S H C |
S H C |
S H C |
S H C |
N H |
N H |
S H |
N H |
|
S H C |
S H C |
S H C |
S H C |
N H |
N H |
S |
N H |
|
S H C |
S H C |
S H C |
S H C |
N H |
N H |
S H |
N H |
|
S H C |
S H C |
S H C |
S H C |
N H |
N H |
S H |
N H |
|
S H C |
S H C |
S H C |
S H C |
— |
— |
S H |
— |
|
S H C |
S H C |
S H C |
S H C |
— |
— |
S H |
— |
|
— |
S H C |
S H C |
S H C |
— |
H |
S H |
— |
|
S H C |
S H C |
S H C |
S C |
— |
— |
S H |
— |
|
S H C |
S H C |
S H C |
S H C |
N H |
N |
S H |
N H |
|
S C |
S C |
S C |
S C |
N H |
N |
S |
N H |
|
C |
C |
C |
C |
— |
— |
— |
— |
|
C |
C |
C |
C |
— |
— |
— |
— |
|
S C |
S C |
S C |
S C |
— |
— |
— |
— |
|
— |
— |
— |
— |
N |
N |
— |
N |
Write operations¶
Operation |
m4300-24x |
m4300-16x |
gsm7252ps |
gsm7228ps |
gs110emx |
gs305ep |
gs728tpp |
gs105pe |
|---|---|---|---|---|---|---|---|---|
S H C |
S H C |
S H C |
S H C |
H |
— |
S |
— |
|
— |
S H C |
S H C |
S H C |
— |
H |
S |
— |
|
— |
S H C |
S H C |
S H C |
— |
H |
S |
— |
|
— |
S H C |
S H C |
S H C |
— |
H |
S |
— |
|
S H C |
S H C |
S H C |
S H C |
N H |
N H |
S H |
N H |
|
S H C |
S H C |
S H C |
S H C |
N H |
N H |
S |
N H |
|
S C |
S C |
S C |
S C |
N |
N H |
S |
N H |
|
S C |
S C |
S C |
S C |
N |
N H |
S |
N H |
|
S H C |
S H C |
S H C |
S H C |
N |
N |
— |
N |
|
S C |
S C |
S C |
S C |
N |
N |
S |
N |
|
— |
— |
— |
H |
— |
— |
H |
— |
|
C |
C |
C |
— |
— |
— |
— |
— |
Backend parity gaps¶
Every case where one backend of a model serves an operation and another does not. This project treats a gap as a missing implementation to build, not a device limitation, unless captured device output proves otherwise — so this table is a work list as much as a reference.
Operations that are backend-fixed by nature are excluded: nsdp_device is
NSDP-only, and the two certificate-upload methods name their own transport.
Model |
Operation |
Served by |
Not served by |
Why |
|---|---|---|---|---|
SNMP, SSH, TELNET |
HTTP |
model ‘m4300-24x’ web UI has no page for get_hostname (The switch’s host name) |
||
SNMP, SSH, TELNET |
HTTP |
model ‘m4300-24x’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires |
||
SNMP, SSH, TELNET |
HTTP |
model ‘m4300-24x’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires |
||
SNMP, SSH, TELNET |
HTTP |
model ‘m4300-16x’ web UI has no page for get_hostname (The switch’s host name) |
||
SNMP, SSH, TELNET |
HTTP |
model ‘m4300-16x’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires |
||
SNMP, SSH, TELNET |
HTTP |
model ‘m4300-16x’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires |
||
SNMP, SSH, TELNET |
HTTP |
model ‘gsm7252ps’ web UI has no page for get_hostname (The switch’s host name) |
||
SNMP, SSH, TELNET |
HTTP |
model ‘gsm7252ps’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires |
||
SNMP, SSH, TELNET |
HTTP |
model ‘gsm7252ps’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires |
||
SNMP, TELNET |
HTTP |
model ‘gsm7228ps’ web UI has no page for get_sensors (Fan/PSU/temperature sensors) |
||
SNMP, TELNET |
HTTP |
model ‘gsm7228ps’ web UI has no page for get_hostname (The switch’s host name) |
||
SNMP, TELNET |
HTTP |
model ‘gsm7228ps’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires |
||
SNMP, TELNET |
HTTP |
model ‘gsm7228ps’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires |
||
HTTP |
NSDP |
per-port admin-enable over NSDP is UNPROVEN on these Plus models: the measured tag inventory (GS110EMX fw 1.0.2.8) has two candidate per-port config tags (0x0800, 0x9400) whose semantics were never settled – no write has been attempted against either, and a wrong guess can drop the port’s link. Use the HTTP backend, whose port-settings page IS grounded |
||
NSDP |
HTTP |
model ‘gs110emx’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires |
||
NSDP |
HTTP |
model ‘gs110emx’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires |
||
NSDP |
HTTP |
model ‘gs110emx’ web UI has no page for set_mgmt_ip (Set the management IP/mask/gateway) |
||
HTTP |
NSDP |
NSDP has no PoE status tag (measured by an exhaustive NSDP tag sweep of a real GS110EMX (10.1.5.25, firmware 1.0.2.8, 2026-07-30) covering every tag in the 16-bit space; see nsdp_read.py for the full tag inventory); use the HTTP backend for PoE |
||
NSDP |
HTTP |
model ‘gs305ep’ web UI has no page for get_mgmt_ip (Management IP configuration) |
||
NSDP |
HTTP |
model ‘gs305ep’ web UI has no page for get_hostname (The switch’s host name) |
||
HTTP |
NSDP |
NSDP has no PoE control tag (measured by an exhaustive tag sweep of a real GS110EMX, 10.1.5.25 fw 1.0.2.8, 2026-07-30 – see nsdp_read._SWEEP); use the HTTP backend for PoE |
||
HTTP |
NSDP |
NSDP has no PoE control tag (measured by an exhaustive tag sweep of a real GS110EMX, 10.1.5.25 fw 1.0.2.8, 2026-07-30 – see nsdp_read._SWEEP); use the HTTP backend for PoE |
||
HTTP |
NSDP |
NSDP has no PoE control tag (measured by an exhaustive tag sweep of a real GS110EMX, 10.1.5.25 fw 1.0.2.8, 2026-07-30 – see nsdp_read._SWEEP); use the HTTP backend for PoE |
||
NSDP |
HTTP |
model ‘gs305ep’ web UI has no page for set_mgmt_ip (Set the management IP/mask/gateway) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI has no page for get_stats (Per-port octet/packet counters) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI has no page for get_hostname (The switch’s host name) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI has no page for set_port_enabled (Bring a port up or down) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI has no page for set_poe (Enable or disable PoE on a port) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI has no page for cycle_poe (Power-cycle a PoE port) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI has no page for clear_poe_fault (Clear a latched PoE fault) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI has no page for set_vlan_membership (Set a port tagged/untagged/excluded on a VLAN) |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires |
||
SNMP |
HTTP |
model ‘gs728tpp’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires |
||
NSDP |
HTTP |
model ‘gs105pe’ web UI has no page for set_mgmt_ip (Set the management IP/mask/gateway) |
How to read a refusal¶
The reasons above are the same strings the library raises, because
capabilities.py imports them from the readers and writers rather than
restating them. A refusal falls into one of three kinds:
- The protocol has no such notion.
NSDP has no PoE, MAC-table, LLDP or sensor tag. This was established by an exhaustive tag sweep of a live GS110EMX, not by reading a specification.
- The device has no such hardware.
The M4300-24X has no PSE silicon, so PoE is refused identically on SNMP, HTTP and the CLI — rather than SNMP returning an empty list from an empty
pethPsePortTablewhile the other two raise.- This model’s web UI has no such page.
The web UI is a real, limited interface: if the firmware ships no page carrying the data, no amount of scraping produces it. These are the entries most likely to move, because a page that exists but has not been found yet looks exactly the same from here.
What is not on this list is “not implemented yet”. A backend that could serve an operation but does not is a bug in this library, and is fixed rather than documented.
Verification status¶
Two flags gate dispatch, and both appear in these tables as ?:
HttpModelSpec.reads_verifiedSet once that model’s web-UI reads have been cross-verified against live hardware. While
False, the facade refuses HTTP for both reads and writes: unchecked output is worse than no output.CliModelSpec.reads_verified/writes_verifiedThe same for the FASTPATH CLI.
writes_verifiedrequiresreads_verified, and not incidentally — every CLI write confirms itself by reading back, so a model whose CLI reads are not trusted cannot honestly verify a CLI write either.
At the time this page was generated no registered model is gated off by either flag; the mechanism is documented because it is what keeps an unverified backend from quietly becoming a source of truth.