#!/bin/bash source /etc/conf.d/usbippolld source /usr/lib/alxconfig-ng/functions/mysqlfunctions # reset connection status for all clients on daemon startup mysqldo "update clients set connected='0'" while true do ALLCLIENTS=$(mysqldo "select ip from clients") for client in ${ALLCLIENTS} do # filter all not connected clients if [[ $(mysqldo "select connected from clients where ip='${client}'") = 1 ]] then BUSID=$(mysqldo "select busid from clients where ip='${client}'") echo "-- polling client #${client} on dev ${BUSID}" usbip -a ${client} ${BUSID} # disconnect non reachable ports if [[ -n $(out=$(mktemp);usbip -a ${client} ${BUSID} &> ${out}; grep '\[Connection refused\]' ${out}) ]] || [[ -n $(out=$(mktemp);usbip -a ${client} ${BUSID} &> ${out}; grep '\[No route to host\]' ${out}) ]] then echo "-- client #${client} *non* reachable on dev ${BUSID}; reset connection state" mysqldo "update clients set connected='0', busid='' where ip='${client}'" fi else echo "-- client #${client} not found, removing from list" out=$(mktemp) port=$(usbip -p &> ${out};grep -B3 -i "${client}" ${out} | grep Port | cut -d' ' -f2| sed "s|:||") [[ ! -z ${port} ]] && usbip -d ${port} mysqldo "update clients set connected='0', busid='' where ip='${client}'" fi # give the device the chance to (dis)connect sleep 3 done sleep ${USBIP_WAIT_TIMEOUT} ## #TODO: fix driver b0rkage # mage-lager ~ # usbip -d 05 # 8 ports available # # port 5 detached # mage-lager ~ # usbip -p # 8 ports available # # usbip err: vhci_driver.c: 60 (imported_device_init) sysfs_open_device 007 [No such file or directory] # usbip err: vhci_driver.c: 140 (parse_status) init new device [No such file or directory] # disconnect all stale ports staleports=$(out=$(mktemp);usbip -p &> ${out};grep '\' ${out} | grep Port | cut -d' ' -f2 | sed "s|:||") if [[ -n ${staleports} ]] then # wait some seconds, or driver may break !! sleep ${USBIP_WAIT_TIMEOUT} for port in ${staleports} do echo "-- disconnecting stale port #${port}" usbip -d ${port} # give the device the chance to disconnect sleep 3 done fi done