prifinfo.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "unpifi.h"
  2. int
  3. main(int argc, char **argv)
  4. {
  5. struct ifi_info *ifi, *ifihead;
  6. struct sockaddr *sa;
  7. u_char *ptr;
  8. int i, family, doaliases;
  9. if (argc != 3)
  10. err_quit("usage: prifinfo <inet4|inet6> <doaliases>");
  11. if (strcmp(argv[1], "inet4") == 0)
  12. family = AF_INET;
  13. #ifdef AF_INET6
  14. else if (strcmp(argv[1], "inet6") == 0)
  15. family = AF_INET6;
  16. #endif
  17. else
  18. err_quit("invalid <address-family>");
  19. doaliases = atoi(argv[2]);
  20. for (ifihead = ifi = Get_ifi_info(family, doaliases);
  21. ifi != NULL; ifi = ifi->ifi_next) {
  22. printf("%s: <", ifi->ifi_name);
  23. if (ifi->ifi_flags & IFF_UP) printf("UP ");
  24. if (ifi->ifi_flags & IFF_BROADCAST) printf("BCAST ");
  25. if (ifi->ifi_flags & IFF_MULTICAST) printf("MCAST ");
  26. if (ifi->ifi_flags & IFF_LOOPBACK) printf("LOOP ");
  27. if (ifi->ifi_flags & IFF_POINTOPOINT) printf("P2P ");
  28. printf(">\n");
  29. if ( (i = ifi->ifi_hlen) > 0) {
  30. ptr = ifi->ifi_haddr;
  31. do {
  32. printf("%s%x", (i == ifi->ifi_hlen) ? " " : ":", *ptr++);
  33. } while (--i > 0);
  34. printf("\n");
  35. }
  36. if ( (sa = ifi->ifi_addr) != NULL)
  37. printf(" IP addr: %s\n", Sock_ntop(sa, sa->sa_len));
  38. if ( (sa = ifi->ifi_brdaddr) != NULL)
  39. printf(" broadcast addr: %s\n", Sock_ntop(sa, sa->sa_len));
  40. if ( (sa = ifi->ifi_dstaddr) != NULL)
  41. printf(" destination addr: %s\n", Sock_ntop(sa, sa->sa_len));
  42. }
  43. free_ifi_info(ifihead);
  44. exit(0);
  45. }