API Reference¶
This section documents the public API modules of erlang-nat.
Architecture¶
flowchart TB
subgraph App["Your Application"]
A[nat:discover/0]
B[nat:add_port_mapping/3]
C[nat:reg_pid/1]
end
subgraph NAT["erlang-nat"]
NS[nat_server<br/>gen_server]
subgraph Protocols["Protocol Modules"]
U1[natupnp_v1]
U2[natupnp_v2]
NP[natpmp]
PC[natpcp]
end
end
subgraph Router["NAT Router"]
R[Gateway Device]
end
A --> NS
B --> NS
C --> NS
NS --> U1 & U2 & NP & PC
U1 & U2 -->|UPnP/SOAP| R
NP -->|NAT-PMP| R
PC -->|PCP| R
NS -.->|Events| App
Modules¶
| Module | Description |
|---|---|
| nat | Main public API for NAT traversal operations |
| nat_server | Gen_server managing port mappings with auto-renewal |
Quick Reference¶
Discovery¶
nat:discover() -> ok | no_nat | {error, term()}.
nat:get_context() -> {ok, nat_ctx()} | {error, no_context}.
Port Mapping¶
nat:add_port_mapping(Protocol, InternalPort, ExternalPort) -> Result.
nat:add_port_mapping(Protocol, InternalPort, ExternalPort, Lifetime) -> Result.
nat:delete_port_mapping(Protocol, InternalPort, ExternalPort) -> ok | {error, term()}.
nat:list_mappings() -> [{Protocol, InternalPort, ExternalPort, ExpiresAt}].
Addresses¶
nat:get_external_address() -> {ok, string()} | {error, term()}.
nat:get_device_address() -> {ok, string()} | {error, term()}.
nat:get_internal_address() -> {ok, string()} | {error, term()}.