prifinfo.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 IPv6
  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_index != 0)
  24. printf("(%d) ", ifi->ifi_index);
  25. printf("<");
  26. /* *INDENT-OFF* */
  27. if (ifi->ifi_flags & IFF_UP) printf("UP ");
  28. if (ifi->ifi_flags & IFF_BROADCAST) printf("BCAST ");
  29. if (ifi->ifi_flags & IFF_MULTICAST) printf("MCAST ");
  30. if (ifi->ifi_flags & IFF_LOOPBACK) printf("LOOP ");
  31. if (ifi->ifi_flags & IFF_POINTOPOINT) printf("P2P ");
  32. printf(">\n");
  33. /* *INDENT-ON* */
  34. if ( (i = ifi->ifi_hlen) > 0) {
  35. ptr = ifi->ifi_haddr;
  36. do {
  37. printf("%s%x", (i == ifi->ifi_hlen) ? " " : ":", *ptr++);
  38. } while (--i > 0);
  39. printf("\n");
  40. }
  41. if (ifi->ifi_mtu != 0)
  42. printf(" MTU: %d\n", ifi->ifi_mtu);
  43. if ( (sa = ifi->ifi_addr) != NULL)
  44. printf(" IP addr: %s\n",
  45. Sock_ntop_host(sa, sizeof(*sa)));
  46. if ( (sa = ifi->ifi_brdaddr) != NULL)
  47. printf(" broadcast addr: %s\n",
  48. Sock_ntop_host(sa, sizeof(*sa)));
  49. if ( (sa = ifi->ifi_dstaddr) != NULL)
  50. printf(" destination addr: %s\n",
  51. Sock_ntop_host(sa, sizeof(*sa)));
  52. }
  53. free_ifi_info(ifihead);
  54. exit(0);
  55. }