[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