get_rtaddrs.c 608 B

1234567891011121314151617181920212223242526272829
  1. #include "unproute.h"
  2. /*
  3. * Round up 'a' to next multiple of 'size', which must be a power of 2
  4. */
  5. #define ROUNDUP(a, size) (((a) & ((size)-1)) ? (1 + ((a) | ((size)-1))) : (a))
  6. /*
  7. * Step to next socket address structure;
  8. * if sa_len is 0, assume it is sizeof(u_long).
  9. */
  10. #define NEXT_SA(ap) ap = (SA *) \
  11. ((caddr_t) ap + (ap->sa_len ? ROUNDUP(ap->sa_len, sizeof (u_long)) : \
  12. sizeof(u_long)))
  13. void
  14. get_rtaddrs(int addrs, SA *sa, SA **rti_info)
  15. {
  16. int i;
  17. for (i = 0; i < RTAX_MAX; i++) {
  18. if (addrs & (1 << i)) {
  19. rti_info[i] = sa;
  20. NEXT_SA(sa);
  21. } else
  22. rti_info[i] = NULL;
  23. }
  24. }