Hi all... Or I'm smoking too much or ifstatus and its usage are really broken...
First point: the -v flag makes the thing verbose, but it also inhibits the return value to be correct. See the (simplified) logic in handle(): if not present return -1 r = 0 if verbose try methods and print message // NOTE: r is not changed else try methods switch status up: r = 1 down: r = 2 other: r = -1 return r; So, if verbose is set, the return value r is not set, it is just 0 !!!. Second point: logic in main, when called like ifstatus eth0 (I have not looked into the multiple interfaces part): r = handle() if (r<0) return 1; else return r+1; return 0; So, lets get the possible cases: - if is not present: r = -1; as (r<0) return 1: - if is present but does not support MII r = -1 (as previous ??, see the other: part in handle()) as (r<0) return 1; - if is down r = 2 as (r>0) return 3; - if is up r = 1 as (r>0) return 2; Now, look into network-functions::check_link_down (correctly indented, btw, to see something). Comments in the code... check_link_down() { ... if [ -z "${MII_NOT_SUPPORTED}" -a -x /sbin/ifstatus ]; then for (( try=0; try<10; try++ )); do /sbin/ifstatus $1 > /dev/null 2>&1 case $? in 2) return 1;; # up, so return FALSE 3) return 0;; # down so return TRUE # How about the no-MII supported case ?? # 1) return 1;; # unsupported, so return it is up (FALSE) # but how you ditinguish 'that if does not exist, so suppose is down' # from 'that if does not support MII so suppose is up' esac sleep 1 done return 0 # return TRUE, is down fi return 1 # return false, is up } Solution: - set 4 return values for ifstatus: 1 is not present 2 is mii not supported 3 is down 4 is up - logic for check_link_down, getting rid of MII_NOT_SUPPORTED (why is the loop needed ?) if [ -x /sbin/ifstatus ]; then /sbin/ifstatus $1 > /dev/null 2>&1 case $? in 1) return 0;; # not present, so TRUE (down) 2) return 1;; # not supported, so FALSE (up) 3) return 0;; # TRUE (down) 4) return 1;; # FALSE (up) esac fi return 1 # return false, is up ??? Modified ifstatus.c and patch for network-functions attached. Work for me (TM). TIA -- J.A. Magallon <[EMAIL PROTECTED]> \ Software is like sex: werewolf.able.es \ It's better when it's free Mandrake Linux release 9.1 (Cooker) for i586 Linux 2.4.21-pre3-jam2 (gcc 3.2.1 (Mandrake Linux 9.1 3.2.1-2mdk))
ifstatus.c.bz2
Description: application/bzip
nf.diff.bz2
Description: application/bzip