#!/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" else hw_mode="${mode}" 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}) }