linux/include/uapi/linux/dns_resolver.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
   2/* DNS resolver interface definitions.
   3 *
   4 * Copyright (C) 2018 Red Hat, Inc. All Rights Reserved.
   5 * Written by David Howells (dhowells@redhat.com)
   6 *
   7 * This program is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU General Public Licence
   9 * as published by the Free Software Foundation; either version
  10 * 2 of the Licence, or (at your option) any later version.
  11 */
  12
  13#ifndef _UAPI_LINUX_DNS_RESOLVER_H
  14#define _UAPI_LINUX_DNS_RESOLVER_H
  15
  16#include <linux/types.h>
  17
  18/*
  19 * Type of payload.
  20 */
  21enum dns_payload_content_type {
  22        DNS_PAYLOAD_IS_SERVER_LIST      = 0, /* List of servers, requested by srv=1 */
  23};
  24
  25/*
  26 * Type of address that might be found in an address record.
  27 */
  28enum dns_payload_address_type {
  29        DNS_ADDRESS_IS_IPV4             = 0, /* 4-byte AF_INET address */
  30        DNS_ADDRESS_IS_IPV6             = 1, /* 16-byte AF_INET6 address */
  31};
  32
  33/*
  34 * Type of protocol used to access a server.
  35 */
  36enum dns_payload_protocol_type {
  37        DNS_SERVER_PROTOCOL_UNSPECIFIED = 0,
  38        DNS_SERVER_PROTOCOL_UDP         = 1, /* Use UDP to talk to the server */
  39        DNS_SERVER_PROTOCOL_TCP         = 2, /* Use TCP to talk to the server */
  40};
  41
  42/*
  43 * Source of record included in DNS resolver payload.
  44 */
  45enum dns_record_source {
  46        DNS_RECORD_UNAVAILABLE          = 0, /* No source available (empty record) */
  47        DNS_RECORD_FROM_CONFIG          = 1, /* From local configuration data */
  48        DNS_RECORD_FROM_DNS_A           = 2, /* From DNS A or AAAA record */
  49        DNS_RECORD_FROM_DNS_AFSDB       = 3, /* From DNS AFSDB record */
  50        DNS_RECORD_FROM_DNS_SRV         = 4, /* From DNS SRV record */
  51        DNS_RECORD_FROM_NSS             = 5, /* From NSS */
  52        NR__dns_record_source
  53};
  54
  55/*
  56 * Status of record included in DNS resolver payload.
  57 */
  58enum dns_lookup_status {
  59        DNS_LOOKUP_NOT_DONE             = 0, /* No lookup has been made */
  60        DNS_LOOKUP_GOOD                 = 1, /* Good records obtained */
  61        DNS_LOOKUP_GOOD_WITH_BAD        = 2, /* Good records, some decoding errors */
  62        DNS_LOOKUP_BAD                  = 3, /* Couldn't decode results */
  63        DNS_LOOKUP_GOT_NOT_FOUND        = 4, /* Got a "Not Found" result */
  64        DNS_LOOKUP_GOT_LOCAL_FAILURE    = 5, /* Local failure during lookup */
  65        DNS_LOOKUP_GOT_TEMP_FAILURE     = 6, /* Temporary failure during lookup */
  66        DNS_LOOKUP_GOT_NS_FAILURE       = 7, /* Name server failure */
  67        NR__dns_lookup_status
  68};
  69
  70/*
  71 * Header at the beginning of binary format payload.
  72 */
  73struct dns_payload_header {
  74        __u8            zero;           /* Zero byte: marks this as not being text */
  75        __u8            content;        /* enum dns_payload_content_type */
  76        __u8            version;        /* Encoding version */
  77} __packed;
  78
  79/*
  80 * Header at the beginning of a V1 server list.  This is followed directly by
  81 * the server records.  Each server records begins with a struct of type
  82 * dns_server_list_v1_server.
  83 */
  84struct dns_server_list_v1_header {
  85        struct dns_payload_header hdr;
  86        __u8            source;         /* enum dns_record_source */
  87        __u8            status;         /* enum dns_lookup_status */
  88        __u8            nr_servers;     /* Number of server records following this */
  89} __packed;
  90
  91/*
  92 * Header at the beginning of each V1 server record.  This is followed by the
  93 * characters of the name with no NUL-terminator, followed by the address
  94 * records for that server.  Each address record begins with a struct of type
  95 * struct dns_server_list_v1_address.
  96 */
  97struct dns_server_list_v1_server {
  98        __u16           name_len;       /* Length of name (LE) */
  99        __u16           priority;       /* Priority (as SRV record) (LE) */
 100        __u16           weight;         /* Weight (as SRV record) (LE) */
 101        __u16           port;           /* UDP/TCP port number (LE) */
 102        __u8            source;         /* enum dns_record_source */
 103        __u8            status;         /* enum dns_lookup_status */
 104        __u8            protocol;       /* enum dns_payload_protocol_type */
 105        __u8            nr_addrs;
 106} __packed;
 107
 108/*
 109 * Header at the beginning of each V1 address record.  This is followed by the
 110 * bytes of the address, 4 for IPV4 and 16 for IPV6.
 111 */
 112struct dns_server_list_v1_address {
 113        __u8            address_type;   /* enum dns_payload_address_type */
 114} __packed;
 115
 116#endif /* _UAPI_LINUX_DNS_RESOLVER_H */
 117