net_rt_iflist.c 734 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. /* include net_rt_iflist */
  2. #include "unproute.h"
  3. char *
  4. net_rt_iflist(int family, int flags, size_t *lenp)
  5. {
  6. int mib[6];
  7. char *buf;
  8. mib[0] = CTL_NET;
  9. mib[1] = AF_ROUTE;
  10. mib[2] = 0;
  11. mib[3] = family; /* only addresses of this family */
  12. mib[4] = NET_RT_IFLIST;
  13. mib[5] = flags; /* interface index or 0 */
  14. if (sysctl(mib, 6, NULL, lenp, NULL, 0) < 0)
  15. return(NULL);
  16. if ( (buf = malloc(*lenp)) == NULL)
  17. return(NULL);
  18. if (sysctl(mib, 6, buf, lenp, NULL, 0) < 0) {
  19. free(buf);
  20. return(NULL);
  21. }
  22. return(buf);
  23. }
  24. /* end net_rt_iflist */
  25. char *
  26. Net_rt_iflist(int family, int flags, size_t *lenp)
  27. {
  28. char *ptr;
  29. if ( (ptr = net_rt_iflist(family, flags, lenp)) == NULL)
  30. err_sys("net_rt_iflist error");
  31. return(ptr);
  32. }