[OE-core] [PATCH 3/4] wpa-supplicant: use debian wpa contribution to improve ifup/ifdown

Jens Rehsack rehsack at gmail.com
Wed Mar 16 09:42:47 UTC 2016


Instead of simplified, self-written start/stop hooks for wpa-supplicant on
interfaces coming up or going down, use the more advanced hooks provided
by the debian contribution.

Since the default behavior in the debian start/stop hooks is log into syslog,
which is more reasonable for embedded devices either (usually no user interface
available), follow this behavior and enable CONFIG_DEBUG_SYSLOG.

Add a package for ifplugd action hooks, if desired and install man-pages
as well for a reasonable wpa-supplicant-doc.

Signed-off-by: Jens Rehsack <sno at netbsd.org>
---
 .../wpa-supplicant/wpa-supplicant/defconfig        |  4 +-
 .../wpa-supplicant/wpa-supplicant.sh               | 85 ----------------------
 .../wpa-supplicant/wpa-supplicant_2.5.bb           | 47 ++++++++----
 3 files changed, 36 insertions(+), 100 deletions(-)
 delete mode 100644 meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh

diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig
index f04e398..217cf61 100644
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig
@@ -418,9 +418,9 @@ CONFIG_CTRL_IFACE_DBUS_NEW=y
 #CONFIG_DEBUG_FILE=y

 # Send debug messages to syslog instead of stdout
-#CONFIG_DEBUG_SYSLOG=y
+CONFIG_DEBUG_SYSLOG=y
 # Set syslog facility for debug messages
-#CONFIG_DEBUG_SYSLOG_FACILITY=LOG_DAEMON
+CONFIG_DEBUG_SYSLOG_FACILITY=LOG_DAEMON

 # Add support for sending all debug messages (regardless of debug verbosity)
 # to the Linux kernel tracing facility. This helps debug the entire stack by
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh
deleted file mode 100644
index 5c9e5d3..0000000
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/sh
-
-
-WPA_SUP_BIN="/usr/sbin/wpa_supplicant"
-WPA_SUP_PNAME="wpa_supplicant"
-WPA_SUP_PIDFILE="/var/run/wpa_supplicant.$IFACE.pid"
-WPA_SUP_OPTIONS="-B -P $WPA_SUP_PIDFILE -i $IFACE"
-
-VERBOSITY=0
-
-
-if [ -s "$IF_WPA_CONF" ]; then
-	WPA_SUP_CONF="-c $IF_WPA_CONF"
-else
-	exit 0
-fi
-
-if [ ! -x "$WPA_SUP_BIN" ]; then
-
-	if [ "$VERBOSITY" = "1" ]; then
-		echo "$WPA_SUP_PNAME: binaries not executable or missing from $WPA_SUP_BIN"
-	fi
-
-	exit 1
-fi
-
-if [ "$MODE" = "start" ] ; then
-	# driver type of interface, defaults to wext when undefined
-	if [ -s "/etc/wpa_supplicant/driver.$IFACE" ]; then
-		IF_WPA_DRIVER=$(cat "/etc/wpa_supplicant/driver.$IFACE")
-	elif [ -z "$IF_WPA_DRIVER" ]; then
-
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: wpa-driver not provided, using \"wext\""
-		fi
-
-		IF_WPA_DRIVER="wext"
-	fi
-
-	# if we have passed the criteria, start wpa_supplicant
-	if [ -n "$WPA_SUP_CONF" ]; then
-
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: $WPA_SUP_BIN $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER"
-		fi
-
-		start-stop-daemon --start --quiet \
-			--name $WPA_SUP_PNAME --startas $WPA_SUP_BIN --pidfile $WPA_SUP_PIDFILE \
-			--  $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER
-	fi
-
-	# if the interface socket exists, then wpa_supplicant was invoked successfully
-	if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]; then
-
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: ctrl_interface socket located at $WPA_COMMON_CTRL_IFACE/$IFACE"
-		fi
-
-		exit 0
-
-	fi
-
-elif [ "$MODE" = "stop" ]; then
-
-	if [ -f "$WPA_SUP_PIDFILE" ]; then
-
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: terminating $WPA_SUP_PNAME daemon"
-		fi
-
-		start-stop-daemon --stop --quiet \
-			--name $WPA_SUP_PNAME --pidfile	$WPA_SUP_PIDFILE
-
-		if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]; then
-			rm -f $WPA_COMMON_CTRL_IFACE/$IFACE
-		fi
-
-		if [ -f "$WPA_SUP_PIDFILE" ]; then
-			rm -f $WPA_SUP_PIDFILE
-		fi
-	fi
-
-fi
-
-exit 0
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.5.bb b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.5.bb
index 935c8af..fa40c57 100644
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.5.bb
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.5.bb
@@ -19,8 +19,8 @@ SYSTEMD_SERVICE_${PN} = "wpa_supplicant.service wpa_supplicant-nl80211 at .service
 SYSTEMD_AUTO_ENABLE = "disable"

 SRC_URI = "http://w1.fi/releases/wpa_supplicant-${PV}.tar.gz  \
+           http://snapshot.debian.org/archive/debian/20151115T033945Z/pool/main/w/wpa/wpa_2.3-2.3.debian.tar.xz;name=wpa-debian \
            file://defconfig \
-           file://wpa-supplicant.sh \
            file://wpa_supplicant.conf \
            file://wpa_supplicant.conf-sane \
            file://99_wpa_supplicant \
@@ -28,11 +28,15 @@ SRC_URI = "http://w1.fi/releases/wpa_supplicant-${PV}.tar.gz  \
 SRC_URI[md5sum] = "96ff75c3a514f1f324560a2376f13110"
 SRC_URI[sha256sum] = "cce55bae483b364eae55c35ba567c279be442ed8bab5b80a3c7fb0d057b9b316"

+SRC_URI[wpa-debian.md5sum] = "38dedea3056ee103fb70c544ae1b99b8"
+SRC_URI[wpa-debian.sha256sum] = "aebdeda11461e93d7f37df5f45643a3fc3c203853c884d983ed4f558604f0b2f"
+
 S = "${WORKDIR}/wpa_supplicant-${PV}"

-PACKAGES_prepend = "wpa-supplicant-passphrase wpa-supplicant-cli "
+PACKAGES_prepend = "wpa-supplicant-passphrase wpa-supplicant-cli wpa-supplicant-ifplugd "
 FILES_wpa-supplicant-passphrase = "${bindir}/wpa_passphrase"
 FILES_wpa-supplicant-cli = "${sbindir}/wpa_cli"
+FILES_wpa-supplicant-ifplugd = "${sysconfdir}/ifplugd/action.d/ ${sysconfdir}/wpa_supplicant/action_wpa.sh"
 FILES_${PN} += "${datadir}/dbus-1/system-services/*"
 CONFFILES_${PN} += "${sysconfdir}/wpa_supplicant.conf"

@@ -62,12 +66,16 @@ do_compile () {
 	unset CFLAGS CPPFLAGS CXXFLAGS
 	sed -e "s:CFLAGS\ =.*:& \$(EXTRA_CFLAGS):g" -i ${S}/src/lib.rules
 	oe_runmake -C wpa_supplicant
+
+        cd "${WORKDIR}/debian"
+        sed -i -e 's,"/sbin/wpa,"/usr/sbin/wpa,g' ifupdown/functions.sh
 }

 do_install () {
 	install -d ${D}${sbindir}
-	install -m 755 wpa_supplicant/wpa_supplicant ${D}${sbindir}
-	install -m 755 wpa_supplicant/wpa_cli        ${D}${sbindir}
+	install -m 755 wpa_supplicant/wpa_supplicant         ${D}${sbindir}
+	install -m 755 wpa_supplicant/wpa_cli                ${D}${sbindir}
+	install -m 755 ${WORKDIR}/debian/ifupdown/wpa_action ${D}${sbindir}

 	install -d ${D}${bindir}
 	install -m 755 wpa_supplicant/wpa_passphrase ${D}${bindir}
@@ -78,21 +86,34 @@ do_install () {
 	install -d ${D}${sysconfdir}
 	install -m 600 ${WORKDIR}/wpa_supplicant.conf-sane ${D}${sysconfdir}/wpa_supplicant.conf

-	install -d ${D}${sysconfdir}/network/if-pre-up.d/
-	install -d ${D}${sysconfdir}/network/if-post-down.d/
-	install -d ${D}${sysconfdir}/network/if-down.d/
-	install -m 755 ${WORKDIR}/wpa-supplicant.sh ${D}${sysconfdir}/network/if-pre-up.d/wpa-supplicant
-	cd ${D}${sysconfdir}/network/ && \
-	ln -sf ../if-pre-up.d/wpa-supplicant if-post-down.d/wpa-supplicant
+	install -d ${D}${sysconfdir}/wpa_supplicant/
+        install -m 755 ${WORKDIR}/debian/ifupdown/action_wpa.sh ${D}${sysconfdir}/wpa_supplicant/
+        install -m 644 ${WORKDIR}/debian/ifupdown/functions.sh ${D}${sysconfdir}/wpa_supplicant/
+        install -m 755 ${WORKDIR}/debian/ifupdown/wpasupplicant.sh ${D}${sysconfdir}/wpa_supplicant/ifupdown.sh
+
+	for nethook in if-up.d if-pre-up.d if-post-down.d if-down.d; do
+            install -d ${D}${sysconfdir}/network/${nethook}/
+            (cd ${D}${sysconfdir}/network/ && \
+                ln -sf ../../wpa_supplicant/ifupdown.sh ${nethook}/wpa-supplicant)
+        done
+
+	install -d ${D}${sysconfdir}/ifplugd/action.d/
+        (cd ${D}${sysconfdir}/ifplugd/action.d/ && ln -sf ../../wpa_supplicant/action_wpa.sh action_wpa)
+
+        install -d ${D}${mandir}/man5 ${D}${mandir}/man8
+        install -m 0644 wpa_supplicant/doc/docbook/wpa_supplicant.conf.5 ${D}${mandir}/man5/
+        install -m 0644 wpa_supplicant/doc/docbook/wpa_passphrase.8 wpa_supplicant/doc/docbook/wpa_supplicant.8 \
+            wpa_supplicant/doc/docbook/wpa_cli.8 ${WORKDIR}/debian/ifupdown/wpa_action.8 \
+            ${D}${mandir}/man8/

 	install -d ${D}/${sysconfdir}/dbus-1/system.d
-	install -m 644 ${S}/wpa_supplicant/dbus/dbus-wpa_supplicant.conf ${D}/${sysconfdir}/dbus-1/system.d
+	install -m 644 wpa_supplicant/dbus/dbus-wpa_supplicant.conf ${D}/${sysconfdir}/dbus-1/system.d
 	install -d ${D}/${datadir}/dbus-1/system-services
-	install -m 644 ${S}/wpa_supplicant/dbus/*.service ${D}/${datadir}/dbus-1/system-services
+	install -m 644 wpa_supplicant/dbus/*.service ${D}/${datadir}/dbus-1/system-services

 	if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
 		install -d ${D}/${systemd_unitdir}/system
-		install -m 644 ${S}/wpa_supplicant/systemd/*.service ${D}/${systemd_unitdir}/system
+		install -m 644 wpa_supplicant/systemd/*.service ${D}/${systemd_unitdir}/system
 	fi

 	install -d ${D}/etc/default/volatiles
--
2.6.3

The counterpart (cf88eed - dnsmasq: steal resolvconf support from Ubuntu) is in master-next of meta-oe
and will be hopefully pushed to master (heard nothing contrary ...)

Cheers
--
Jens Rehsack - rehsack at gmail.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20160316/8fd80572/attachment-0002.sig>


More information about the Openembedded-core mailing list