diff --git a/src/confd/src/infix-if-wifi.c b/src/confd/src/infix-if-wifi.c index 3f32517e..2ef7bfd2 100644 --- a/src/confd/src/infix-if-wifi.c +++ b/src/confd/src/infix-if-wifi.c @@ -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");