Replies: 5 comments 10 replies
-
Further investigations actually showed that the route information of another Thread border router even got to be processed when no OTBR was running (and the kernel configurations were disabled). It turns out that the NetworkManager daemon processes IPv6 Neighbor Discovery packets as well. In particular the code in src/core/ndisc/nm-lndp-ndisc.c#L240-265 processes RFC 4191 Route Information packets. So in other words, the kernel configurations are not really necessary for this to work. Also, the kernel configuration by default sets the max prefix len to 0, which essentially disables the feature. A sysctl configuration to set the |
Beta Was this translation helpful? Give feedback.
-
I am still working through something on my end, but I wanted to post the current situation as I was the trigger for this issue existing. I am currently helping a HAOS user who has 5 border routers. They are all Apple (mixture of ATV and HomePod). mDNS discovery is working, but user see's a timeout when trying to pair their Eve accessories. Based on the users who I have helped so far, this usually means a problem with IPv6 connectivity. My baseline environment is similar to theirs - I have a single HomePod border router, and I have functional Eve devices. I am using the official HA container, but I am not running HAOS yet (my yellow just arrived, though). My first step is to confirm the HA container sees the icmp6 packet with the Option 24 RI, using tcpdump. This lets me rule out things like VLAN's or strange WiFi repeaters breaking icmp6. The container does see the RI:
However at first glance, there was no route information being added to the kernels route table. On other systems the solution has been to set We tried to do this here, but it was not possible because With @agners help, we realised that something in HAOS was processing the route info that wasn't the kernel. As above, this turned out to be NM. User had ipv6 turned off in HA, which i didn't notice because link local addressing was working (this is expected since home-assistant/supervisor#3829). When we turned it on routes apper in
Note that the thread ULA would normally have a via. For example, here is the equivalent entries from my environment. I am using the same HA container to generate this table, and the same Apple hardware, so I would expect to see a route in his environment like this but I don't.
I am wondering if the busybox version of ip is to blame here - it is worth calling out that the same route table entry on a Debian box with "full" iproute2 looks like this:
So either NM isn't adding correct routes, or the default alpine I wasn't expecting this to work, because the route table looks "wrong" to me, but I did try
So, working theory was
So take away from this is:
|
Beta Was this translation helpful? Give feedback.
-
I was wondering if NetworkManager's IPv6 link-local address configuration By experimentation it seems that NetworkManager does not process IPv6 Neighbor Discovery packets. And looking into NetworkManager source code supports that: It also seems that the kernels routing advertising processing is disabled by the NetworkManager in src/core/devices/nm-device.c#L11446. |
Beta Was this translation helpful? Give feedback.
-
So since our last discussion I have been working with a number of users in the community to try to find the cause of instability with their Thread setups. One case that I've been looking into is a user with"ghost" routes. When I first helped them Whilst the exact cause of that is not known for them, I have now been able to force my own mesh into the same state. And it is fairly trivial. Working setup (Debian + HA Container)First of all, here is my production Home Assistant. This environment is showing what I consider to be expected. It's a Debian machine running containers. It is connected to my iot vlan.
Both of these have expiry data visible. At this point I unplugged one of the HomePod's. I left it alone for 30 minutes and when I came back:
As expected, one route had expired. The other had continued to see new RA's so the expires time has actually gone up since I last checked. I checked
As expected, the border router I unplugged has been removed. And pinging my accessories works:
And for completeness:
System with Ghosts (HAOS)Now here is a HAOS 9.5 system. Based on the conversation in this thread, we know that NetworkManager is in charge of processing RA's. We start off in the same state as the Debian system:
However it's worth calling out at this stage how differently formatted the output is, despite using the same version of After half an hour has passed I returned and checked. Whilst the Debian system no longer had the stale route, HAOS does:
My accessory cannot be pinged:
Confusingly
As soon as we delete the stale route:
ping works:
|
Beta Was this translation helpful? Give feedback.
-
I have one similar problem with my 3 OTBR on 3 machines.
Other thread devices:
With HA adding possibility for home kit controller Provision devices from BT to thread i was getting 2 EVE Eanergy and one Nanoleaf RGBW light joining the tread network with the 3 OTBR and one OTFD-CLI device but HA is having problem keeping contact to them. By disabling the OTBR and only running the Zigbeed on the first ans last host the second one is working great and its fast as one flash then sending and receiving command to and from my tread device !!! If the multi OTBR was OK my thread network have being moved to my production system but is not critical devices on it so its staying until its working OK. If its something i can helping doing diagnostic test and patches i one good setup for doing the test but dont have very deep knowledge in IPV6 and Linux but can doing it with little help. And one great thanks you both for getting all thins working great so fare with all work being done !! |
Beta Was this translation helpful? Give feedback.
-
Currently Home Assistant OS does not have
CONFIG_IPV6_ROUTER_PREF
orCONFIG_IPV6_ROUTE_INFO
set.These options add support for ICMPv6 Router Advertisements with Route Information Option (Type 24). This type of Router Information are sent by Thread Border Routers.
Note: It seems that the
otbr-agent
processes such advertisements on its own as well:This means that a Home Assistant OS installation which runs a OTBR actually learns about routes to other Thread border routers. However, Home Assistant OS installations without a(see belowotbr-agent
running do not learn the routes to other BRs and therefore can not communicate with Thread devices connected to the Thread network behind those BRs.See also this discussion on Discord.
Beta Was this translation helpful? Give feedback.
All reactions