1 contributor
#!/bin/bash
# AutoNAS Network Handler - System integration for network interface events
# This script is called by udev when network interfaces change state
# Uses autonas-core.sh for all business logic
# Load the AutoNAS core library
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/autonas-core.sh" || {
echo "Error: Cannot load AutoNAS core library" >&2
exit 1
}
# Set LOG_TAG for this component
LOG_TAG="autonas-network-handler"
# Function to handle interface coming up
handle_interface_up() {
local interface="$1"
local event_type="$2"
log_message "Interface up event: $interface ($event_type)" "info"
# Check if this interface is used by AutoNAS
if interface_has_autonas_config "$interface"; then
log_message "Interface $interface is configured for AutoNAS, restoring IP configurations" "info"
# Small delay to let interface stabilize completely
sleep 3
# Restore IPs for this interface
if restore_interface_ips "$interface"; then
log_message "Successfully processed interface $interface restoration" "info"
else
log_message "Failed to fully process interface $interface restoration" "warning"
fi
else
log_message "Interface $interface is not configured for AutoNAS, ignoring" "debug"
fi
}
# Function to handle interface going down
handle_interface_down() {
local interface="$1"
local event_type="$2"
log_message "Interface down event: $interface ($event_type)" "info"
if interface_has_autonas_config "$interface"; then
log_message "AutoNAS-configured interface $interface went down" "warning"
fi
}
# Main script logic
ACTION="$1"
INTERFACE="$2"
EXTRA="$3"
case "$ACTION" in
"interface_up"|"usb_interface_up")
if [ -n "$INTERFACE" ]; then
# Run in background to avoid udev timeout, but with shorter delay for faster response
(
sleep 2 # Reduced from 3 seconds for faster response
handle_interface_up "$INTERFACE" "$ACTION"
) &
log_message "Started background handler for interface up: $INTERFACE (PID: $!)" "debug"
fi
;;
"interface_down"|"usb_interface_down")
if [ -n "$INTERFACE" ]; then
handle_interface_down "$INTERFACE" "$ACTION"
fi
;;
"interface_change")
if [ -n "$INTERFACE" ] && [ -n "$EXTRA" ]; then
case "$EXTRA" in
"up"|"carrier_up")
(
sleep 2
handle_interface_up "$INTERFACE" "change_to_$EXTRA"
) &
log_message "Started background handler for interface $EXTRA: $INTERFACE (PID: $!)" "debug"
;;
"down"|"carrier_down")
handle_interface_down "$INTERFACE" "change_to_$EXTRA"
;;
*)
log_message "Unknown interface change state: $EXTRA for interface $INTERFACE" "warning"
;;
esac
fi
;;
*)
log_message "Unknown action: $ACTION with interface: $INTERFACE" "warning"
exit 1
;;
esac
# Exit immediately so udev doesn't wait
exit 0