confd: wifi: Fix several bugs in WiFi implemenation

* Did not work to reconfigure
* Was not possible to run from startup
* Othe minor things.
This commit is contained in:
Mattias Walström
2025-06-29 21:07:10 +02:00
parent 51176c7d26
commit 0d03f874ee
+14 -15
View File
@@ -12,7 +12,7 @@ static int wifi_gen_config(const char *ifname, const char *ssid, const char *cou
char *encryption_str;
int rc = SR_ERR_OK;
if (!secret || !ssid || !country || !encryption) {
if (!secret && (ssid && country && encryption)) {
/* Not an error, updated from two ways, interface cb and keystore cb. */
return 0;
}
@@ -24,7 +24,12 @@ static int wifi_gen_config(const char *ifname, const char *ssid, const char *cou
}
fprintf(wpa, "# Generated by Infix confd\n");
fprintf(wpa, "if [ -f '/etc/finit.d/enabled/wifi@%s.conf' ];then\n", ifname);
fprintf(wpa, "initctl -bfqn touch wifi@%s\n", ifname);
fprintf(wpa, "else\n");
fprintf(wpa, "initctl -bfqn enable wifi@%s\n", ifname);
fprintf(wpa, "fi\n");
fclose(wpa);
wpa_supplicant = fopenf("w", WPA_SUPPLICANT_CONF, ifname);
@@ -32,7 +37,13 @@ static int wifi_gen_config(const char *ifname, const char *ssid, const char *cou
rc = SR_ERR_INTERNAL;
goto out;
}
if (ssid) {
if (!secret || !ssid || !country || !encryption) {
fprintf(wpa_supplicant,
"ctrl_interface=/run/wpa_supplicant\n"
"autoscan=periodic:10\n"
"ap_scan=1\n");
} else {
if (!strcmp(encryption, "disabled")) {
asprintf(&encryption_str, "key_mgmt=NONE");
} else {
@@ -48,14 +59,7 @@ static int wifi_gen_config(const char *ifname, const char *ssid, const char *cou
"ssid=\"%s\"\n"
"%s\n"
"}\n", country, ssid, encryption_str);
free(encryption_str);
} else {
fprintf(wpa_supplicant,
"ctrl_interface=/run/wpa_supplicant\n"
"autoscan=periodic:10\n"
"ap_scan=1\n");
free(encryption_str);
}
fclose(wpa_supplicant);
@@ -75,11 +79,6 @@ int wifi_gen(struct lyd_node *dif, struct lyd_node *cif, struct dagger *net)
return wifi_gen_config(ifname, NULL, NULL, NULL, NULL, net);
}
if (dif && !lydx_get_child(dif, "wifi")) {
return SR_ERR_OK;
}
enabled = lydx_get_bool(cif, "enabled");
wifi = lydx_get_child(cif, "wifi");