efe004a2957d4ea6088cab31ce39ee1a5eb034c3
get_lldp_neighbors() existed but spoke to the older CLI generation: it ran
`show lldp remote-device all` and expected FASTPATH-style `0/1` ports in
whitespace-separated columns. v7 firmware answers `Unknown command` — as it
does for `show lldp remote-device`, a bare `show lldp`, and the plural
`show lldp neighbors`. Only the singular works, though `show ?` lists `lldp`
plainly enough:
Port | Device ID | Port ID | SysName | ...
---- + ----------------- + ---------------- + ----------------- + ...
g9 | 10:01:02:44:37:26 |10:01:02:44:37:28 | pve-eze.eze.local | ...
Ports are named g9, and the columns are separated by `|` with irregular
padding, so splitting on whitespace tears the values apart. The port ID is
not always a port name either — a neighbour may identify its port by MAC.
_get_lldp_table() now branches on _detect_cli_v7() into a second parser, the
same shape get_mac_address_table() already uses for this divergence.
get_lldp_neighbors() itself is untouched.
Confirmed against a GS110TPv3 on 7.1.1.17: _detect_cli_v7() returns True
there, and the switch reports two neighbours it had never surfaced. Without
them NetOrk's map had nothing to draw for the site this switch serves, so
four APs and a firewall behind it stood unconnected.
napalm-netgear
NAPALM community driver for Netgear Smart Managed and Netgear Plus Managed switches (GS108EPP, GS110TP, GS316EPP and compatible Smart Managed Pro series).
Tested devices
| Model | Series | Tested |
|---|---|---|
| GS110TP | Smart Managed Pro | ✅ |
| GS108EPP | Smart Managed Pro | ✅ |
| GS316EPP | Smart Managed Pro | ✅ |
Other models from the Netgear Smart Managed Pro series should work as well — contributions welcome.
Requirements
| Dependency | Minimum version |
|---|---|
| Python | 3.8 |
| NAPALM | 4.0 |
| Netmiko | 4.0 |
Installation
pip install napalm-netgear
Or from source:
git clone https://github.com/napalm-automation-community/napalm-netgear
cd napalm-netgear
pip install -e .
Quick start
from napalm import get_network_driver
driver = get_network_driver("netgear_smart")
with driver("192.168.0.239", "admin", "password") as device:
facts = device.get_facts()
print(facts)
Implemented getters
| Getter | Status | Notes |
|---|---|---|
get_facts |
✅ | model, hostname, os_version, serial, uptime |
get_interfaces |
✅ | status, speed, description, MTU |
get_interfaces_ip |
✅ | management VLAN IP/mask |
get_config |
✅ | running + startup |
get_arp_table |
✅ | |
get_mac_address_table |
✅ | |
get_lldp_neighbors |
✅ | |
get_lldp_neighbors_detail |
✅ | |
get_vlans |
✅ | |
get_environment |
✅ | CPU + memory only |
get_interfaces_counters |
✅ | |
get_users |
✅ | |
get_snmp_information |
✅ | |
get_ntp_servers |
✅ | |
get_ntp_peers |
✅ | same as servers |
get_route_to |
✅ | static/connected only |
ping |
✅ | |
cli |
✅ | |
is_alive |
✅ | |
load_merge_candidate |
✅ | |
load_replace_candidate |
✅ | additive — no atomic replace |
compare_config |
✅ | |
commit_config |
✅ | |
discard_config |
✅ | |
rollback |
✅ | session-scoped backup |
get_bgp_neighbors |
❌ | not applicable |
get_optics |
❌ | DDM not exposed via CLI |
get_ipv6_neighbors_table |
❌ | not exposed via CLI |
get_ntp_stats |
❌ | not exposed via CLI |
Optional arguments
| Argument | Default | Description |
|---|---|---|
port |
22 |
SSH port |
force_no_enable |
False |
Skip enable after login |
canonical_int_fmt |
False |
Use canonical interface names |
Any additional keyword arguments are forwarded to Netmiko.
CLI notes
- Netmiko device type:
netgear_prosafe - Prompt pattern:
(hostname) >/(hostname) #/(hostname) (Config)# - Interface naming:
0/1,0/2, … (slot/port); LAG channels:ch1,ch2, … - Config is persisted with
write memory - Key-value output uses
Key: valueorKey..... valuenotation depending on firmware generation — both are handled automatically
Development
pip install -e ".[dev]"
pytest tests/
License
Apache 2.0 — see LICENSE.
Languages
Python
100%