[Linux-Biella] stato dell'interfaccia
Emanuele Aina
faina.mail a tiscali.it
Mar 17 Apr 2007 12:04:36 CEST
Paul TT trovò:
>> /sys/class/net/ethX/flags
>> sono i flag dell'interfaccia
>>
>> piu' pulito sarebbe una roba del genere:
>> skfd = get_socket_for_af(AF_INET);
>> strcpy(ifr.ifr_name, ifname);
>> if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
>> return (-1);
>> ife->flags = ifr.ifr_flags;
>> if (ife->flags & IFF_UP)
>> printf(_("UP "));
>>
>>
>> da ifconfig sources.....
>
> grassssie, Paul
> ma io sono decisamente tanto ma tanto piu' pigro...
> allora ho guardato come stanno i flag quando la mia eth e' up o down,
> nel file flags suddetto
> se e' up c'e' 0x1003, se down 0x1002, un fantastico strncmp e fatto ;-P
> lol
A parte che usare sysfs ti lega a kernel 2.6 con sysfs abilitato e
montato (cosa accettabile), eviterei la strncmp perché se hai altri flag
impostati fa cavolate.
Meglio usare sscanf sulla stringa dei flag per leggere il valore
esadecimale ottenendo un intero su cui guardi il bit meno significativo
con un and bit a bit.
Qualcosa del genere:
#define UP_MASK 0x1
FILE flags_file;
unsigned int flags;
flags_file = fopen("/sys/class/net/FOOBAR/flags", "r");
fscanf(flags_file, "%x", &flags);
if (flags & UP_MASK)
printf(_("UP "));
Consiglio comunque caldamente di seguire l'esempio di ifconfig, che è
decisamente più veloce (ioctl diretta invece di passare attraverso il
VFS) e portabile (probabilmente funziona anche con kernel 1.x :)
--
Buongiorno.
Complimenti per l'ottima scelta.
Maggiori informazioni sulla lista
Linux