GETDNSCOFIG(2)

NAME
getdnsconfig, setdnsconfig - get and set the kernel DNS resolver list

SYNOPSIS
#include <sys/dnsconfig.h>
#define DNSCONFIG_MAX_SERVERS 3
int
getdnsconfig(struct dnsconfig *cfg);
int
getdnsconfig(const struct dnsconfig *cfg);

DESCRIPTION
getdnsconfig() gets and setdnsconfig() sets the kernel DNS resolver list.

cfg points to a struct dnsconfig structure. The servers array can contain up to DNSCONFIG_MAX_SERVERS DNS resolvers. The servers_count field marks how many of the entries in servers are populated.

    struct dnsconfig {
    	size_t servers_count;
    	struct dnsconfig_server servers[DNSCONFIG_MAX_SERVERS];
    }

Each DNS resolver in the servers array is described by a struct dnsconfig_server structure. The resolver can be defined by either an IPv4 or an IPv6 address.

For an IPv4 address family is AF_INET, addrsize is sizeof(struct in_addr), and the address is stored in the in field of the addr union.

For an IPv6 address family is AF_INET6, addrsize is sizeof(struct in_addr6), and the address is stored in the in6 field of the addr union.

    union dnsconfig_server_union {
    	struct in_addr in;
    	struct in6_addr in6;
    }
    struct dnsconfig_server {
    	sa_family_t family;
    	size_t addrsize;
    	union dnsconfig_server_union addr;
    }

RETURN VALUES
On success 0 is returned. On error -1 is returned, and errno is set appropriately.

ERRORS
getdnsconfig() and setdnsconfig() will fail if:

EFAULT
    cfg points to an invalid address.

setdnsconfig() will additionally fail if:

EAFNOSUPPORT
    family is set to an address family other than AF_INET or AF_INET6.

EINVAL
    servers_count is larger than DNSCONFIG_MAX_SERVERS.

EINVAL
    addrsize does not match the size of the address corresponding to family.

SEE ALSO
inet(4), inet6(4), dhclient(8), dnsconfig(8)

HISTORY
The getdnsconfig() and setdnsconfig() system calls originally appeared in Sortix 1.1.