#!/bin/bash
###############################################################################
# #
# IPFire.org - A linux based firewall #
# Copyright (C) 2012 IPFire Network Development Team #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see . #
# #
###############################################################################
function hostapd_config_dir() {
local device=${1}
echo "${RUN_DIR}/hostapd/${device}"
}
function hostapd_config_write() {
local device=${1}
shift
assert device_exists ${device}
local broadcast_ssid
local channel
local country_code
local encryption
local key
local mode
local ssid
while [ $# -gt 0 ]; do
case "${1}" in
--broadcast-ssid=*)
broadcast_ssid=${1#--broadcast-ssid=}
;;
--channel=*)
channel=${1#--channel=}
;;
--country-code=*)
country_code=${1#--country-code=}
;;
--mode=*)
mode=${1#--mode=}
;;
--ssid=*)
ssid=${1#--ssid=}
;;
--encryption=*)
encryption=$(cli_get_val ${1})
;;
--key=*)
key=$(cli_get_val ${1})
;;
*)
warning_log "Ignoring unknown argument '${1}'."
;;
esac
shift
done
assert isset broadcast_ssid
assert isbool broadcast_ssid
assert isset channel
assert isinteger channel
assert isset country_code
assert isset mode
assert isset ssid
# Check if key is set when encryption is used.
if isset encryption; then
assert isoneof encryption WPA WPA2 WPA/WPA2
assert isset key
fi
local ignore_broadcast_ssid
if enabled broadcast_ssid; then
ignore_broadcast_ssid="0"
else
ignore_broadcast_ssid="1"
fi
local hw_mode ieee80211n="0"
if [ "${mode}" = "n" ]; then
if [ ${channel} -le 15 ]; then
hw_mode="g"
else
hw_mode="a"
fi
ieee80211n="1"
fi
cat < ${config_file}
service_start "hostapd@${device}.service"
local ret=$?
case "${ret}" in
0)
log DEBUG "Hostapd was successfully started for '${device}'."
return ${EXIT_OK}
;;
1)
error_log "Could not start hostapd properly for '${device}'."
error_log "Configuration file dump:"
local line
while read line; do
error_log " ${line}"
done < ${config_file}
return ${EXIT_ERROR}
;;
esac
}
function hostapd_stop() {
local device=${1}
assert isset device
service_stop "hostapd@${device}.service"
rm -rf $(hostapd_config_dir ${device})
}