driver / standard (pull_request) Successful in 18s
driver / lint (pull_request) Successful in 19s
driver / types (pull_request) Successful in 1m0s
driver / test (3.10) (pull_request) Successful in 1m9s
driver / test (3.11) (pull_request) Successful in 59s
driver / test (3.12) (pull_request) Successful in 46s
driver / test (3.13) (pull_request) Successful in 55s
driver / lowest (pull_request) Failing after 25s
driver / security (pull_request) Successful in 1m0s
driver / build (pull_request) Successful in 26s
CI / driver (pull_request) Failing after 7m18s
driver / publish (pull_request) Skipped
- CI moves to .gitea/workflows/ci.yml and calls the shared driver workflow of NAPALM/driver-standard; .github/ is gone. - requires-python >=3.10 (napalm-device-types needs it), napalm-device-types >=4.21.1, LICENSE file, py.typed, SPDX license string, a dev extra with floors, links to git.netork.io (README included), CHANGELOG.md. - mypy strict for the package; exempt for now, with 130 errors between them: napalm_openwrt.config_mixin, .interfaces_mixin, .lldp_mixin, .openwrt, .packages_mixin, .routing_mixin, .system_mixin, .vlan_mixin and .wireless_mixin. They are recorded in the quality baseline with the long and complex functions and the one unannotated public method. - Coverage floor 65 % (measured 65.03 %).
121 lines
2.7 KiB
Markdown
121 lines
2.7 KiB
Markdown
# napalm-openwrt
|
|
|
|
NAPALM community driver for **OpenWrt** routers and access-points.
|
|
|
|
Communicates over SSH using [Netmiko](https://pypi.org/project/netmiko/) (`linux` device type).
|
|
Requires OpenWrt **19.07** or newer.
|
|
|
|
## Tested devices
|
|
|
|
| Model | OpenWrt version | Tested |
|
|
|---|---|---|
|
|
| TP-Link TL-WR1043N/ND v5 | 23.05.3 | ✅ |
|
|
|
|
> Contributions for additional devices and firmware versions are welcome.
|
|
|
|
## Requirements
|
|
|
|
| Dependency | Minimum version |
|
|
|---|---|
|
|
| Python | 3.10 |
|
|
| NAPALM | 4.0 |
|
|
| Netmiko | 4.0 |
|
|
|
|
## Installation
|
|
|
|
From source:
|
|
|
|
```bash
|
|
git clone https://git.netork.io/NAPALM/napalm-openwrt
|
|
cd napalm-openwrt
|
|
pip install -e .
|
|
```
|
|
|
|
## Quick start
|
|
|
|
```python
|
|
from napalm import get_network_driver
|
|
|
|
driver = get_network_driver("openwrt")
|
|
device = driver("192.168.1.1", "root", "")
|
|
|
|
device.open()
|
|
|
|
facts = device.get_facts()
|
|
print(facts)
|
|
|
|
interfaces = device.get_interfaces()
|
|
print(interfaces)
|
|
|
|
device.close()
|
|
```
|
|
|
|
## Supported NAPALM getters
|
|
|
|
| Getter | Supported | Notes |
|
|
|---|---|---|
|
|
| `get_facts` | ✅ | Uses `/etc/openwrt_release`, `/tmp/sysinfo/model`, `/proc/uptime` |
|
|
| `get_interfaces` | ✅ | Uses `ip link show` |
|
|
| `get_interfaces_ip` | ✅ | Uses `ip addr show` |
|
|
| `get_interfaces_counters` | ✅ | Uses `/proc/net/dev` |
|
|
| `get_arp_table` | ✅ | Uses `ip neigh show` |
|
|
| `get_mac_address_table` | ✅ | Uses `bridge fdb show` |
|
|
| `get_config` | ✅ | Uses `uci export` |
|
|
| `get_environment` | ✅ | CPU from `/proc/stat`, memory from `/proc/meminfo` |
|
|
| `get_lldp_neighbors` | ✅ | Requires `lldpd` package installed on device |
|
|
| `get_lldp_neighbors_detail` | ✅ | Requires `lldpd` package installed on device |
|
|
| `get_listening_sockets` | ✅ | busybox `netstat -lntup`, procd service from the process's cgroup (napalm-device-types `ListeningSocketsMixin`); over an SSH exec channel |
|
|
|
|
## Configuration management
|
|
|
|
Configuration is managed via [UCI](https://openwrt.org/docs/guide-user/base-system/uci)
|
|
(Unified Configuration Interface).
|
|
|
|
### Merge candidate
|
|
|
|
```python
|
|
device.load_merge_candidate(
|
|
config="""
|
|
uci set system.@system[0].hostname='my-router'
|
|
uci set network.lan.ipaddr='10.0.0.1'
|
|
"""
|
|
)
|
|
|
|
print(device.compare_config())
|
|
device.commit_config()
|
|
```
|
|
|
|
### Replace candidate
|
|
|
|
```python
|
|
with open("full-config.uci") as f:
|
|
device.load_replace_candidate(config=f.read())
|
|
|
|
print(device.compare_config())
|
|
device.commit_config()
|
|
```
|
|
|
|
### Rollback
|
|
|
|
```python
|
|
# Reverts to the config state before the last commit_config call
|
|
device.rollback()
|
|
```
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Create and activate a virtual environment
|
|
python -m venv .venv
|
|
source .venv/bin/activate
|
|
|
|
# Install with dev dependencies
|
|
pip install -e ".[dev]"
|
|
|
|
# Run tests
|
|
pytest
|
|
|
|
# Lint
|
|
ruff check napalm_openwrt/
|
|
```
|