diff --git a/lib/isc/include/isc/sockaddr.h b/lib/isc/include/isc/sockaddr.h index 3ba52427a5..38f16a9e79 100644 --- a/lib/isc/include/isc/sockaddr.h +++ b/lib/isc/include/isc/sockaddr.h @@ -241,4 +241,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 263d652b38..7faa8578ad 100644 --- a/lib/isc/sockaddr.c +++ b/lib/isc/sockaddr.c @@ -467,3 +467,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); +}