
BUGS=0
echo
export NR_THREADS=`cat /proc/sys/net/tux/threads`
echo "checking TUX bindings, $NR_THREADS TUX threads configured..."
echo

THREAD=0

while [ "$THREAD" != "$NR_THREADS" ]; do

export THREAD
export ETHDEV="eth$THREAD"

export IRQ=`ifconfig $ETHDEV 2>/dev/null | grep "Interrupt:" | cut -d: -f2 | cut -d' ' -f1`
export INET=`ifconfig $ETHDEV 2>/dev/null | grep "inet addr:" | cut -d: -f2 | cut -d' ' -f1`

export AFFINITY=`cat /proc/irq/$IRQ/smp_affinity 2>/dev/null`
export LISTEN=`cat /proc/net/tux/$THREAD/listen/0 2>/dev/null`

LISTEN0=`echo $LISTEN | cut -c1-2`
LISTEN1=`echo $LISTEN | cut -c3-4`
LISTEN2=`echo $LISTEN | cut -c5-6`
LISTEN3=`echo $LISTEN | cut -c7-8`
INET0=`echo $INET | cut -d\. -f1`
INET1=`echo $INET | cut -d\. -f2`
INET2=`echo $INET | cut -d\. -f3`
INET3=`echo $INET | cut -d\. -f4`
# echo $LISTEN0 $LISTEN1 $LISTEN2 $LISTEN3
# echo $INET0 $INET1 $INET2 $INET3

INET0_HEX=`echo x | awk -- '{ printf("%02x", '"$INET0)"'; }' 2>/dev/null`
INET1_HEX=`echo x | awk -- '{ printf("%02x", '"$INET1)"'; }' 2>/dev/null`
INET2_HEX=`echo x | awk -- '{ printf("%02x", '"$INET2)"'; }' 2>/dev/null`
INET3_HEX=`echo x | awk -- '{ printf("%02x", '"$INET3)"'; }' 2>/dev/null`

export INET_HEX=$INET0_HEX$INET1_HEX$INET2_HEX$INET3_HEX
# echo $INET_HEX

CPU_MASK=`echo x | awk -- '{ printf("%08x\n", 2**'"$THREAD"'); }'`
#echo $THREAD: $CPU_MASK

if [ "$INET_HEX" != "$LISTEN" ]; then
echo " eth$THREAD INTERFACE->TUX-SOCKET binding inefficiency: listen address $LISTEN != interface address $INET!"
BUGS=$[$BUGS+1]
fi
if [ "$AFFINITY" != "$CPU_MASK" ]; then
echo " eth$THREAD IRQ->CPU binding inefficiency: IRQ {$IRQ} mask {$AFFINITY} != TUX thread $THREAD affinity {$CPU_MASK}!"
BUGS=$[$BUGS+1]
fi
 echo "eth$THREAD, irq: $IRQ, affinity: $AFFINITY, inet: $INET, listen: $LISTEN"

THREAD=$[$THREAD+1]
done

echo
if [ "$BUGS" = "0" ]; then
 echo "all TUX bindings are set up correctly! Congratulations! :-)"
else
 echo "TUX binding inefficiencies left: $BUGS, performance might be suboptimal!"
fi
echo

