[Linux-Biella] stato dell'interfaccia
Paul TT
paultt a bilug.linux.it
Ven 27 Apr 2007 11:02:41 CEST
Emanuele Aina wrote:
>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 :)
>
>
>
si', infatti, a quel punto uso ioctl, che faccio anche prima :P
cosi' e' come la strncmp, solo piu' incasinato :)))))
--
Non mi piacciono i tipi che mi hanno ucciso.
Maggiori informazioni sulla lista
Linux