Skip to content
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

边界路由器项目中,添加mqtt组件后,mqtt连接提示Host is unreachable。 (TZ-979) #74

Closed
wnylei opened this issue Jun 28, 2024 · 11 comments

Comments

@wnylei
Copy link

wnylei commented Jun 28, 2024

硬件:

ESP32+ESP32C6

软件:

esp-thread-br

情况:

我尝试在esp-thread-br示例项目中添加mqtt组件,但当它运行之后,mqtt组件会出现 Host is unreachable 不可达的提示。此刻wifi是正常连接的,如下图所示:

image

然后,当我把 launch_openthread_border_router(&platform_config, &rcp_update_config); 这句代码屏蔽后,mqtt组件是可以正常连接服务器的。如下图所示:
image

问题:

  1. 请问这是什么原因导致的?
  2. 我应该如何修改代码,可以实现在esp-thread-br项目中,正常的使用mqtt组件,访问网络?

请求指教,万分感谢!

@github-actions github-actions bot changed the title 边界路由器项目中,添加mqtt组件后,mqtt连接提示Host is unreachable。 边界路由器项目中,添加mqtt组件后,mqtt连接提示Host is unreachable。 (TZ-979) Jun 28, 2024
@wnylei
Copy link
Author

wnylei commented Jun 30, 2024

补充

我发现了它 #71 ,和它应该是同一个问题。

@zwx1995esp
Copy link
Collaborator

Hi @wnylei 所以你遇到的问题也是和#71 中描述的,在调用esp_netif_set_default_netif这个函数之后,BR就没办法通过getaddrinfo获取云服务器的ip地址了是嘛?

@wnylei
Copy link
Author

wnylei commented Jul 1, 2024

Hi @wnylei 所以你遇到的问题也是和#71 中描述的,在调用esp_netif_set_default_netif这个函数之后,BR就没办法通过getaddrinfo获取云服务器的ip地址了是嘛?

是的。另外,我尝试打开mqtt的调试日志之后,发现mqtt在发起连接请求的时候,是可以解析到正确的ip地址的(也有可能是DNS缓存?),然后就是一直提示主机不可达。 去掉esp_netif_set_default_netif之后,就一切正常了。

@zwx1995esp
Copy link
Collaborator

Hi @wnylei 所以你遇到的问题也是和#71 中描述的,在调用esp_netif_set_default_netif这个函数之后,BR就没办法通过getaddrinfo获取云服务器的ip地址了是嘛?

是的。另外,我尝试打开mqtt的调试日志之后,发现mqtt在发起连接请求的时候,是可以解析到正确的ip地址的(也有可能是DNS缓存?),然后就是一直提示主机不可达。 去掉esp_netif_set_default_netif之后,就一切正常了。

Ok, 感谢您帮忙确认这个问题, @wnylei 可以麻烦再帮忙做一个实验嘛?就是打印一下不可达的主机地址是什么,这个地址有可能用的不是DNS刚刚解析的ipv4地址,我怀疑这里面有点问题。

如果这个地址也是预期的,我这边尝试复现一下,然后可以提供一下您这边是调用的哪个上层接口去和云进行建立链接的嘛?非常感谢

@wnylei
Copy link
Author

wnylei commented Jul 1, 2024

@zwx1995esp

打开debug日志后,解析到的ip地址是期望的IP地址。如下:

D (44273) esp-tls: [sock=57] Resolved IPv4 address: 82.157.23.88
D (44283) esp-tls: [sock=57] Connecting to server. HOST: gateway-test.afnsmart.com, Port: 9883
E (44283) esp-tls: [sock=57] connect() error: Host is unreachable
E (44293) esp-tls: Failed to open new connection
E (44303) transport_base: Failed to open a new connection
E (44313) mqtt_client: Error transport connect
D (44313) event: running post MQTT_EVENTS:0 with handler 0x400f0ac8 and context 0x3ffe714c on loop 0x3ffe7090
0x400f0ac8: u_mqtt_event_handler at /Users/wanghm/Code/nl/esp/thread-esp-project/projects/normal_br/components/u_common_mqtt/src/u_common_mqtt.c:42

我使用的是官方的mqtt组件,先进行初始化,随后调用 esp_mqtt_client_start 接口,开始建立链接。

另外

我也尝试过在mqtt初始化配置中不使用域名,直接使用ip地址的形式,进行链接,结果是一样的。

太客气了,这是我应该做的。有任何疑问或需要的测试,随时联系。

@zwx1995esp
Copy link
Collaborator

好的,我们这边后续尝试复现一下这个问题,有进展会在这两个issue中同步。

@zwx1995esp
Copy link
Collaborator

有一个初步的猜想,这个ipv4的地址,lwip层不知道route是什么,esp_netif_set_default_netif这个不设置的话,默认的default netif是wifi,这个地址会放到wifi侧建立tcp,但是加了这个esp_netif_set_default_netif之后,可能会跑到thread侧建立,就会失败。我们复现一下,再debug看看。

@wnylei
Copy link
Author

wnylei commented Jul 1, 2024

有一个初步的猜想,这个ipv4的地址,lwip层不知道route是什么,esp_netif_set_default_netif这个不设置的话,默认的default netif是wifi,这个地址会放到wifi侧建立tcp,但是加了这个esp_netif_set_default_netif之后,可能会跑到thread侧建立,就会失败。我们复现一下,再debug看看。

是的,我也是这个想法。
我之前大概看了下代码,
对于默认的 wifi:netif 它的 route_prio 是 100.
对于默认的 eth:netif(有线接口) 它的 route_prio 是50.
对于当前示例项目中 thread:netif 它的route_prio是 15.
我猜测应该是这个优先级的问题?所以去掉 esp_netif_set_default_netif 之后,不论是使用wifi还是eth,mqtt都可以正常联接互联网。

@wnylei
Copy link
Author

wnylei commented Jul 1, 2024

我目前更想知道增加 esp_netif_set_default_netif(openthread_netif) 这行代码的目的是什么,去掉它会影响什么功能嘛。
当我把它屏蔽掉之后,经过简单的测试,发现thread网络和wifi网络都可以很好的工作。
当然,我还没有进行全部功能的测试。

@zwx1995esp
Copy link
Collaborator

这个是当时BR过Thread官方的certification的时候,有一些multicast的地址再做forwarding的时候,没有正确的forward到Thread层,所以加了这个函数。这个问题的解决方案,可能需要我们先复现一下,然后内部评估一下。如果您的项目中不涉及multicast的转发,可以临时注释这个函数作为workaround。

@chshu
Copy link
Collaborator

chshu commented Sep 6, 2024

Duplicate with #71, closing.

@wnylei please update your default netif as required in your application, we will follow up in #71

@chshu chshu closed this as completed Sep 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants