diff --git a/lib/isc/include/isc/sockaddr.h b/lib/isc/include/isc/sockaddr.h index 9f3986b01f..97349a3343 100644 --- a/lib/isc/include/isc/sockaddr.h +++ b/lib/isc/include/isc/sockaddr.h @@ -245,4 +245,11 @@ isc_sockaddr_fromsockaddr(isc_sockaddr_t *isa, const struct sockaddr *sa); * Minimum size of array to pass to isc_sockaddr_format(). */ +bool +isc_sockaddr_disabled(const isc_sockaddr_t *sockaddr); +/*%< + * Report whether or not the address family of 'sockaddr' + * has been disabled. + */ + ISC_LANG_ENDDECLS diff --git a/lib/isc/sockaddr.c b/lib/isc/sockaddr.c index 038e3ec7c4..cf3e7612a9 100644 --- a/lib/isc/sockaddr.c +++ b/lib/isc/sockaddr.c @@ -497,3 +497,15 @@ isc_sockaddr_fromsockaddr(isc_sockaddr_t *isa, const struct sockaddr *sa) { return (ISC_R_SUCCESS); } + +bool +isc_sockaddr_disabled(const isc_sockaddr_t *sockaddr) { + if ((sockaddr->type.sa.sa_family == AF_INET && + isc_net_probeipv4() == ISC_R_DISABLED) || + (sockaddr->type.sa.sa_family == AF_INET6 && + isc_net_probeipv6() == ISC_R_DISABLED)) + { + return (true); + } + return (false); +}