Nim binding for [libplum](https://github.com/paullouisageneau/libplum), a portable C library for NAT port mapping via PCP, NAT-PMP, and UPnP-IGD.
libplum tries each protocol in order (PCP → NAT-PMP → UPnP-IGD) and falls back automatically. If the local address is already public, it uses it directly.
See [examples/port_mapping.nim](examples/port_mapping.nim) for a complete example that pauses between add and remove so you can verify the mapping on your router:
```bash
nim c -r examples/port_mapping.nim
```
### Timeouts
Pass timeout options to `init` to control how long discovery and mapping wait:
This builds the image and runs two containers: one for PCP and one for UPnP.
Each protocol is tested under both `orc` and `refc` memory managers.
miniupnpd is built with a stub firewall backend (`tests/miniupnpd_stub_rdr.c`) so it accepts mapping requests without requiring iptables or nftables in the container.
To see the miniupnpd logs and the resolved external addresses, pass `TEST_VERBOSE=1`: