Metadata-Version: 2.4
Name: napalm-zyxel
Version: 0.3.0
Summary: NAPALM driver for Zyxel VMG series residential gateways (VMG4005-B50A and similar).
Author: Christian Manivong
License-Expression: Apache-2.0
Project-URL: Repository, https://git.netork.io/NAPALM/napalm-zyxel
Project-URL: Issues, https://git.netork.io/NAPALM/napalm-zyxel/issues
Project-URL: Changelog, https://git.netork.io/NAPALM/napalm-zyxel/src/branch/main/CHANGELOG.md
Classifier: Topic :: Utilities
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: MacOS
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: napalm>=4.0.0
Requires-Dist: napalm-device-types>=4.21.1
Requires-Dist: requests>=2.28.0
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-cov>=5; extra == "dev"
Requires-Dist: mypy>=1.11; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Dynamic: license-file

# napalm-zyxel

NAPALM driver for Zyxel VMG series residential gateways (VMG4005-B50A and similar), built on
[napalm-device-types](https://git.netork.io/NAPALM/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.

```python
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](https://git.netork.io/NAPALM/driver-standard/src/branch/main/STANDARDS.md).

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

## License

Apache-2.0
