--- trunk/usbip/usbippolld-sql 2007/05/15 14:39:55 185 +++ trunk/usbip/usbippolld-sql 2007/05/22 10:16:59 209 @@ -3,6 +3,9 @@ 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") @@ -16,6 +19,14 @@ 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" @@ -25,8 +36,36 @@ 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