[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