GS305EP¶
GS305EP¶
A 5-port Plus switch with PoE on 4 ports. No SNMP; managed over NSDP and the web UI.
At a glance¶
Field |
Value |
|---|---|
Registry key |
|
Product name |
GS305EP |
Class |
plus |
Ports |
5 |
PoE (PSE) ports |
4 |
Backends |
|
SNMP vendor subtree |
|
MAC/FDB table |
no |
Not captured from hardware. This is the one model here with no device
capture and no live run: every unit in this fleet (10.1.5.28-.30) was powered
off when the attempt was made. What it is grounded in is two independent
implementations that drive these switches — py_netgear_plus for the
merge-hash login and the PoE/VLAN CGI paths, and netgear-smp-vlan for the
8021qCf.cgi/8021qMembe.cgi/portPVID.cgi field shapes and the
1=untagged/2=tagged/3=excluded wire codes, observed on a GS105PE.
So the page shapes are grounded, but the values are not: the mock seed is
hand-invented (seed_gs305ep() says so) and
the web-UI fixtures under tests/fixtures/http/gs305ep_*.html each carry an
UNVERIFIED-pending-capture: synthetic marker. Treat behaviour recorded here
as the documented shape, not as observed values — and see
GS105PE, whose read paths turned out NOT to be shareable with this model
even though the two do share a login scheme.
Seed: seed_gs305ep().
What works, over which protocol¶
Operation |
What it does |
||
|---|---|---|---|
Per-port link/admin status |
✓ |
✓ |
|
Per-port octet/packet counters |
✓ |
✓ |
|
VLAN list with tagged/untagged members |
✓ |
✓ |
|
Per-port PVID |
✓ |
✓ |
|
LLDP neighbour table |
|||
MAC/FDB forwarding table |
|||
Per-port PoE status and power draw |
✓ |
||
Fan/PSU/temperature sensors |
|||
Management IP configuration |
✓ |
||
The switch’s host name |
✓ |
||
Local login accounts and their access level |
|||
Which management services (http/https/telnet/ssh) are enabled |
|||
Remote-logging configuration and collectors |
|||
Full NSDP device record |
✓ |
||
Bring a port up or down |
|||
Enable or disable PoE on a port |
✓ |
||
Power-cycle a PoE port |
✓ |
||
Clear a latched PoE fault |
✓ |
||
Set or clear a port’s description |
✓ |
||
Force a port’s speed/duplex, or restore auto-negotiation |
|||
Turn IEEE 802.3x flow control on or off for a port |
|||
Set a port’s PVID |
✓ |
✓ |
|
Set a port tagged/untagged/excluded on a VLAN |
✓ |
✓ |
|
Create a VLAN |
✓ |
✓ |
|
Delete a VLAN |
✓ |
✓ |
|
Set the management IP/mask/gateway |
✓ |
||
Set the switch’s host name |
✓ |
||
Turn remote logging on or off |
|||
Add a remote syslog collector |
|||
Remove a remote syslog collector |
|||
Upload an HTTPS certificate over the web UI |
|||
Deploy an HTTPS certificate via FASTPATH |
NSDP has no LLDP neighbour 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)
model ‘gs305ep’ web UI has no page for get_lldp (LLDP neighbour table)
NSDP has no MAC/FDB table 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)
model ‘gs305ep’ web UI has no page for get_macs (MAC/FDB forwarding table)
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 has no environmental-sensor 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)
model ‘gs305ep’ web UI has no page for get_sensors (Fan/PSU/temperature sensors)
model ‘gs305ep’ web UI has no page for get_mgmt_ip (Management IP configuration)
model ‘gs305ep’ web UI has no page for get_hostname (The switch’s host name)
get_users is served only over CONSOLE, HTTP, SSH, TELNET
model ‘gs305ep’ web UI has no page for get_users (Local login accounts and their access level)
get_services is served only over CONSOLE, HTTP, SSH, TELNET
model ‘gs305ep’ web UI has no page for get_services (Which management services (http/https/telnet/ssh) are enabled)
get_syslog is served only over CONSOLE, HTTP, SNMP, SSH, TELNET
model ‘gs305ep’ web UI has no page for get_syslog (Remote-logging configuration and collectors)
nsdp_device is served only over 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
model ‘gs305ep’ web UI has no page for set_port_enabled (Bring a port up or down)
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
model ‘gs305ep’ web UI has no page for set_port_description (Set or clear a port’s description)
set_port_speed is served only over CONSOLE, HTTP, SSH, TELNET
model ‘gs305ep’ web UI has no page for set_port_speed (Force a port’s speed/duplex, or restore auto-negotiation)
model ‘gs305ep’ web UI has no page for set_mgmt_ip (Set the management IP/mask/gateway)
model ‘gs305ep’ web UI has no page for set_hostname (Set the switch’s host name)
remove_syslog_collector is served only over CONSOLE, HTTP, SNMP, SSH, TELNET
model ‘gs305ep’ web UI has no page for remove_syslog_collector (Remove a remote syslog collector)
upload_certificate is served only over HTTP
model ‘gs305ep’ web UI has no page for upload_certificate (Upload an HTTPS certificate over the web UI)
Measured behaviour¶
PoE is reachable over the web UI only. The hardware is there, and both PoE status and configuration are available — but NSDP has no PoE tag at all, which makes this model the clearest argument for naming a backend:
switch.get_poe() # UnsupportedCapabilityError
switch.get_poe(backend=Backend.HTTP) # works
await switch.get_poe() # UnsupportedCapabilityError
await switch.get_poe(backend=Backend.HTTP) # works
The default backend for a Plus switch is NSDP, so the first call resolves there and refuses rather than quietly answering over HTTP. The error names the alternative — see Concepts.
Its web UI uses the ``MERGE_HASH_CGI`` scheme, the same one as the GS105PE:
the login page carries a nonce, the password is hashed together with it, and the
result is posted to a .cgi endpoint.
The management IP is readable over NSDP but not over its web UI, which ships no page carrying it — one of the backend-parity gaps listed in Support matrix.
Protocols¶
NSDP — the default backend.
HTTP web UI — the
MERGE_HASH_CGIscheme; the only route to PoE on this model.