Lines Matching +full:data +full:- +full:addr
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
90 bits--; in bits2mask4()
104 for (ret = 32, tst = 1; tst; ret--, tst <<= 1) in mask42bits()
112 return tst ? -1 : ret; in mask42bits()
132 bits--; in bits2mask6()
170 if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr) ||
171 IN6_IS_ADDR_MC_LINKLOCAL(&sin6->sin6_addr)) {
172 sin6->sin6_scope_id =
173 ntohs(*(u_short *)&sin6->sin6_addr.s6_addr[2]);
174 *(u_short *)&sin6->sin6_addr.s6_addr[2] = 0;
181 ncpaddr_init(struct ncpaddr *addr) in ncpaddr_init() argument
183 addr->ncpaddr_family = AF_UNSPEC; in ncpaddr_init()
187 ncpaddr_isset(const struct ncpaddr *addr) in ncpaddr_isset() argument
189 return addr->ncpaddr_family != AF_UNSPEC; in ncpaddr_isset()
193 ncpaddr_isdefault(const struct ncpaddr *addr) in ncpaddr_isdefault() argument
195 switch (addr->ncpaddr_family) { in ncpaddr_isdefault()
197 if (addr->ncpaddr_ip4addr.s_addr == INADDR_ANY) in ncpaddr_isdefault()
203 if (IN6_IS_ADDR_UNSPECIFIED(&addr->ncpaddr_ip6addr)) in ncpaddr_isdefault()
213 ncpaddr_equal(const struct ncpaddr *addr, const struct ncpaddr *cmp) in ncpaddr_equal() argument
215 if (addr->ncpaddr_family != cmp->ncpaddr_family) in ncpaddr_equal()
218 switch (addr->ncpaddr_family) { in ncpaddr_equal()
220 return addr->ncpaddr_ip4addr.s_addr == cmp->ncpaddr_ip4addr.s_addr; in ncpaddr_equal()
224 return !memcmp(&addr->ncpaddr_ip6addr, &cmp->ncpaddr_ip6addr, in ncpaddr_equal()
225 sizeof addr->ncpaddr_ip6addr); in ncpaddr_equal()
236 ncpaddr_copy(struct ncpaddr *addr, const struct ncpaddr *from) in ncpaddr_copy() argument
238 switch (from->ncpaddr_family) { in ncpaddr_copy()
240 addr->ncpaddr_family = AF_INET; in ncpaddr_copy()
241 addr->ncpaddr_ip4addr = from->ncpaddr_ip4addr; in ncpaddr_copy()
245 addr->ncpaddr_family = AF_INET6; in ncpaddr_copy()
246 addr->ncpaddr_ip6addr = from->ncpaddr_ip6addr; in ncpaddr_copy()
250 addr->ncpaddr_family = AF_UNSPEC; in ncpaddr_copy()
255 ncpaddr_setip4addr(struct ncpaddr *addr, u_int32_t ip) in ncpaddr_setip4addr() argument
257 addr->ncpaddr_family = AF_INET; in ncpaddr_setip4addr()
258 addr->ncpaddr_ip4addr.s_addr = ip; in ncpaddr_setip4addr()
262 ncpaddr_getip4addr(const struct ncpaddr *addr, u_int32_t *ip) in ncpaddr_getip4addr() argument
264 if (addr->ncpaddr_family != AF_INET) in ncpaddr_getip4addr()
266 *ip = addr->ncpaddr_ip4addr.s_addr; in ncpaddr_getip4addr()
271 ncpaddr_setip4(struct ncpaddr *addr, struct in_addr ip) in ncpaddr_setip4() argument
273 addr->ncpaddr_family = AF_INET; in ncpaddr_setip4()
274 addr->ncpaddr_ip4addr = ip; in ncpaddr_setip4()
278 ncpaddr_getip4(const struct ncpaddr *addr, struct in_addr *ip) in ncpaddr_getip4() argument
280 if (addr->ncpaddr_family != AF_INET) in ncpaddr_getip4()
282 *ip = addr->ncpaddr_ip4addr; in ncpaddr_getip4()
288 ncpaddr_setip6(struct ncpaddr *addr, const struct in6_addr *ip6) in ncpaddr_setip6() argument
290 addr->ncpaddr_family = AF_INET6; in ncpaddr_setip6()
291 addr->ncpaddr_ip6addr = *ip6; in ncpaddr_setip6()
295 ncpaddr_getip6(const struct ncpaddr *addr, struct in6_addr *ip6) in ncpaddr_getip6() argument
297 if (addr->ncpaddr_family != AF_INET6) in ncpaddr_getip6()
299 *ip6 = addr->ncpaddr_ip6addr; in ncpaddr_getip6()
305 ncpaddr_getsa(const struct ncpaddr *addr, struct sockaddr_storage *host) in ncpaddr_getsa() argument
314 switch (addr->ncpaddr_family) { in ncpaddr_getsa()
316 host4->sin_family = AF_INET; in ncpaddr_getsa()
317 host4->sin_len = sizeof(*host4); in ncpaddr_getsa()
318 host4->sin_addr = addr->ncpaddr_ip4addr; in ncpaddr_getsa()
323 host6->sin6_family = AF_INET6; in ncpaddr_getsa()
324 host6->sin6_len = sizeof(*host6); in ncpaddr_getsa()
325 host6->sin6_addr = addr->ncpaddr_ip6addr; in ncpaddr_getsa()
330 host->ss_family = AF_UNSPEC; in ncpaddr_getsa()
336 ncpaddr_setsa(struct ncpaddr *addr, const struct sockaddr *host) in ncpaddr_setsa() argument
343 switch (host->sa_family) { in ncpaddr_setsa()
345 addr->ncpaddr_family = AF_INET; in ncpaddr_setsa()
346 addr->ncpaddr_ip4addr = host4->sin_addr; in ncpaddr_setsa()
351 if (IN6_IS_ADDR_V4MAPPED(&host6->sin6_addr)) { in ncpaddr_setsa()
352 addr->ncpaddr_family = AF_INET; in ncpaddr_setsa()
353 addr->ncpaddr_ip4addr.s_addr = in ncpaddr_setsa()
354 *(const u_int32_t *)(host6->sin6_addr.s6_addr + 12); in ncpaddr_setsa()
356 addr->ncpaddr_family = AF_INET6; in ncpaddr_setsa()
357 addr->ncpaddr_ip6addr = host6->sin6_addr; in ncpaddr_setsa()
363 addr->ncpaddr_family = AF_UNSPEC; in ncpaddr_setsa()
368 ncpaddr_ntowa(const struct ncpaddr *addr) in ncpaddr_ntowa() argument
375 switch (addr->ncpaddr_family) { in ncpaddr_ntowa()
377 snprintf(res, sizeof res, "%s", inet_ntoa(addr->ncpaddr_ip4addr)); in ncpaddr_ntowa()
385 sin6.sin6_addr = addr->ncpaddr_ip6addr; in ncpaddr_ntowa()
402 ncpaddr_ntoa(const struct ncpaddr *addr) in ncpaddr_ntoa() argument
404 return ncpaddr_ntowa(addr); in ncpaddr_ntoa()
409 ncpaddr_aton(struct ncpaddr *addr, struct ncp *ncp, const char *data) in ncpaddr_aton() argument
413 if (!ncprange_aton(&range, ncp, data)) in ncpaddr_aton()
418 log_Printf(LogWARN, "ncpaddr_aton: %s: Only 32 bits allowed\n", data); in ncpaddr_aton()
425 log_Printf(LogWARN, "ncpaddr_aton: %s: Only 128 bits allowed\n", data); in ncpaddr_aton()
432 addr->ncpaddr_family = range.ncprange_family; in ncpaddr_aton()
433 addr->ncpaddr_ip4addr = range.ncprange_ip4addr; in ncpaddr_aton()
438 addr->ncpaddr_family = range.ncprange_family; in ncpaddr_aton()
439 addr->ncpaddr_ip6addr = range.ncprange_ip6addr; in ncpaddr_aton()
450 range->ncprange_family = AF_UNSPEC; in ncprange_init()
456 return range->ncprange_family != AF_UNSPEC; in ncprange_isset()
462 if (range->ncprange_family != cmp->ncprange_family) in ncprange_equal()
465 switch (range->ncprange_family) { in ncprange_equal()
467 if (range->ncprange_ip4addr.s_addr != cmp->ncprange_ip4addr.s_addr) in ncprange_equal()
469 return range->ncprange_ip4mask.s_addr == cmp->ncprange_ip4mask.s_addr; in ncprange_equal()
473 if (range->ncprange_ip6width != cmp->ncprange_ip6width) in ncprange_equal()
475 return !memcmp(&range->ncprange_ip6addr, &cmp->ncprange_ip6addr, in ncprange_equal()
476 sizeof range->ncprange_ip6addr); in ncprange_equal()
489 switch (range->ncprange_family) { in ncprange_isdefault()
491 if (range->ncprange_ip4addr.s_addr == INADDR_ANY) in ncprange_isdefault()
497 if (range->ncprange_ip6width == 0 && in ncprange_isdefault()
498 IN6_IS_ADDR_UNSPECIFIED(&range->ncprange_ip6addr)) in ncprange_isdefault()
511 range->ncprange_family = af; in ncprange_setdefault()
515 ncprange_contains(const struct ncprange *range, const struct ncpaddr *addr) in ncprange_contains() argument
523 if (range->ncprange_family != addr->ncpaddr_family) in ncprange_contains()
526 switch (range->ncprange_family) { in ncprange_contains()
528 return !((addr->ncpaddr_ip4addr.s_addr ^ range->ncprange_ip4addr.s_addr) & in ncprange_contains()
529 range->ncprange_ip4mask.s_addr); in ncprange_contains()
533 rangep = (const u_char *)range->ncprange_ip6addr.s6_addr; in ncprange_contains()
534 addrp = (const u_char *)addr->ncpaddr_ip6addr.s6_addr; in ncprange_contains()
536 for (bits = range->ncprange_ip6width; bits > 0; bits -= 8) in ncprange_contains()
537 if ((*addrp++ ^ *rangep++) & masks[bits > 7 ? 7 : bits - 1]) in ncprange_contains()
548 ncprange_containsip4(const struct ncprange *range, struct in_addr addr) in ncprange_containsip4() argument
550 switch (range->ncprange_family) { in ncprange_containsip4()
552 return !((addr.s_addr ^ range->ncprange_ip4addr.s_addr) & in ncprange_containsip4()
553 range->ncprange_ip4mask.s_addr); in ncprange_containsip4()
562 switch (from->ncprange_family) { in ncprange_copy()
564 range->ncprange_family = AF_INET; in ncprange_copy()
565 range->ncprange_ip4addr = from->ncprange_ip4addr; in ncprange_copy()
566 range->ncprange_ip4mask = from->ncprange_ip4mask; in ncprange_copy()
567 range->ncprange_ip4width = from->ncprange_ip4width; in ncprange_copy()
572 range->ncprange_family = AF_INET6; in ncprange_copy()
573 range->ncprange_ip6addr = from->ncprange_ip6addr; in ncprange_copy()
574 range->ncprange_ip6width = from->ncprange_ip6width; in ncprange_copy()
579 range->ncprange_family = AF_UNSPEC; in ncprange_copy()
584 ncprange_set(struct ncprange *range, const struct ncpaddr *addr, int width) in ncprange_set() argument
586 ncprange_sethost(range, addr); in ncprange_set()
593 switch (from->ncpaddr_family) { in ncprange_sethost()
595 range->ncprange_family = AF_INET; in ncprange_sethost()
596 range->ncprange_ip4addr = from->ncpaddr_ip4addr; in ncprange_sethost()
597 if (from->ncpaddr_ip4addr.s_addr == INADDR_ANY) { in ncprange_sethost()
598 range->ncprange_ip4mask.s_addr = INADDR_ANY; in ncprange_sethost()
599 range->ncprange_ip4width = 0; in ncprange_sethost()
601 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_sethost()
602 range->ncprange_ip4width = 32; in ncprange_sethost()
608 range->ncprange_family = AF_INET6; in ncprange_sethost()
609 range->ncprange_ip6addr = from->ncpaddr_ip6addr; in ncprange_sethost()
610 range->ncprange_ip6width = 128; in ncprange_sethost()
615 range->ncprange_family = AF_UNSPEC; in ncprange_sethost()
622 switch (range->ncprange_family) { in ncprange_ishost()
624 return range->ncprange_ip4width == 32; in ncprange_ishost()
627 return range->ncprange_ip6width == 128; in ncprange_ishost()
637 switch (range->ncprange_family) { in ncprange_setwidth()
641 range->ncprange_ip4width = width; in ncprange_setwidth()
642 range->ncprange_ip4mask = bits2mask4(width); in ncprange_setwidth()
649 range->ncprange_ip6width = width; in ncprange_setwidth()
663 range->ncprange_family = AF_INET; in ncprange_setip4host()
664 range->ncprange_ip4addr = from; in ncprange_setip4host()
666 range->ncprange_ip4mask.s_addr = INADDR_ANY; in ncprange_setip4host()
667 range->ncprange_ip4width = 0; in ncprange_setip4host()
669 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_setip4host()
670 range->ncprange_ip4width = 32; in ncprange_setip4host()
677 range->ncprange_family = AF_INET; in ncprange_setip4()
678 range->ncprange_ip4addr = from; in ncprange_setip4()
679 range->ncprange_ip4mask = msk; in ncprange_setip4()
680 range->ncprange_ip4width = mask42bits(msk); in ncprange_setip4()
687 if (range->ncprange_family != AF_INET) in ncprange_setip4mask()
689 range->ncprange_ip4mask = mask; in ncprange_setip4mask()
690 range->ncprange_ip4width = mask42bits(mask); in ncprange_setip4mask()
705 switch (host->sa_family) { in ncprange_setsa()
707 range->ncprange_family = AF_INET; in ncprange_setsa()
708 range->ncprange_ip4addr = host4->sin_addr; in ncprange_setsa()
709 if (host4->sin_addr.s_addr == INADDR_ANY) { in ncprange_setsa()
710 range->ncprange_ip4mask.s_addr = INADDR_ANY; in ncprange_setsa()
711 range->ncprange_ip4width = 0; in ncprange_setsa()
712 } else if (mask4 && mask4->sin_family == AF_INET) { in ncprange_setsa()
713 range->ncprange_ip4mask.s_addr = mask4->sin_addr.s_addr; in ncprange_setsa()
714 range->ncprange_ip4width = mask42bits(mask4->sin_addr); in ncprange_setsa()
716 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_setsa()
717 range->ncprange_ip4width = 32; in ncprange_setsa()
723 range->ncprange_family = AF_INET6; in ncprange_setsa()
724 range->ncprange_ip6addr = host6->sin6_addr; in ncprange_setsa()
725 if (IN6_IS_ADDR_UNSPECIFIED(&host6->sin6_addr)) in ncprange_setsa()
726 range->ncprange_ip6width = 0; in ncprange_setsa()
728 range->ncprange_ip6width = mask6 ? mask62bits(&mask6->sin6_addr) : 128; in ncprange_setsa()
733 range->ncprange_family = AF_UNSPEC; in ncprange_setsa()
752 switch (range->ncprange_family) { in ncprange_getsa()
754 host4->sin_family = AF_INET; in ncprange_getsa()
755 host4->sin_len = sizeof(*host4); in ncprange_getsa()
756 host4->sin_addr = range->ncprange_ip4addr; in ncprange_getsa()
758 mask4->sin_family = AF_INET; in ncprange_getsa()
759 mask4->sin_len = sizeof(*host4); in ncprange_getsa()
760 mask4->sin_addr = range->ncprange_ip4mask; in ncprange_getsa()
766 host6->sin6_family = AF_INET6; in ncprange_getsa()
767 host6->sin6_len = sizeof(*host6); in ncprange_getsa()
768 host6->sin6_addr = range->ncprange_ip6addr; in ncprange_getsa()
770 mask6->sin6_family = AF_INET6; in ncprange_getsa()
771 mask6->sin6_len = sizeof(*host6); in ncprange_getsa()
772 mask6->sin6_addr = bits2mask6(range->ncprange_ip6width); in ncprange_getsa()
778 host->ss_family = AF_UNSPEC; in ncprange_getsa()
780 mask->ss_family = AF_UNSPEC; in ncprange_getsa()
786 ncprange_getaddr(const struct ncprange *range, struct ncpaddr *addr) in ncprange_getaddr() argument
788 switch (range->ncprange_family) { in ncprange_getaddr()
790 addr->ncpaddr_family = AF_INET; in ncprange_getaddr()
791 addr->ncpaddr_ip4addr = range->ncprange_ip4addr; in ncprange_getaddr()
795 addr->ncpaddr_family = AF_INET6; in ncprange_getaddr()
796 addr->ncpaddr_ip6addr = range->ncprange_ip6addr; in ncprange_getaddr()
805 ncprange_getip4addr(const struct ncprange *range, struct in_addr *addr) in ncprange_getip4addr() argument
807 if (range->ncprange_family != AF_INET) in ncprange_getip4addr()
810 *addr = range->ncprange_ip4addr; in ncprange_getip4addr()
817 switch (range->ncprange_family) { in ncprange_getip4mask()
819 *mask = range->ncprange_ip4mask; in ncprange_getip4mask()
829 switch (range->ncprange_family) { in ncprange_getwidth()
831 *width = range->ncprange_ip4width; in ncprange_getwidth()
835 *width = range->ncprange_ip6width; in ncprange_getwidth()
847 struct ncpaddr addr; in ncprange_ntoa() local
850 if (!ncprange_getaddr(range, &addr)) in ncprange_ntoa()
853 res = ncpaddr_ntowa(&addr); in ncprange_ntoa()
855 if (len >= NCP_ASCIIBUFFERSIZE - 1) in ncprange_ntoa()
858 switch (range->ncprange_family) { in ncprange_ntoa()
860 if (range->ncprange_ip4width == -1) { in ncprange_ntoa()
861 /* A non-contiguous mask */ in ncprange_ntoa()
862 for (; len >= 3; res[len -= 2] = '\0') in ncprange_ntoa()
863 if (strcmp(res + len - 2, ".0")) in ncprange_ntoa()
865 snprintf(res + len, sizeof res - len, "&0x%08lx", in ncprange_ntoa()
866 (unsigned long)ntohl(range->ncprange_ip4mask.s_addr)); in ncprange_ntoa()
867 } else if (range->ncprange_ip4width < 32) in ncprange_ntoa()
868 snprintf(res + len, sizeof res - len, "/%d", range->ncprange_ip4width); in ncprange_ntoa()
874 if (range->ncprange_ip6width != 128) in ncprange_ntoa()
875 snprintf(res + len, sizeof res - len, "/%d", range->ncprange_ip6width); in ncprange_ntoa()
889 int scopeid = -1; in ncprange_scopeid()
891 if (range->ncprange_family == AF_INET6) { in ncprange_scopeid()
892 sin6 = &range->ncprange_ip6addr; in ncprange_scopeid()
894 if ((scopeid = ntohs(*(const u_short *)&sin6->s6_addr[2])) == 0) in ncprange_scopeid()
895 scopeid = -1; in ncprange_scopeid()
903 ncprange_aton(struct ncprange *range, struct ncp *ncp, const char *data) in ncprange_aton() argument
910 len = strcspn(data, "/"); in ncprange_aton()
912 if (ncp && strncasecmp(data, "HISADDR", len) == 0) { in ncprange_aton()
913 range->ncprange_family = AF_INET; in ncprange_aton()
914 range->ncprange_ip4addr = ncp->ipcp.peer_ip; in ncprange_aton()
915 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_aton()
916 range->ncprange_ip4width = 32; in ncprange_aton()
919 } else if (ncp && strncasecmp(data, "HISADDR6", len) == 0) { in ncprange_aton()
920 range->ncprange_family = AF_INET6; in ncprange_aton()
921 range->ncprange_ip6addr = ncp->ipv6cp.hisaddr.ncpaddr_ip6addr; in ncprange_aton()
922 range->ncprange_ip6width = 128; in ncprange_aton()
925 } else if (ncp && strncasecmp(data, "MYADDR", len) == 0) { in ncprange_aton()
926 range->ncprange_family = AF_INET; in ncprange_aton()
927 range->ncprange_ip4addr = ncp->ipcp.my_ip; in ncprange_aton()
928 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_aton()
929 range->ncprange_ip4width = 32; in ncprange_aton()
932 } else if (ncp && strncasecmp(data, "MYADDR6", len) == 0) { in ncprange_aton()
933 range->ncprange_family = AF_INET6; in ncprange_aton()
934 range->ncprange_ip6addr = ncp->ipv6cp.myaddr.ncpaddr_ip6addr; in ncprange_aton()
935 range->ncprange_ip6width = 128; in ncprange_aton()
938 } else if (ncp && strncasecmp(data, "DNS0", len) == 0) { in ncprange_aton()
939 range->ncprange_family = AF_INET; in ncprange_aton()
940 range->ncprange_ip4addr = ncp->ipcp.ns.dns[0]; in ncprange_aton()
941 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_aton()
942 range->ncprange_ip4width = 32; in ncprange_aton()
944 } else if (ncp && strncasecmp(data, "DNS1", len) == 0) { in ncprange_aton()
945 range->ncprange_family = AF_INET; in ncprange_aton()
946 range->ncprange_ip4addr = ncp->ipcp.ns.dns[1]; in ncprange_aton()
947 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_aton()
948 range->ncprange_ip4width = 32; in ncprange_aton()
953 strncpy(s, data, len); in ncprange_aton()
955 bits = -1; in ncprange_aton()
957 if (data[len] != '\0') { in ncprange_aton()
958 bits = strtol(data + len + 1, &wp, 0); in ncprange_aton()
959 if (*wp || wp == data + len + 1 || bits < 0 || bits > 128) { in ncprange_aton()
965 if ((cp = strchr(data, ':')) == NULL) { in ncprange_aton()
966 range->ncprange_family = AF_INET; in ncprange_aton()
968 range->ncprange_ip4addr = GetIpAddr(s); in ncprange_aton()
970 if (range->ncprange_ip4addr.s_addr == INADDR_NONE) { in ncprange_aton()
975 if (range->ncprange_ip4addr.s_addr == INADDR_ANY) { in ncprange_aton()
976 range->ncprange_ip4mask.s_addr = INADDR_ANY; in ncprange_aton()
977 range->ncprange_ip4width = 0; in ncprange_aton()
978 } else if (bits == -1) { in ncprange_aton()
979 range->ncprange_ip4mask.s_addr = INADDR_BROADCAST; in ncprange_aton()
980 range->ncprange_ip4width = 32; in ncprange_aton()
985 range->ncprange_ip4mask = bits2mask4(bits); in ncprange_aton()
986 range->ncprange_ip4width = bits; in ncprange_aton()
992 range->ncprange_family = AF_INET6; in ncprange_aton()
994 if (inet_pton(AF_INET6, s, &range->ncprange_ip6addr) != 1) { in ncprange_aton()
999 if (IN6_IS_ADDR_UNSPECIFIED(&range->ncprange_ip6addr)) in ncprange_aton()
1000 range->ncprange_ip6width = 0; in ncprange_aton()
1002 range->ncprange_ip6width = (bits == -1) ? 128 : bits; in ncprange_aton()