Metadata-Version: 2.4
Name: napalm-fritzbox
Version: 0.3.0
Summary: NAPALM driver for AVM FritzBox (TR-064 via fritzconnection).
Author: Christian Manivong
License-Expression: Apache-2.0
Project-URL: Repository, https://git.netork.io/NAPALM/napalm-fritzbox
Project-URL: Issues, https://git.netork.io/NAPALM/napalm-fritzbox/issues
Project-URL: Changelog, https://git.netork.io/NAPALM/napalm-fritzbox/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
Classifier: Typing :: Typed
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: fritzconnection>=1.13.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-fritzbox

NAPALM community driver for **AVM FritzBox** routers (read-only, via TR-064).

## Requirements

| Dependency | Minimum version |
|---|---|
| Python | 3.10 |
| NAPALM | 4.0 |
| napalm-device-types | 4.21.1 |
| fritzconnection | 1.13 |

## Installation

```bash
pip install napalm-fritzbox
```

Or from source:

```bash
git clone https://git.netork.io/NAPALM/napalm-fritzbox
cd napalm-fritzbox
pip install -e .
```

## Quick start

```python
from napalm import get_network_driver

driver = get_network_driver("fritzbox")
with driver(
    "192.168.178.1",
    "user",
    "pass",
    optional_args={"use_tls": True},
) as d:
    print(d.get_facts())
    print(d.get_wan_status())
    print(d.get_hosts())
```

### Example

```python
driver = get_network_driver("fritzbox")
d = driver("fritz.box", "user", "pass")
d.open()

print(d.get_wan_status())
print(d.get_port_forwards())
print(d.get_ssids())
print(d.get_wireless_clients())
d.close()
```

## Optional arguments

| Argument | Default | Description |
|---|---|---|
| `use_tls` | `True` | Use HTTPS (port 49443) instead of HTTP (port 49000) |
| `port` | `49443` / `49000` | Override the TR-064 port |

FritzBox serves TR-064 over HTTPS with a self-signed certificate; `fritzconnection`
does not verify it, so no separate `verify` option is needed.

## Limitations

- Read-only: configuration management methods (`load_merge_candidate`,
  `commit_config`, ...) are not implemented.
- `get_nat_translations()` is derived from the enabled port-forwarding rules —
  TR-064 does not expose a live connection-tracking table.
- `get_vpn_tunnels()` returns an empty dict — FritzOS does not expose VPN
  tunnel status via TR-064.
- `channel_width`, `tx_power` and `frequency` in `get_radio_status()` are not
  available via TR-064 and are reported as `0`.

## 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
```

CI ([.gitea/workflows/ci.yml](.gitea/workflows/ci.yml)) calls the shared workflow of
the NAPALM driver standard: ruff, mypy, the tests on Python 3.10–3.13, bandit,
pip-audit and a build check.

## License

Apache 2.0 — see [LICENSE](LICENSE).
