Incluye script de resume (opcional) para recuperar conexión tras hibernación
Configuración básica en /etc/rc.conf
Para usar una IP fija en wlan0, añadir o modificar estas líneas:
wlans_iwm0="wlan0" ifconfig_wlan0="WPA inet 192.168.88.51 netmask 255.255.255.0" defaultrouter="192.168.88.1"
En FreeBSD, la forma más sencilla y moderna de obtener el firmware para tu tarjeta inalámbrica es usando la herramienta fwget. Esta utilidad detecta automáticamente el hardware de tu sistema e instala los paquetes de firmware necesarios
sudo wget
Este comando analizará el hardware, identificará qué controladores y firmwares necesita e instalará los paquetes correspondientes automáticamente.
Configuración en /boot/loader.conf
Después de instalado el firmware, para que el sistema lo cargue al arrancar, es necesario agregar las siguientes líneas al archivo /boot/loader.conf
if_iwm_load="YES" iwm8265fw_load="YES" legal.intel_iwm.license_ack=1
Reiniciar el sistema para que los módulos se carguen correctamente
reboot
# /etc/wpa_supplicant.conf written by wifimgr(8)
ctrl_interface=/var/run/wpa_supplicant
eapol_version=2
fast_reauth=1
network={
ssid="MikroTik-39F9C0"
psk=755864a8b1a4ef59e2e62590977a75f5317193637a8629dccb18c40e8638a68e
}
Al usar IP fija, no se necesita dhclient. Por tanto, desactivar background_dhclient (ponerlo a "NO" o eliminar la línea) para evitar que sobrescriba la configuración estática al despertar:
background_dhclient="NO"
¿El sistema se recupera solo tras hibernación?
En la mayoría de los casos, sí. Al despertar, FreeBSD intenta restaurar el estado de las interfaces. Si el driver (iwm) y el subsistema WiFi funcionan correctamente, la interfaz se reasociará y mantendrá la IP fija. Esto suele funcionar bien con hardware Intel y configuraciones sencillas.
Sin embargo, si la asociación falla o la interfaz queda en un estado inconsistente (por ejemplo, si el firmware no responde o hay eventos de red que disparan dhclient). Si al despertar no tiene conexión, se puede usar el script de resume que se describe a continuación.
Script opcional para recuperar la conexión (resume-wlan.sh)
Este script destruye y recrea wlan0, fuerza la asociación, asigna la IP fija y la ruta por defecto, y mata posibles procesos dhclient que puedan interferir.
Crear el script en /usr/local/sbin/resume-wlan.sh
#!/bin/sh
# Script para restaurar WiFi tras hibernación (IP fija)
# Destruye y recrea wlan0, espera asociación, asigna IP y ruta.
sleep 3
# Destruir y recrear wlan0
ifconfig wlan0 destroy 2>/dev/null
ifconfig wlan0 create wlandev iwm0 country ES
ifconfig wlan0 up
# Iniciar wpa_supplicant
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
# Esperar asociación (hasta 30s)
i=0
while [ $i -lt 30 ]; do
status=$(ifconfig wlan0 | grep "status:" | awk '{print $2}')
[ "$status" = "associated" ] && break
sleep 1
i=$((i + 1))
done
logger "resume-wlan: status=$status tras ${i}s"
if [ "$status" != "associated" ]; then
logger "resume-wlan: ERROR - no asociado"
exit 1
fi
# Asignar IP fija
ifconfig wlan0 inet 192.168.88.51 netmask 255.255.255.0
# Añadir ruta por defecto
route add default 192.168.88.1
# Matar posibles dhclient que interfieran
pkill -f "dhclient.*wlan0" 2>/dev/null
# Verificar pasados 5 segundos y reañadir si es necesario
sleep 5
if ! netstat -rn | grep -q "^default.*wlan0"; then
route add default 192.168.88.1
logger "resume-wlan: ruta reañadida por seguridad"
fi
logger "resume-wlan: completado (IP fija y ruta activas)"
Darle permisos de ejecución:
chmod +x /usr/local/sbin/resume-wlan.sh
Configurar devd para ejecutar el script al despertar
Crea el archivo /etc/devd/resume-wlan.conf con este contenido:
notify 100 {
match "system" "ACPI";
match "subsystem" "Resume";
action "/usr/local/sbin/resume-wlan.sh &";
};
Reiniciar devd:
service devd restart
¿Cuándo usar el script y cuándo no?
Si no se utiliza el script:
El sistema se encarga de restaurar la interfaz al despertar. Es la opción más simple y recomendable si funciona correctamente en el hardware. Si después de probar varias hibernaciones todo va bien, no es necesario el script.
Si se usa el script:
Aporta una capa extra de fiabilidad, especialmente si se ha tenido problemas de conectividad tras la hibernación. También es útil si se cambia de red o si el driver WiFi es propenso a fallar.
Recomendación: Pruebrar primero sin el script. Si la conexión se pierde ocasionalmente, activar el script.
Script si se utiliza IP dinámica (cambia a DHCP)
Vamos a adaptar el script para que funcione con DHCP en lugar de IP fija. Esto es útil si quieremos que la interfaz obtenga la IP automáticamente al despertar (por ejemplo, si cambias de red con frecuencia o el router asigna IPs dinámicamente).
#!/bin/sh
# Script para restaurar WiFi tras hibernación (DHCP)
# Destruye y recrea wlan0, espera asociación, y lanza dhclient.
sleep 3
# Destruir y recrear wlan0
ifconfig wlan0 destroy 2>/dev/null
ifconfig wlan0 create wlandev iwm0 country ES
ifconfig wlan0 up
# Iniciar wpa_supplicant
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
# Esperar asociación (hasta 30s)
i=0
while [ $i -lt 30 ]; do
status=$(ifconfig wlan0 | grep "status:" | awk '{print $2}')
[ "$status" = "associated" ] && break
sleep 1
i=$((i + 1))
done
logger "resume-wlan: status=$status tras ${i}s"
if [ "$status" != "associated" ]; then
logger "resume-wlan: ERROR - no asociado"
exit 1
fi
# Obtener IP por DHCP
dhclient wlan0
# Asegurar ruta por defecto (por si dhclient no la pone)
sleep 2
if ! netstat -rn | grep -q "^default.*wlan0"; then
# Intenta obtener el gateway de la concesión DHCP (opcional)
# Si no funciona, puedes poner un gateway fijo o simplemente reintentar dhclient.
logger "resume-wlan: ruta por defecto no encontrada, reintentando dhclient"
dhclient wlan0
fi
logger "resume-wlan: completado (DHCP)"
FreeBSD es genial!.







