/* socket-flags Copyright 2009 TJ Licensed on the terms of the GNU GPL version 3 */ #include #include #include #include #include #include /* from /usr/include/net/if.h */ const char *flag_names[] = { "NA", "IFF_UP", "IFF_BROADCAST", "IFF_DEBUG", "IFF_LOOPBACK", "IFF_POINTTOPOINT", "IFF_NOTRAILERS", "IFF_RUNNING", "IFF_NOARP", "IFF_PROMISC", "IFF_ALLMULTI", "IFF_MASTER", "IFF_SLAVE", "IFF_MULTICAST", "IFF_PORTSEL", "IFF_AUTOMEDIA", "IFF_DYNAMIC", }; int main(int argc, char **argv, char **env) { if (argv[1]) { int skfd = socket (AF_INET, SOCK_DGRAM, 0); if (skfd) { struct ifreq ifr; strncpy (ifr.ifr_name, argv[1], sizeof ifr.ifr_name); if (!ioctl (skfd, SIOCGIFFLAGS, &ifr)) { int i; const short int flags = ifr.ifr_flags; printf("%s SIOCGIFFLAGS 0x%x (", argv[1], flags); for (i=0; i < 15; i++) { if (flags & (1 << i)) printf(" %s (0x%x)", flag_names[i+1], 1 << i); } printf(")\n"); } } close (skfd); } else { printf("Usage: %s \n", argv[0]); } }