diff --git a/debian/set_mac_wifi.sh b/debian/set_mac_wifi.sh index b64b513..f88d635 100644 --- a/debian/set_mac_wifi.sh +++ b/debian/set_mac_wifi.sh @@ -194,6 +194,25 @@ disable_wifi() { fi } +# Função para forçar renovação de IP +force_ip_renewal() { + local iface="$1" + + if systemctl is-active --quiet systemd-networkd; then + log "A forçar renovação de IP em $iface (reiniciando systemd-networkd)..." + if systemctl restart systemd-networkd; then + log "Serviço systemd-networkd reiniciado com sucesso. IP deve ser atribuído em breve." + return 0 + else + log "Erro: Falha ao reiniciar systemd-networkd." + return 1 + fi + else + log "Aviso: systemd-networkd não está ativo. Tentando alternativa..." + return 1 + fi +} + # Tarefa em Background para monitorizar rede monitor_network_task() { log "Monitor: A iniciar monitorização contínua da rede..." @@ -228,19 +247,18 @@ monitor_network_task() { log "Monitor: Wi-Fi ($WLAN_IFACE) já está desativado ou não encontrado." fi else - log "Monitor: Interface $IFACE ativa mas sem IP. Wi-Fi permanece ativo ou inicia ativação." - if ip link show "$WLAN_IFACE" &> /dev/null; then - if ip link show "$WLAN_IFACE" | grep -q "DOWN"; then + log "Monitor: Interface $IFACE ativa mas sem IP. Tentando forçar renovação de IP..." + if force_ip_renewal "$IFACE"; then + log "Monitor: Renovação de IP bem-sucedida. Wi-Fi permanece ativo até confirmação." + else + log "Monitor: Falha ao renovar IP. Ativando Wi-Fi como fallback..." + if ip link show "$WLAN_IFACE" &> /dev/null && ip link show "$WLAN_IFACE" | grep -q "DOWN"; then if ip link set "$WLAN_IFACE" up; then - log "Monitor: Wi-Fi ($WLAN_IFACE) ativado com sucesso." + log "Monitor: Wi-Fi ($WLAN_IFACE) ativado como fallback." else log "Monitor: Falha ao ativar Wi-Fi ($WLAN_IFACE)." fi - else - log "Monitor: Wi-Fi ($WLAN_IFACE) já está ativo." fi - else - log "Monitor: Interface $WLAN_IFACE não encontrada." fi fi fi