aboutsummaryrefslogtreecommitdiffstats
path: root/testing/usbip-utils
diff options
context:
space:
mode:
authorwener <wenermail@gmail.com>2018-04-10 18:23:37 +0800
committerTimo Teräs <timo.teras@iki.fi>2018-04-10 11:50:19 +0000
commitaf99cba4e243a66c25400f8ded7bc54855884e8b (patch)
treee57927695c8edcfd34d58dab13c773aa1ca7f2c7 /testing/usbip-utils
parent049ae7a507981474824eabdad2306f744b2eb43c (diff)
downloadaports-af99cba4e243a66c25400f8ded7bc54855884e8b.tar.bz2
aports-af99cba4e243a66c25400f8ded7bc54855884e8b.tar.xz
testing/usbip-utils: move to testing, upgrade to 4.16
Diffstat (limited to 'testing/usbip-utils')
-rw-r--r--testing/usbip-utils/APKBUILD68
-rw-r--r--testing/usbip-utils/usbip.confd18
-rw-r--r--testing/usbip-utils/usbip.initd244
3 files changed, 330 insertions, 0 deletions
diff --git a/testing/usbip-utils/APKBUILD b/testing/usbip-utils/APKBUILD
new file mode 100644
index 0000000000..3d306aa1ee
--- /dev/null
+++ b/testing/usbip-utils/APKBUILD
@@ -0,0 +1,68 @@
+# Contributor: Der Tiger <der.tiger.alpine@arcor.de>
+# Maintainer: wener <wenermail@gmail.com>
+pkgname=usbip-utils
+pkgver=4.16
+pkgrel=0
+pkgdesc="Utilities for USB device sharing over IP network"
+url="https://kernel.org/doc/readme/drivers-staging-usbip-userspace-README"
+arch="all"
+license="GPL-2.0"
+depends="glib sysfsutils usbutils"
+depends_dev="gcc automake autoconf eudev-dev libtool linux-headers sysfsutils-dev glib-dev"
+makedepends="$depends_dev tar"
+install=""
+subpackages="$pkgname-dev $pkgname-doc"
+source="https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-$pkgver.tar.gz
+ usbip.initd
+ usbip.confd"
+
+_baseurl="linux-$pkgver/tools/usb/usbip"
+builddir="$srcdir/usbip"
+
+unpack() {
+ cd "$srcdir"
+
+ mkdir "$builddir"
+ tar -C $builddir --strip-components=4 -zxv -f $srcdir/linux-$pkgver.tar.gz $_baseurl
+}
+
+prepare() {
+ local i
+ cd "$builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i;;
+ esac
+ done
+}
+
+build() {
+ cd "$builddir"
+ export CFLAGS=$(echo $CFLAGS | sed 's|-Os|-O2|')
+ export CPPFLAGS="$CFLAGS"
+ /bin/sh autogen.sh
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --libdir=/usr/lib \
+ --datarootdir=/usr/share
+ make
+}
+
+check() {
+ cd "$builddir"
+ ./src/usbip version
+ ./src/usbipd --version
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ install -m755 -D "$srcdir"/usbip.initd "$pkgdir"/etc/init.d/usbip
+ install -m755 -D "$srcdir"/usbip.confd "$pkgdir"/etc/conf.d/usbip
+}
+
+sha512sums="01d3322d2226d39a76aded6ffd0cf40098e0e5532b6780183b0ae9868454d7560da65095c44f056f6e2c086c46104070f2bd987010b75cae003235cb4f0192ce linux-4.16.tar.gz
+fcbd64d844c9bc187d08cef5995e91a46c0df78deb24e96ac9210c0e2c730eca0301970d9b8ffbf003df274682d05072431a26b59d8c491f396618268a12ec92 usbip.initd
+eb8de617e27c4d5fdfee9c442e8f74b0afb4d0fe7b59eca3a19629eb70fea7e09b3c125bc968aa8810d845ce661c829bd0f3fdb2288664f2cccf423bc0ae6ae8 usbip.confd"
diff --git a/testing/usbip-utils/usbip.confd b/testing/usbip-utils/usbip.confd
new file mode 100644
index 0000000000..dcd259c2b2
--- /dev/null
+++ b/testing/usbip-utils/usbip.confd
@@ -0,0 +1,18 @@
+#--------------------------------
+# USBIP Settings
+#--------------------------------
+# - Start daemon to share local devices
+USBIP_START_DAEMON=no
+
+# - Automatically bind local busses
+# format: "{bus} [{bus2} [..]]"
+# or : "{vendorID}:{productID} [..]"
+# example: "3-8 1-1 1b2c:4d1a"
+USBIP_AUTO_BIND=""
+
+# - Automatically attach remote busses
+# format: "{host ip} {remote bus} [..]"
+# or: "{host ip} {vendorID}:{productID} [..]"
+# example: "10.10.10.10 5-1 192.168.0.1 1234:abcd"
+USBIP_AUTO_ATTACH=""
+
diff --git a/testing/usbip-utils/usbip.initd b/testing/usbip-utils/usbip.initd
new file mode 100644
index 0000000000..f0e908c721
--- /dev/null
+++ b/testing/usbip-utils/usbip.initd
@@ -0,0 +1,244 @@
+#!/sbin/openrc-run
+
+description="Load USBIP kernel modules and run daemon"
+
+: ${USBIP_EXEC:=$(which usbip)}
+: ${USBIP_EXEC_DAEMON:=$(which usbipd)}
+
+depend()
+{
+ provide usbip
+ need sysfs net
+}
+
+LoadKernelModule ()
+{
+ local module=$1
+ #-----------------
+ result=
+ if [ -z "$(/sbin/lsmod | grep "^$(basename $module)")" ]
+ then
+ local filename=$(find lib/modules/`uname -r`/kernel -type f -name $module.ko -printf '%f\n')
+ if [ -n "$filename" ]
+ then
+ if ! /sbin/modprobe $module
+ then
+ eerror "Cannot load kernel module '$module'."
+ result=failed
+ fi
+ else
+ eerror "Cannot find kernel module '$module'."
+ result=failed
+ fi
+ fi
+ [ -z "$result" ]
+}
+
+IsAvailable ()
+{
+ local bus_or_device=$(echo $1 | tr '[A-Z]' '[a-z]')
+ local host=$2
+ #-----------------
+ host=${host:+--remote=$host}
+ : ${host:=--local}
+ $USBIP_EXEC list --parsable $host |
+ sed -n 's|.*busid='$bus_or_device'#.*|yes|p; \
+ s|.*usbid='$bus_or_device'#.*|yes|p'
+}
+
+GetBus ()
+{
+ local device=$(echo $1 | tr '[A-Z]' '[a-z]')
+ local host=$2
+ #-----------------
+ host=${host:+--remote=$host}
+ : ${host:=--local}
+ case "$host" in
+ "--remote"*) # FIXME: USBIP bug causing remote devices not to be listed parsable
+ $USBIP_EXEC list --parsable $host |
+ sed -n 's|^[ \t]*\([0-9][0-9]*-[0-9][0-9]*\):.*('"$device"').*|\1|p';;
+ *)
+ $USBIP_EXEC list --parsable $host |
+ sed -n 's|.*busid=\([0-9][0-9]*-[0-9][0-9]*\)#usbid='"$device"'#.*|\1|p';;
+ esac
+}
+
+ExecuteUsbip()
+{
+ local command=$1
+ local bus=$2
+ local host=$3
+ local port=$4
+ #-----------------
+ local result=
+ if [ -n "$command" ]
+ then
+ if $USBIP_EXEC $command ${bus:+--busid=$bus} ${host:+--remote=$host} ${port:+--port $port} 1> /dev/null 2> /dev/null
+ then
+ einfo "Executed command '$command'${bus:+ with bus '$bus'}${host:+ on host '$host'}${port:+ on port '$port'}, successfully."
+ else
+ ewarn "Executing command '$command'${bus:+ with bus '$bus'}${host:+ on host '$host'}${port:+ on port '$port'} failed."
+ result=failed
+ fi
+ fi
+ [ -z "$result" ]
+}
+
+ValidateCommand ()
+{
+ local command=$1
+ local bus_or_device=$2
+ local host=$3
+ #-----------------
+ local result=
+ local bus=
+ if [ -z "$host" -o -n "$(echo $host | grep '^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$')" ]
+ then
+ if [ -n "$(echo $bus_or_device | grep '^[[:xdigit:]]\{4\}:[[:xdigit:]]\{4\}$')" ]
+ then
+ bus="$(GetBus $bus_or_device $host)"
+ if [ -z "$bus" ]
+ then
+ ewarn "Device '$bus_or_device' not available${host:+ on host '$host'}."
+ result=failed
+ fi
+ else
+ if [ -n "$(echo $bus_or_device | grep '^[0-9][0-9]*-[0-9][0-9]*$')" ]
+ then
+ bus=$bus_or_device
+ else
+ ewarn "Unrecognized bus or device '$bus_or_device'."
+ result=failed
+ fi
+ fi
+ if [ -n "$bus" ]
+ then
+ case "$command" in
+ "bind"|"unbind")
+ ExecuteUsbip $command $bus || result=failed;;
+ "attach")
+ if [ -n "$host" ]
+ then
+ ExecuteUsbip $command $bus $host || result=failed
+ else
+ ewarn "Host statement is missing in command '$command'."
+ result=failed
+ fi
+ ;;
+ *)
+ ewarn "Unhandled command '$command'."; result=failed;;
+ esac
+ fi
+ else
+ ewarn "Illegal host ip address '$host'."
+ result=failed
+ fi
+ [ -z "$result" ]
+}
+
+ProcessList ()
+{
+ local command=$1
+ shift
+ local list=$*
+ #-----------------
+ local result=
+ local no_host=
+ case "$command" in
+ "bind"|"unbind") no_host=yes;;
+ *) no_host=;;
+ esac
+ local host=
+ local item=
+ ( for item in $list
+ do
+ if [ -n "$host" -o -n "$no_host" ]
+ then
+ ValidateCommand $command $item $host || result=failed
+ host=
+ else
+ host=$item
+ fi
+ done
+ [ -z "$result" ] )
+}
+
+DetachAll ()
+{
+ # FIXME: At this stage, there is no way to get the vhci_hcd port id of any attached device
+ for port in $(seq 0 15)
+ do
+ $USBIP_EXEC detach --port $port 2> /dev/null
+ done
+ [ 1 -eq 1 ]
+}
+
+UnbindAll ()
+{
+ local result=
+ ProcessList unbind "$($USBIP_EXEC list --parsable --local | sed -n 's|^busid=\([0-9][0-9]*-[0-9][0-9]*\)#.*=usbip-host#$|\1|p' | tr '\n' ' ')"
+}
+
+start_daemon()
+{
+ ebegin "Starting usbip daemon"
+ if LoadKernelModule usbip-host
+ then
+ start-stop-daemon --start --exec $USBIP_EXEC_DAEMON -- -D
+ fi
+ eend $?
+}
+
+start()
+{
+ ebegin "Starting usbip"
+ if LoadKernelModule usbip-core
+ then
+ if LoadKernelModule vhci-hcd
+ then
+ eend 0
+ if yesno "${USBIP_START_DAEMON:-no}"
+ then
+ start_daemon
+ fi
+ if [ -n "$USBIP_AUTO_BIND" ]
+ then
+ ebegin "Auto-binding local busses"
+ ProcessList bind $USBIP_AUTO_BIND
+ eend $?
+ fi
+ if [ -n "$USBIP_AUTO_ATTACH" ]
+ then
+ ebegin "Auto-attaching remote busses"
+ ProcessList attach $USBIP_AUTO_ATTACH
+ eend $?
+ fi
+ else
+ eend 1
+ fi
+ else
+ eend 1
+ fi
+}
+
+stop_daemon()
+{
+ ebegin "Stopping usbip daemon"
+ start-stop-daemon --stop --exec $USBIP_EXEC_DAEMON
+ eend $?
+}
+
+stop()
+{
+ ebegin "Detaching remote busses"
+ DetachAll
+ eend $?
+ ebegin "Un-binding local busses"
+ UnbindAll
+ eend $?
+ if [ -n "$(pidof $(basename "$USBIP_EXEC_DAEMON"))" ]
+ then
+ stop_daemon
+ fi
+}
+