Christian Manivong cd2670bf5f
driver / standard (pull_request) Successful in 16s
driver / lint (pull_request) Successful in 13s
driver / types (pull_request) Successful in 1m1s
driver / lowest (pull_request) Failing after 22s
driver / security (pull_request) Successful in 56s
driver / build (pull_request) Successful in 26s
driver / test (3.12) (pull_request) Successful in 3m42s
driver / test (3.13) (pull_request) Successful in 3m30s
CI / driver (pull_request) Failing after 4m12s
driver / publish (pull_request) Skipped
chore: Python 3.12 is the floor (NAPALM/driver-standard#6)
netOrk runs every driver in its own containers on Python 3.12, so 3.10
and 3.11 are no longer supported or tested. requires-python, mypy and
ruff move to 3.12, along with what ruff's pyupgrade rules then rewrite.
2026-10-27 10:19:02 +01:00

napalm-zyxel

NAPALM driver for Zyxel VMG series residential gateways (VMG4005-B50A and similar), built on napalm-device-types (ResidentialGatewayDriver).

Tested against

Model Firmware
not recorded yet not recorded yet

Connection

The gateway's web API (the Zyxel DAL protocol) over HTTP on port 80, or HTTPS on port 443 with use_tls. The driver fetches the gateway's RSA public key, sends a fresh AES key encrypted with it, and logs in with the web interface account; every request and response after that is AES-encrypted.

from napalm import get_network_driver

driver = get_network_driver("zyxel")
with driver("192.0.2.1", "admin", "secret", optional_args={"use_tls": True}) as device:
    print(device.get_facts())
Optional argument Default Meaning
use_tls False HTTPS instead of HTTP
port 443 with use_tls, else 80 port of the web interface
verify False verify the gateway's TLS certificate

Supported

Getter / action Source
get_facts basic device information
get_interfaces, get_interfaces_ip basic device information (WAN, LAN, Wi-Fi)
get_arp_table derived from the active LAN hosts
get_wan_status basic device information
get_hosts DAL LAN_HOSTS, else the DHCP page
get_port_forwards, get_nat_translations DAL NAT_PORTMAP, else the status page
get_wireless_clients, get_ssids, get_radio_status DAL, else the wireless page
get_diagnostics DAL DIAGNOSTICS
ping DAL PINGTEST
is_alive TCP connect to the web port
reboot_host DAL REBOOT
restart_wifi DAL WIFI_RESTART

Not supported

Configuration changes (load_merge_candidate and load_replace_candidate raise NotImplementedError), get_config, LLDP, BGP, NTP, SNMP, users, routes, MAC address table, optics, environment, traceroute, VPN tunnels and the CLI.

Development

The rules are in STANDARDS.md.

python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest --cov

License

Apache-2.0

S
Description
No description provided
Readme
113 KiB
0 Stars 1 Watchers 0 Forks
2026-10-23 13:01:34 +00:00
Languages
Python 100%