hostapd: add systemd support

When using systemd, putting the wlan1 interface up wasn't working because it
was relying on initscripts that are no longer in the filesystem.

Add a parametrized version of the upstream hostapd service to be able to use a
configuration that's different from the default one. Also, modify the
generation of the wlan1 entry in /etc/network/interfaces to be able to use
different post-up/pre-down hooks depending on the init manager that's being
used.

https://jira.digi.com/browse/DEL-6504

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
This commit is contained in:
Gabriel Valcazar 2019-03-13 11:01:07 +01:00
parent e13d086612
commit b957f0ef75
5 changed files with 31 additions and 7 deletions

View File

@ -0,0 +1,11 @@
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator (%i)
After=network.target
[Service]
Type=forking
PIDFile=/run/hostapd.%i.pid
ExecStart=@SBINDIR@/hostapd @SYSCONFDIR@/hostapd_%i.conf -P /run/hostapd.%i.pid -B
[Install]
WantedBy=multi-user.target

View File

@ -1,17 +1,25 @@
# Copyright (C) 2016-2018 Digi International.
# Copyright (C) 2016-2019 Digi International.
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
SRC_URI_append = " file://hostapd_wlan0.conf"
SRC_URI_append = " \
file://hostapd_wlan0.conf \
file://hostapd@.service \
"
SRC_URI_append_ccimx6ul = " file://hostapd_wlan1.conf"
SRC_URI_append_ccimx6qpsbc = " file://hostapd_wlan1.conf"
SRC_URI_append_ccimx8x = " file://hostapd_wlan1.conf"
SYSTEMD_SERVICE_${PN}_append = " hostapd@.service"
do_install_append() {
# Remove the default hostapd.conf
rm -f ${WORKDIR}/hostapd.conf
# Install custom hostapd_IFACE.conf file
install -m 0644 ${WORKDIR}/hostapd_wlan0.conf ${D}${sysconfdir}
# Install interface-specific systemd service
install -m 0644 ${WORKDIR}/hostapd@.service ${D}${systemd_unitdir}/system/
sed -i -e 's,@SBINDIR@,${sbindir},g' -e 's,@SYSCONFDIR@,${sysconfdir},g' ${D}${systemd_unitdir}/system/hostapd@.service
}
do_install_append_ccimx6ul() {

View File

@ -2,5 +2,5 @@
auto wlan1
iface wlan1 inet dhcp
udhcpc_opts -S -b >/dev/null &
post-up /etc/init.d/hostapd start
pre-down /etc/init.d/hostapd stop
post-up ##WLAN1_POST_UP_ACTION##
pre-down ##WLAN1_PRE_DOWN_ACTION##

View File

@ -5,5 +5,5 @@ iface wlan1 inet static
netmask ##WLAN1_STATIC_NETMASK##
gateway ##WLAN1_STATIC_GATEWAY##
dns-nameservers ##WLAN1_STATIC_DNS##
post-up /etc/init.d/hostapd start
pre-down /etc/init.d/hostapd stop
post-up ##WLAN1_POST_UP_ACTION##
pre-down ##WLAN1_PRE_DOWN_ACTION##

View File

@ -1,4 +1,4 @@
# Copyright (C) 2013-2018 Digi International Inc.
# Copyright (C) 2013-2019 Digi International Inc.
FILESEXTRAPATHS_prepend := "${THISDIR}/${BP}:"
@ -64,6 +64,9 @@ install_virtwlans() {
install -m 0755 ${WORKDIR}/virtwlans.sh ${D}${base_bindir}
}
WLAN1_POST_UP_ACTION = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemctl start hostapd@wlan1.service', '/etc/init.d/hostapd start', d)}"
WLAN1_PRE_DOWN_ACTION = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemctl stop hostapd@wlan1.service', '/etc/init.d/hostapd stop', d)}"
install_wlan1() {
if [ -n "${HAVE_WIFI}" ]; then
cat ${WORKDIR}/interfaces.wlan1.${WLAN1_MODE} >> ${D}${sysconfdir}/network/interfaces
@ -80,6 +83,8 @@ install_wlan1() {
sed -i -e "s,##WLAN1_STATIC_NETMASK##,${WLAN1_STATIC_NETMASK},g" ${D}${sysconfdir}/network/interfaces
sed -i -e "s,##WLAN1_STATIC_GATEWAY##,${WLAN1_STATIC_GATEWAY},g" ${D}${sysconfdir}/network/interfaces
sed -i -e "s,##WLAN1_STATIC_DNS##,${WLAN1_STATIC_DNS},g" ${D}${sysconfdir}/network/interfaces
sed -i -e "s,##WLAN1_POST_UP_ACTION##,${WLAN1_POST_UP_ACTION},g" ${D}${sysconfdir}/network/interfaces
sed -i -e "s,##WLAN1_PRE_DOWN_ACTION##,${WLAN1_PRE_DOWN_ACTION},g" ${D}${sysconfdir}/network/interfaces
}
do_install_append_ccimx6qpsbc() {