diff options
| author | wener <wenermail@gmail.com> | 2018-04-10 18:23:37 +0800 |
|---|---|---|
| committer | Timo Teräs <timo.teras@iki.fi> | 2018-04-10 11:50:19 +0000 |
| commit | af99cba4e243a66c25400f8ded7bc54855884e8b (patch) | |
| tree | e57927695c8edcfd34d58dab13c773aa1ca7f2c7 /testing/usbip-utils | |
| parent | 049ae7a507981474824eabdad2306f744b2eb43c (diff) | |
| download | aports-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/APKBUILD | 68 | ||||
| -rw-r--r-- | testing/usbip-utils/usbip.confd | 18 | ||||
| -rw-r--r-- | testing/usbip-utils/usbip.initd | 244 |
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 +} + |
