hostapd: Find device by MAC address

With wireless device as members in bridges, we cannot predict the name
very well. So we will use the MAC address and find the correct device
name when we launch hostapd.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Michael Tremer
2021-04-16 11:53:30 +02:00
parent 62cd95c299
commit 45b1fc5c7f
4 changed files with 100 additions and 18 deletions

View File

@@ -2,6 +2,20 @@
. /etc/sysconfig/rc
. ${rc_functions}
find_interface() {
local address="${1}"
local path
for path in /sys/class/net/*; do
if [ -s "${path}/address" ] && [ "$(<${path}/address)" = "${address}" ]; then
basename "${path}"
return 0
fi
done
return 1;
}
CHANNEL="6"
COUNTRY="00"
TXPOWER="auto"
@@ -12,8 +26,15 @@ eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings)
case "${1}" in
start)
interface="$(find_interface "${INTERFACE}")"
if [ -z "${interface}" ]; then
boot_mesg "Could not find interface with address ${INTERFACE} for wireless access point"
echo_failure
exit 1
fi
boot_mesg "Starting hostapd... "
loadproc /usr/bin/hostapd -B /etc/hostapd.conf
loadproc /usr/bin/hostapd -B /etc/hostapd.conf -i "${interface}"
;;
stop)

View File

@@ -24,6 +24,17 @@
. /opt/pakfire/lib/functions.sh
extract_files
restore_backup ${NAME}
# Convert INTERFACE setting to MAC address
(
eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings)
if [ -n "${INTERFACE}" -a -d "/sys/class/net/${INTERFACE}" ]; then
sed -i /var/ipfire/wlanap/settings \
-e "s/^INTERFACE=.*/INTERFACE=$(</sys/class/net/${INTERFACE}/address)/"
fi
)
ln -s ../init.d/hostapd /etc/rc.d/rc3.d/S18hostapd
ln -s ../init.d/hostapd /etc/rc.d/rc0.d/K81hostapd
ln -s ../init.d/hostapd /etc/rc.d/rc6.d/K81hostapd