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

SNMP

NSDP

HTTP

SSH

TELNET

m4300-24x

✓

—

✓

✓

✓

m4300-16x

✓

—

✓

✓

✓

gsm7252ps

✓

—

✓

✓

✓

gsm7228ps

✓

—

✓

—

✓

gs110emx

—

✓

✓

—

—

gs305ep

—

✓

✓

—

—

gs728tpp

✓

—

✓

—

—

gs105pe

—

✓

✓

—

—

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

get_ports

S H C

S H C

S H C

S H C

N H

N H

S H

N H

get_stats

S H C

S H C

S H C

S H C

N H

N H

S

N H

get_vlans

S H C

S H C

S H C

S H C

N H

N H

S H

N H

get_pvids

S H C

S H C

S H C

S H C

N H

N H

S H

N H

get_lldp

S H C

S H C

S H C

S H C

—

—

S H

—

get_macs

S H C

S H C

S H C

S H C

—

—

S H

—

get_poe

—

S H C

S H C

S H C

—

H

S H

—

get_sensors

S H C

S H C

S H C

S C

—

—

S H

—

get_mgmt_ip

S H C

S H C

S H C

S H C

N H

N

S H

N H

get_hostname

S C

S C

S C

S C

N H

N

S H

N H

get_users

H C

H C

H C

C

—

—

—

—

get_services

H C

H C

H C

C

—

—

—

—

get_syslog

S H C

S H C

S H C

S H C

—

—

—

—

nsdp_device

—

—

—

—

N

N

—

N

Write operations

Operation

m4300-24x

m4300-16x

gsm7252ps

gsm7228ps

gs110emx

gs305ep

gs728tpp

gs105pe

set_port_enabled

S H C

S H C

S H C

S H C

H

—

S H

—

set_poe

—

S H C

S H C

S H C

—

H

S H

—

cycle_poe

—

S H C

S H C

S H C

—

H

S H

—

clear_poe_fault

—

S H C

S H C

S H C

—

H

S H

—

set_port_description

S C

S C

S C

S C

N

N

S H

N

set_port_speed

C

C

C

C

—

—

H

—

set_flow_control

C

C

C

C

—

—

—

—

set_pvid

S H C

S H C

S H C

S H C

N H

N H

S H

N H

set_vlan_membership

S H C

S H C

S H C

S H C

N H

N H

S H

N H

create_vlan

S C

S C

S C

S C

N

N H

H

N H

delete_vlan

S C

S C

S C

S C

N

N H

S H

N H

set_mgmt_ip

S H C

S H C

S H C

S H C

N

N

—

N

set_hostname

S C

S C

S C

S C

N H

N

S H

N

set_syslog_enabled

S C

S C

S C

S C

—

—

—

—

add_syslog_collector

C

C

C

C

—

—

—

—

remove_syslog_collector

S H C

S H C

S C

S C

—

—

—

—

upload_certificate

—

—

—

H

—

—

H

—

upload_certificate_scp

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

m4300-24x

get_hostname

SNMP, SSH, TELNET

HTTP

model ‘m4300-24x’ web UI has no page for get_hostname (The switch’s host name)

m4300-24x

set_port_description

SNMP, SSH, TELNET

HTTP

model ‘m4300-24x’ web UI has no page for set_port_description (Set or clear a port’s description)

m4300-24x

create_vlan

SNMP, SSH, TELNET

HTTP

model ‘m4300-24x’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires

m4300-24x

delete_vlan

SNMP, SSH, TELNET

HTTP

model ‘m4300-24x’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires

m4300-16x

get_hostname

SNMP, SSH, TELNET

HTTP

model ‘m4300-16x’ web UI has no page for get_hostname (The switch’s host name)

m4300-16x

set_port_description

SNMP, SSH, TELNET

HTTP

model ‘m4300-16x’ web UI has no page for set_port_description (Set or clear a port’s description)

m4300-16x

create_vlan

SNMP, SSH, TELNET

HTTP

model ‘m4300-16x’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires

m4300-16x

delete_vlan

SNMP, SSH, TELNET

HTTP

model ‘m4300-16x’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires

gsm7252ps

get_hostname

SNMP, SSH, TELNET

HTTP

model ‘gsm7252ps’ web UI has no page for get_hostname (The switch’s host name)

gsm7252ps

set_port_description

SNMP, SSH, TELNET

HTTP

model ‘gsm7252ps’ web UI has no page for set_port_description (Set or clear a port’s description)

gsm7252ps

create_vlan

SNMP, SSH, TELNET

HTTP

model ‘gsm7252ps’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires

gsm7252ps

delete_vlan

SNMP, SSH, TELNET

HTTP

model ‘gsm7252ps’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires

gsm7228ps

get_sensors

SNMP, TELNET

HTTP

model ‘gsm7228ps’ web UI has no page for get_sensors (Fan/PSU/temperature sensors)

gsm7228ps

get_hostname

SNMP, TELNET

HTTP

model ‘gsm7228ps’ web UI has no page for get_hostname (The switch’s host name)

gsm7228ps

set_port_description

SNMP, TELNET

HTTP

model ‘gsm7228ps’ web UI has no page for set_port_description (Set or clear a port’s description)

gsm7228ps

create_vlan

SNMP, TELNET

HTTP

model ‘gsm7228ps’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires

gsm7228ps

delete_vlan

SNMP, TELNET

HTTP

model ‘gsm7228ps’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires

gs110emx

set_port_enabled

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

gs110emx

set_port_description

NSDP

HTTP

model ‘gs110emx’ web UI has no page for set_port_description (Set or clear a port’s description)

gs110emx

create_vlan

NSDP

HTTP

model ‘gs110emx’ web UI carries no CSRF ‘hash’ token, which the HTTP create_vlan writer requires

gs110emx

delete_vlan

NSDP

HTTP

model ‘gs110emx’ web UI carries no CSRF ‘hash’ token, which the HTTP delete_vlan writer requires

gs110emx

set_mgmt_ip

NSDP

HTTP

model ‘gs110emx’ web UI has no page for set_mgmt_ip (Set the management IP/mask/gateway)

gs305ep

get_poe

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

gs305ep

get_mgmt_ip

NSDP

HTTP

model ‘gs305ep’ web UI has no page for get_mgmt_ip (Management IP configuration)

gs305ep

get_hostname

NSDP

HTTP

model ‘gs305ep’ web UI has no page for get_hostname (The switch’s host name)

gs305ep

set_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

gs305ep

cycle_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

gs305ep

clear_poe_fault

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

gs305ep

set_port_description

NSDP

HTTP

model ‘gs305ep’ web UI has no page for set_port_description (Set or clear a port’s description)

gs305ep

set_mgmt_ip

NSDP

HTTP

model ‘gs305ep’ web UI has no page for set_mgmt_ip (Set the management IP/mask/gateway)

gs728tpp

get_stats

SNMP

HTTP

model ‘gs728tpp’ web UI has no page for get_stats (Per-port octet/packet counters)

gs728tpp

create_vlan

HTTP

SNMP

model ‘gs728tpp’: this model’s SNMP agent cannot create a VLAN: every RowStatus mechanism (createAndGo, createAndGo+name in one PDU, createAndWait->name->active, the name column alone, and createAndGo carrying an egress PortList) is answered inconsistentValue – measured on the device. Membership, PVID and delete DO work over SNMP; create a VLAN over the HTTP backend

gs105pe

set_port_description

NSDP

HTTP

model ‘gs105pe’ web UI has no page for set_port_description (Set or clear a port’s description)

gs105pe

set_mgmt_ip

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 pethPsePortTable while 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.

The device’s agent does not implement that operation.

The protocol defines it, the hardware has it, and the switch still refuses. The GS728TPP’s SNMP agent will not create a VLAN: every documented RowStatus mechanism — createAndGo alone, createAndGo carrying dot1qVlanStaticName in one PDU, createAndWait → name → active, setting the name column alone, and createAndGo with an egress PortList — is answered inconsistentValue. That it is the agent and not the table is shown by what the same firmware does accept: an existing VLAN’s membership columns, dot1qPvid, and destroy(6), while its web UI creates a VLAN without complaint. So VLAN creation on that model is an HTTP operation, and the refusal names the backend that does work.

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_verified

Set 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_verified

The same for the FASTPATH CLI. writes_verified requires reads_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.