this patch fixes a problem with the 'ifindex' function (in 'components/wifi.c'). if the wireless interface was down when 'slstatus' started, it wouldn’t detect it even after bringing the interface up later.
I ran into this because I usually boot with all interfaces down and only enable them when needed. After updating to v1.1, I noticed the SSID never showed unless the interface was already up at launch.
the issue is that the code caches the interface name in 'ifr' (a static 'struct ifreq' in 'ifindex') and skips calling 'ioctl(ifsock, SIOCGIFINDEX, &ifr)' after the first time because of this check:
`
if (strcmp(ifr.ifr_name, interface) != 0) {
strcpy(ifr.ifr_name, interface);
if (ioctl(ifsock, SIOCGIFINDEX, &ifr) != 0) {
warn("ioctl 'SIOCGIFINDEX':");
return -1;
}
}
`
since the interface name doesn’t change, it never retries 'ioctl' when the interface comes up later, the patch changes this to always call 'ioctl', this way, it detects the interface as soon as it’s available.
let me know if you want this included in the mainbranch or if I just add it to the patches page in case the current behavior is intentional.
---
components/wifi.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/components/wifi.c b/components/wifi.c
index 23af201..8639957 100644
--- a/components/wifi.c
+++ b/components/wifi.c
_AT_@ -108,12 +108,12 @@
warn("socket 'AF_UNIX':");
return -1;
}
- if (strcmp(ifr.ifr_name, interface) != 0) {
+ if (strcmp(ifr.ifr_name, interface) != 0) {
strcpy(ifr.ifr_name, interface);
- if (ioctl(ifsock, SIOCGIFINDEX, &ifr) != 0) {
- warn("ioctl 'SIOCGIFINDEX':");
- return -1;
- }
+ }
+ if (ioctl(ifsock, SIOCGIFINDEX, &ifr) != 0) {
+ warn("ioctl 'SIOCGIFINDEX':");
+ return -1;
}
return ifr.ifr_ifindex;
}
--
2.49.0
Received on Mon Jul 28 2025 - 18:24:11 CEST