esp32_nat_router-master工程在STA+AP模式正常工作,改成以太网+AP,无法正常NAT路由转发.

15 篇文章 1 订阅

https://github.com/zanjie1999/esp32_nat_router

esp32_nat_router-master工程下载地址

ESP32-S2配置成以太网+AP,两个接口之间的NAT路由转发不正常。

以太网部分是从\esp-idf\examples\ethernet\basic例程验证完成后移植过来的。

(1)PC1可以正常连接ESP32-S2-AP,并得到DHCP 分配的地址192.168.4.5,可以正常访问912.168.4.1,ESP32-S2以太网接口可以DHCP从外部路由器正常得到IP地址192.168.3.89。

C:\Users\wei>ping 192.168.4.1

正在 Ping 192.168.4.1 具有 32 字节的数据:
来自 192.168.4.1 的回复: 字节=32 时间=14ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=16ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=7ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=8ms TTL=255

192.168.4.1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 7ms,最长 = 16ms,平均 = 11ms

C:\Users\wei>ping 192.168.3.89

正在 Ping 192.168.3.89 具有 32 字节的数据:
来自 192.168.3.89 的回复: 字节=32 时间=10ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=10ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=6ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=21ms TTL=255

192.168.3.89 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 6ms,最长 = 21ms,平均 = 11ms

//无法到达HUAWEI-WIFI路由器了

C:\Users\wei>ping 192.168.3.1

正在 Ping 192.168.3.1 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

192.168.3.1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
 

(2)换一台PC2连接华为WIFI路由器,

C:\Users\wei>ping 192.168.3.1

正在 Ping 192.168.3.1 具有 32 字节的数据:
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64

192.168.3.1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 1ms,最长 = 1ms,平均 = 1ms

C:\Users\wei>ping 192.168.3.89

正在 Ping 192.168.3.89 具有 32 字节的数据:
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255

192.168.3.89 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 3ms,最长 = 3ms,平均 = 3ms

(3)通过如下if 0,只保留ethernet_init(),PC2是可以ping通EPS32-S2以太网接口的,说明以太网接口移植是没有问题的

    if(1){
      ethernet_init(static_ip, subnet_mask,gateway_addr, base_mac_addr);
      if (0) WiFi_AP_init(ap_ssid, ap_passwd, ap_ip);
    }
    else{
      // Setup WIFI
      wifi_init(ssid, passwd, static_ip, subnet_mask, gateway_addr, ap_ssid, ap_passwd, ap_ip);        
    }

C:\Users\wei>ping 192.168.3.89

正在 Ping 192.168.3.89 具有 32 字节的数据:
来自 192.168.3.89 的回复: 字节=32 时间=31ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=2ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=2ms TTL=255

192.168.3.89 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 2ms,最长 = 31ms,平均 = 9ms

什么原因?如何解决?

 仔细看,上面来自 192.168.3.89 的回复: 字节=32 时间=31ms TTL=255,TTL=255说明是最后了。

观察esp32_nat_router-master工程原始状态,PC1(192.168.4.2)ping如下三个地址:,TTL好像并没有提供什么线索。

C:\Users\wei>ping 192.168.3.86

正在 Ping 192.168.3.86 具有 32 字节的数据:
来自 192.168.3.86 的回复: 字节=32 时间=4ms TTL=255
来自 192.168.3.86 的回复: 字节=32 时间=5ms TTL=255
来自 192.168.3.86 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.86 的回复: 字节=32 时间=22ms TTL=255

192.168.3.86 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 3ms,最长 = 22ms,平均 = 8ms

C:\Users\wei>ping 192.168.4.1

正在 Ping 192.168.4.1 具有 32 字节的数据:
来自 192.168.4.1 的回复: 字节=32 时间=5ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=4ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=7ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=35ms TTL=255

192.168.4.1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 4ms,最长 = 35ms,平均 = 12ms

C:\Users\wei>ping 192.168.3.1

正在 Ping 192.168.3.1 具有 32 字节的数据:
来自 192.168.3.1 的回复: 字节=32 时间=20ms TTL=63
来自 192.168.3.1 的回复: 字节=32 时间=28ms TTL=63
来自 192.168.3.1 的回复: 字节=32 时间=16ms TTL=63
来自 192.168.3.1 的回复: 字节=32 时间=17ms TTL=63

192.168.3.1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 16ms,最长 = 28ms,平均 = 20ms

  原工程用了如下函数     

 ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL) );//
结合以太网接口,改用如下函数,估计这个有差异。
        ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
        ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL));

esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx); - 猴子上树 - 博客园esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx){ if (s_event_init_flag) { return ESP_https://www.cnblogs.com/whigym/p/9132284.html

经过排除这只是前后两种不同的格式,修改后还是不能再以太网和AP之间转发。

进一步分析,ESP32-S2内部没有路由协议,比如RIP,估计只能固定两个端口模式的NAT,缺省只能STA和AP之间吗?

2022-01-05一个新线索:以太网端口上电就接着网线,可以分配到IP地址;一开始没有接网线,或重新插拔后都不能分配到IP地址,感觉是DHCP Client异常。

需要进一步查官方资料

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值