#!/bin/bash
#
# Guralp Configuration System
#   Copyright (c) 2007-2011 Guralp Systems Ltd. All rights reserved.
#
#   Network interface

netdev="$3"

# Handle navbar without loading anything else
if [ "X$1" == "X--navbar" ]
then
	echo "networktop	Networking"
	echo "wlan/$netdev	$netdev"
	exit 0
fi

# Load support functions
script_dir=$(dirname $0)
. $script_dir/functions.sh

devfile="${NETCONFDIR}/${netdev}/dev"
wpafile="${NETCONFDIR}/${netdev}/wpa_supplicant.conf"
BLACK_LIST="${NETCONFDIR}/wifi-blacklist.local"


get_mac_address() {
    ( ip -o link show ${netdev} | sed -e 's,^.*link/ether \([^ ]*\).*$,\1,' ) 2> /dev/null
}



do_read() {
    local desc

    gcs_var "device" "${netdev}"
    gcs_var "mac_address" "$(get_mac_address)"
    desc="$(gcs_get_varf "desc" "${devfile}")"
    [ -n "${desc}" ] && gcs_var "o_desc" "${desc}"
    [ -z "${desc}" ] && gcs_var "d_desc" "Wireless interface ${netdev}"

    enable="$(gcs_get_varf "enable" "${devfile}")"
    gcs_var "d_enable" "True"
    gcs_var "o_enable" "${enable:-True}"

    wpa_supplicant_gcs --iselect --config "${wpafile}" --device "${netdev}"
}



do_check() {
    gcs_read_vars
}



do_write() {
    local dev_enabled

    do_check
    if (( gcs_errors > 0 ))
    then
        return
    fi

    gcs_set_varf "desc" "${devfile}" "${new_desc}"
    gcs_set_varf "enable" "${devfile}" "${new_enable}"

    # We load the modules if at least one Wifi device is enabled
    enabled=""
    for f in ${NETCONFDIR}/wlan*/dev
    do
        [ -r "${f}" ] || continue
        dev_enabled="$(gcs_get_varf "enable" "${f}")"
        gcs_truefalse "${dev_enabled:-false}" && enabled="True"
    done

    if [ -n "$enabled" ]
    then
        echo "# Wifi modules will be loaded" > $BLACK_LIST
    else
	cat <<EOF > $BLACK_LIST
# Wifi and Bluetooth modules are not loaded
blacklist bluetooth
blacklist btusb
blacklist cfg80211
blacklist lib80211
blacklist libertas
blacklist libertas_sdio
blacklist mmc_block
blacklist mmc_core
blacklist pxamci
EOF
    fi
}



case "X$1" in
X--check)       do_check        ;;
X--write)       do_write        ;;
X--read)        do_read         ;;
*)              exit 1          ;;
esac

gcs_cleanup
exit 0

# vim: ts=4:sw=4:expandtab
