new network feature: NAPT (widely known as NAT)#6360
Merged
Conversation
d-a-v
referenced
this pull request
in NeoCat/esp8266-Arduino
Jul 30, 2019
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.
devyte
requested changes
Aug 27, 2019
Collaborator
|
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. |
devyte
approved these changes
Aug 27, 2019
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 Messagesis 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. |
19 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.