Verifique o link simbólico /sys/class/net/<device_name>
. Se ele apontar para /sys/devices/virtual/
, então é uma interface virtual. Se ele apontar para um dispositivo "real" (por exemplo, em /sys/devices/pci0000:00/
), então não é.
Editar:
Do código, você pode usar readlink
para verificar se o dispositivo é virtual. Aqui está um código de exemplo muito fictício para fazer isso:
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv) {
char theLink[128];
char thePath[128];
strcpy(thePath,"/sys/class/net/");
memset(theLink,0,128);
if (argc>1) {
strcat(thePath,argv[1]);
} else {
printf("Gimme device\n");
return 1;
}
if (readlink(thePath, theLink, 127)==-1) {
perror(argv[1]);
} else {
if (strstr(theLink,"/virtual")) {
printf("%s is a virtual device\n",argv[1]);
} else {
printf("%s is a physical device\n",argv[1]);
}
}
}