Lines Matching refs:sa

340 #define	SINIFSCOPE(sa)	((struct sockaddr_inifscope *)(size_t)(sa))
341 #define SIN6IFSCOPE(sa) SIN6(sa)
343 #define ASSERT_SINIFSCOPE(sa) { \
344 if ((sa)->sa_family != AF_INET || \
345 (sa)->sa_len < sizeof (struct sockaddr_in)) \
346 panic("%s: bad sockaddr_in %p\n", __func__, sa); \
349 #define ASSERT_SIN6IFSCOPE(sa) { \
350 if ((sa)->sa_family != AF_INET6 || \
351 (sa)->sa_len < sizeof (struct sockaddr_in6)) \
352 panic("%s: bad sockaddr_in %p\n", __func__, sa); \
383 #define INET_DEFAULT(sa) \
384 ((sa)->sa_family == AF_INET && SIN(sa)->sin_addr.s_addr == 0)
386 #define INET6_DEFAULT(sa) \
387 ((sa)->sa_family == AF_INET6 && \
388 IN6_IS_ADDR_UNSPECIFIED(&SIN6(sa)->sin6_addr))
390 #define SA_DEFAULT(sa) (INET_DEFAULT(sa) || INET6_DEFAULT(sa))
438 sin_set_ifscope(struct sockaddr *sa, unsigned int ifscope)
441 ASSERT_SINIFSCOPE(sa);
443 SINIFSCOPE(sa)->sin_scope_id = ifscope;
450 sin6_set_ifscope(struct sockaddr *sa, unsigned int ifscope)
453 ASSERT_SIN6IFSCOPE(sa);
455 SIN6IFSCOPE(sa)->sin6_scope_id = ifscope;
462 sin_get_ifscope(struct sockaddr *sa)
465 ASSERT_SINIFSCOPE(sa);
467 return (SINIFSCOPE(sa)->sin_scope_id);
474 sin6_get_ifscope(struct sockaddr *sa)
477 ASSERT_SIN6IFSCOPE(sa);
479 return (SIN6IFSCOPE(sa)->sin6_scope_id);
483 sin6_set_embedded_ifscope(struct sockaddr *sa, unsigned int ifscope)
486 ASSERT_SIN6IFSCOPE(sa);
487 VERIFY(IN6_IS_SCOPE_EMBED(&(SIN6(sa)->sin6_addr)));
489 SIN6(sa)->sin6_addr.s6_addr16[1] = htons(ifscope);
493 sin6_get_embedded_ifscope(struct sockaddr *sa)
496 ASSERT_SIN6IFSCOPE(sa);
498 return (ntohs(SIN6(sa)->sin6_addr.s6_addr16[1]));
599 sa_trim(struct sockaddr *sa, int skip)
601 caddr_t cp, base = (caddr_t)sa + skip;
603 if (sa->sa_len <= skip)
604 return (sa);
606 for (cp = base + (sa->sa_len - skip); cp > base && cp[-1] == 0;)
609 sa->sa_len = (cp - base) + skip;
610 if (sa->sa_len < skip) {
613 sa->sa_len, skip);
615 } else if (sa->sa_len == skip) {
617 sa->sa_len = 0;
620 return (sa);
632 rtm_scrub_ifscope(int type, int idx, struct sockaddr *hint, struct sockaddr *sa,
635 struct sockaddr *ret = sa;
643 if (sa->sa_family == AF_INET &&
644 SINIFSCOPE(sa)->sin_scope_id != IFSCOPE_NONE) {
645 ret = sa_copy(sa, ss, NULL);
646 } else if (sa->sa_family == AF_INET6 &&
647 SIN6IFSCOPE(sa)->sin6_scope_id != IFSCOPE_NONE) {
648 ret = sa_copy(sa, ss, NULL);
676 if (sa->sa_len > skip && sa->sa_len <= sizeof (*ss)) {
678 bcopy(sa, ss, sa->sa_len);