-
Notifications
You must be signed in to change notification settings - Fork 13.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
new network feature: NAPT (widely known as NAT) #6360
Conversation
esp8266 can handle 2 network interfaces (Wifi client and softAP) simultaneously in the WIFI_AP_STA mode. Currently IP_FORWARD is implemented in lwip to forward packets between 2 interfaces, but static routing must be setup manually. This patch adds IP_NAPT config option to enable esp8266 to use NAPT technique on forwarding packets from softAP clients to the parent WiFi AP. To enable NAPT on the interface, ip_napt_enable() must be called with esp8266's softAP interface address. For example: extern "C" void ip_napt_enable(unsigned long addr, int enable); ip_napt_enable(IPAddress(192,168,4,1), 1); This patch also provides port mappings to forward packets from the parent WiFi network to softAP network. To register and unregister port mappings, following functions can be used: void ip_portmap_add(byte proto, unsigned long maddr, unsigned short mport, unsigned long daddr, unsigned short dport); bool ip_portmap_remove(byte proto, unsigned short mport); For exmaple: #define IP_PROTO_TCP 6 #define IP_PROTO_UDP 17 ... ip_portmap_add(IP_PROTO_TCP, WiFi.localIP(), 8080, IPAddress(192,168,4,3), 80); ip_portmap_add(IP_PROTO_UDP, WiFi.localIP(), 12345, IPAddress(192,168,4,2), 12345); These map TCP port 8080 on WiFi client address to 192.168.4.3:80, and UDP port 12345 to 192.168.4.2:12345. To remove the first mapping: ip_portmap_remove(IP_PROTO_TCP, 8080); To apply this change, SDK needs to be recompiled with this patch: $ cd tools/sdk/lwip/src $ make && make release #=> intalled to ../../lib/liblwip_gcc.a Note that this patch is experimental and is provided as is.
libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino
Show resolved
Hide resolved
libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino
Show resolved
Hide resolved
libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino
Show resolved
Hide resolved
libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino
Show resolved
Hide resolved
Just needs a couple of code comments. The rest is just a question (netdump?) and the ides of wrapping all the calls, which just means an enhancement issue should be opened once this PR is merged. |
Platform
Settings in IDE
Problem Descriptioni tried napt example with fresh arduino installation but it didn't work as it work with lwip1.4. end device not get internet access of router. i tested it with range extender example. Debug Messages
is there any other setting that i missed ? |
it works !i dont know how but when i reinstalled all things with same steps in another pc. then it works as expected. |
This is brought to us thanks to
My contribution was easy (ref), I take no credit.
Napt is now ported to lwIP-2.1.2 (latest stable) as a real patch in lwip2 so it can be proposed upstream.
It is currently only enabled with lwip2 (no IPv6, with features).
This PR also brings heap optimizations from @earlephilhower and improved locking macros from @mhightower83 .
An example is proposed (filling half the RAM) for a damn simple and basic WiFi range extender.