[package] add netsmap-to-devinfo (#5537)
authorFlorian Fainelli <florian@openwrt.org>
Sat, 18 Jul 2009 00:41:44 +0000 (00:41 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Sat, 18 Jul 2009 00:41:44 +0000 (00:41 +0000)
SVN-Revision: 16888

net/mac-to-devinfo/Makefile
net/mac-to-devinfo/files/clean-devinfo
net/mac-to-devinfo/files/netdiscover-to-devinfo
net/mac-to-devinfo/files/netsmap-to-devinfo [new file with mode: 0644]

index 0ca7a57..4736fb8 100644 (file)
@@ -83,6 +83,7 @@ endef
 define Package/smap-to-devinfo/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) ./files/smap-to-devinfo $(1)/usr/bin
+       $(INSTALL_BIN) ./files/netsmap-to-devinfo $(1)/usr/bin
 endef
 
 define Package/netdiscover-to-devinfo/install
index 706c8ec..b3aba91 100644 (file)
@@ -3,3 +3,8 @@
 OUIDIR=/var/cache/mac-to-devinfo
 
 rm -rf $OUIDIR
+#!/bin/sh
+
+OUIDIR=/var/cache/mac-to-devinfo
+
+rm -rf $OUIDIR
index d678352..7029dd3 100644 (file)
@@ -1,26 +1,51 @@
 #!/bin/sh
 
 MACTODEV=mac-to-devinfo
-NETDISCOVER=netdiscover
 
 if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
-    echo "Usage: netdiscover-to-devinfo IP-range Interface Timeout"
+    echo "Usage: netdiscover-to-devinfo IP-range Interface Timeout [-r repeats] [-s sleep_between_arp_requests]"
     exit 1
 fi
 
 prep-devinfo
-OLDIFS=$IFS
 IFS='
 '
-for line in $($NETDISCOVER -t $3 -k -m -i $2 -r $1); do
-    IFS=$OLDIFS
+
+IPRANGE=$1
+IFACE=$2
+TIMEOUT=$3
+
+shift 3
+
+while getopts "r:s:h" param; do
+    case "$param" in
+       h)
+           usage
+           exit 1
+           ;;
+       r)
+           REPEATS=" -c $OPTARG"
+           ;;
+       s)
+           SLEEPREQ="-s $OPTARG"
+           ;;
+       ?|*)
+           usage
+           exit 1
+           break
+           ;;
+
+    esac
+done
+
+
+for line in $(sh -c "netdiscover -t $TIMEOUT-k -m -i $IFACE -r $IPRANGE $REPEATS $SLEEPREQ 2>/dev/null" | grep -E '[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?'); do
+    unset IFS
     IP=$(echo $line | tr -s \  |  cut -f1 -d\  )
     MAC=$(echo $line | tr -s \  |  cut -f2 -d\  )
     echo "$IP"" | ""$($MACTODEV $MAC)"
-    OLDIFS=$IFS
     IFS='
 '
 done
 
-IFS=$OLDIFS
-
+unset IFS
diff --git a/net/mac-to-devinfo/files/netsmap-to-devinfo b/net/mac-to-devinfo/files/netsmap-to-devinfo
new file mode 100644 (file)
index 0000000..5df1e2a
--- /dev/null
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+MACTODEV=mac-to-devinfo
+IPTODEV=ip-to-devinfo
+
+usage() {
+    echo "$0: -i interferace -r ip-range [options]"
+    echo ""
+    echo "-r ip-range       range to probe (CIDR, e.g. 192.168.2.0/24)"
+    echo "-i interface      interface to use in scan"
+    echo "-t timeout        time to rate for arp responses for device detection"
+    echo "-p port[,port...] command-separated lists of ports to scan for SIP responses"
+    echo "-c repeat_count   Number of times to send each request (default 1)"
+    echo "-s sleepreq       ms to wait between sending arp requests"
+    echo "-x                Assume we're running on an Xcelerator IP"
+    echo "-h                help"
+}
+
+
+while getopts "r:i:t:p:c:s:xh" param; do
+    case "$param" in
+       h)
+           usage
+           exit 1
+           ;;
+       r)
+           IPRANGE=$OPTARG
+           ;;
+       i)
+           INTERFACE=$OPTARG
+           ;;
+       t)
+           TIMEOUT=$OPTARG
+           ;;
+       p)
+           PORTARG=$OPTARG
+           ;;
+       c)
+           REPEATCOUNT=$OPTARG
+           ;;
+       s)
+           SLEEPREQ="-s $OPTARG"
+           ;;
+       x)
+           XIP=TRUE
+           ;;
+       ?|*)
+           usage
+           exit 1
+           break
+           ;;
+
+    esac
+done
+
+if [ "$IPRANGE" = "" ]; then
+    echo "Must specify an ip range"
+    usage
+    exit 1
+fi
+
+if [ "$INTERFACE" = "" ]; then
+    echo "Must speciy the interface"
+    usage
+    exit 1
+fi
+
+if [ "$TIMEOUT" = "" ]; then
+    TIMEOUT=20
+    usage
+fi
+
+unset PORTS
+
+if [ -n "$PORTARG" ]; then
+    PORTLIST="$PORTARG"
+    
+    if [ -z "$(echo $PORTLIST | grep ',')" ]; then
+       PORTS="$PORTLIST"
+    else
+       FIELD=1
+       oldcurport=""
+       curport="$(echo $PORTLIST | cut -f$FIELD -d, )"
+       while [ "$curport" != "$oldcurport" ]; do
+           PORTS="$curport $PORTS"
+           FIELD=$(($FIELD + 1))
+           oldcurport="$(echo $PORTLIST | cut -f$FIELD -d, )"
+           curport="$(echo $PORTLIST | cut -f$FIELD -d, )"
+       done
+    fi
+fi
+
+
+prep-devinfo
+
+IFS='
+'
+
+if [ -n "$REPEATCOUNT" ]; then
+    REPEAT="-c $REPEATCOUNT"
+fi
+
+for line in $(sh -c "netdiscover -t $TIMEOUT -k -m -i $INTERFACE -r $IPRANGE $REPEAT $SLEEPREQ 2>/dev/null" | grep -E '[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?.[0-9]([0-9]?[0-9])?'); do
+    unset IFS
+    IP=$(echo $line | tr -s \  |  cut -f1 -d\  )
+    MAC=$(echo $line | tr -s \  |  cut -f2 -d\  )
+
+    if [ -n "$PORTS" ]; then
+       for port in $PORTS; do
+           
+           if [ "$XIP" = "TRUE" ]; then
+               XIP_PORT="-x $port"
+           fi
+           for sip_device in $(smap -p $port $IP </dev/null | grep -E -v 'host.? scanned' | grep 'SIP enabled' | cut -f1 -d:  ); do
+               if [ -x "$(which httping)" ]; then
+                   if httping -G -q -o 401,200 -c 2 -h $sip_device; then
+                       echo "$sip_device"" | ""$($MACTODEV $XIP_PORT $MAC)"" | ""http://$sip_device/"
+                       continue
+                   fi
+               fi
+               echo "$sip_device"" | ""$(MACTODEV $XIP_PORT $MAC)"" | "" - "
+           done
+       done
+    else
+       for sip_device in $(smap $IP </dev/null | grep -E -v 'host.? scanned' | grep 'SIP enabled' | cut -f1 -d:  ); do
+           if [ -x "$(which httping)" ]; then
+               if httping -G -q -o 401,200 -c 2 -h $sip_device; then
+                   echo "$sip_device"" | ""$($MACTODEV $MAC $XIP_PORT)"" | ""http://$sip_device/"
+                   continue
+               fi
+           fi
+           echo "$sip_device"" | ""$($MACTODEV $MAC $XIP_PORT)"" | "" - "
+       done
+    fi
+    IFS='
+'
+done
+
+unset IFS