r1199 + updated comment on the protocol
authorDenis Ovsienko <infrastation@yandex.ru>
Fri, 12 Oct 2007 16:41:05 +0000 (16:41 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Fri, 12 Oct 2007 16:41:05 +0000 (16:41 +0000)
+ initial preparations for MAC tbale listing

gateways/switchvlans/cisco.connector
gateways/switchvlans/main

index 89fa461..83f7b63 100755 (executable)
@@ -1,11 +1,14 @@
 #!/bin/sh
 
-[ $# = 4 ] || exit 1
+[ $# = 7 ] || exit 1
 
 ENDPOINT=$1
-COMMAND=$2
-FILE1=$3
-FILE2=$4
+HW=$2
+SW=$3
+COMMAND=$4
+FILE1=$5
+FILE2=$6
+FILE3=$7
 
 prepare_connect_commands()
 {
@@ -51,6 +54,7 @@ prepare_fetch_commands()
 {
        printf 'term len 0\nshow vlan brief\nquit\n' >> $CMDS1
        printf 'term len 0\nshow int status\nquit\n' >> $CMDS2
+       printf 'term len 0\nshow mac-address-table dynamic\nquit\n' >> $CMDS3
 }
 
 prepare_push_commands()
@@ -79,8 +83,11 @@ do_fetch()
                exit 4
        fi
        nc $ENDPOINT 23 < $CMDS2 > "$OUT2"
+       nc $ENDPOINT 23 < $CMDS3 > "$OUT3"
        cat "$OUT1" | fgrep ' active    ' | sed -E 's/^([[:digit:]]+)[[:space:]]+(.+)[[:space:]]+ active    (.*)/\1=\2/;s/[[:space:]]+$//' > $FILE1
        cat "$OUT2" | egrep '^(Et|Fa|Gi|Te)' | sed -E 's/ +(notconnect|connected) +/=/;s/=(trunk|([0-9]+)) .*$/=\1/' > $FILE2
+       # FIXME
+#      cat "$OUT3" > "$FILE3" 
 }
 
 do_push()
@@ -92,21 +99,26 @@ remove_tempfiles()
 {
        [ -f "$CMDS1" ] && rm -f "$CMDS1"
        [ -f "$CMDS2" ] && rm -f "$CMDS2"
+       [ -f "$CMDS3" ] && rm -f "$CMDS3"
        [ -f "$OUT1" ] && rm -f "$OUT1"
        [ -f "$OUT2" ] && rm -f "$OUT2"
+       [ -f "$OUT3" ] && rm -f "$OUT3"
 }
 
 create_tempfiles()
 {
        # This one is for VLAN list.
        CMDS1=`mktemp /tmp/cisco.connector.XXXX`
-       # And this one holds ports list.
+       # And this one holds ports list...
        CMDS2=`mktemp /tmp/cisco.connector.XXXX`
-       # The following are two buffers to hold the whole switch output
+       # ...and one more for MAC address table
+       CMDS3=`mktemp /tmp/cisco.connector.XXXX`
+       # The following are buffers to hold the whole switch output
        # before filtering.
        OUT1=`mktemp /tmp/cisco.connector.XXXX`
        OUT2=`mktemp /tmp/cisco.connector.XXXX`
-       [ -f "$CMDS1" -a -f "$CMDS2" -a -f "$OUT1" -a -f "$OUT2" ] && return
+       OUT3=`mktemp /tmp/cisco.connector.XXXX`
+       [ -f "$CMDS1" -a -f "$CMDS2" -a -f "$CMDS3" -a -f "$OUT1" -a -f "$OUT2" -a -f "$OUT3" ] && return
        echo "E!connector cannot create tempfiles" >> "$FILE2"
        remove_tempfiles
        exit 5
index a5b8265..f537333 100755 (executable)
@@ -3,13 +3,22 @@
 # This is a RackTables gateway for changing switch ports membership
 # across VLANs. It works accordingly to the gateway protocol described
 # in gateways.php and accepts the following commands on its stdin:
+#
+# * connect: connect to a switch, fetch all necessary data, store and
+#   disconnect
+#
 # * listvlans: list all VLANs found on the switch, propably filtering
 # out those administratively prohibited. Only the VLANs from this
 # list will be allowed as new destination for 'set' command.
+#
 # * listports: list all ports on the switch and their current status.
-# Untagged (switchport mode access) ports will be shown with their
-# VLAN ID and tagged ports will be shown as 'trunk' regardless of
-# how many VLANs they are members of.
+#   Untagged (switchport mode access) ports will be shown with their
+#   VLAN ID and tagged ports will be shown as 'trunk' regardless of
+#   how many VLANs they are members of.
+#
+# * listmacs: output unsorted list of all dynamically learned MAC
+#   addresses present on the switch
+#
 
 endpoint=
 hw=
@@ -117,9 +126,15 @@ do_connect()
                rm -f "$PORTINFO"
                return
        fi
+       MACINFO=`mktemp /tmp/racktables.XXXX`
+       if ! [ -f "$MACINFO" ]; then
+               echo 'ERR!could not create MACinfo tmpfile'
+               rm -f "$PORTINFO" "$VLANINFO"
+               return
+       fi
 
        # get the data
-       "$MYDIR/$handler.connector" $endpoint fetch "$VLANINFO" "$PORTINFO"
+       "$MYDIR/$handler.connector" $endpoint $hw $sw fetch "$VLANINFO" "$PORTINFO" "$MACINFO"
        ret=$?
        if [ $ret = 0 ]; then
                CONNECTED=1
@@ -185,7 +200,7 @@ do_set()
        nq=`egrep -c '^.' "$REQUESTS"`
        if [ "$nq" -ge 1 ]; then
                # Go!
-               "$MYDIR/$handler.connector" $endpoint push "$REQUESTS" "$REPLIES"
+               "$MYDIR/$handler.connector" $endpoint $hw $sw push "$REQUESTS" "$REPLIES" "$MACINFO"
                local ret=$?
 
                if [ $ret != 0 ]; then
@@ -241,5 +256,5 @@ while read cmd args; do
        esac
 done
 
-rm -f "$PORTINFO" "$VLANINFO"
+rm -f "$PORTINFO" "$VLANINFO" "$MACINFO"
 exit 0