]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[dns] Disambiguate "no nameserver" and "no DNS record" errors
authorMichael Brown <mcb30@ipxe.org>
Wed, 1 Dec 2010 00:47:09 +0000 (00:47 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 1 Dec 2010 00:47:09 +0000 (00:47 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/udp/dns.c

index ddbccc32297cfaf24d04b9c9d56351d85548df2a..be7a98e7f14d4a781bd18e6b897485b2dad0e702 100644 (file)
@@ -46,6 +46,14 @@ FILE_LICENCE ( GPL2_OR_LATER );
 
 FEATURE ( FEATURE_PROTOCOL, "DNS", DHCP_EB_FEATURE_DNS, 1 );
 
+/* Disambiguate the various error causes */
+#define ENXIO_NO_RECORD __einfo_error ( EINFO_ENXIO_NO_RECORD )
+#define EINFO_ENXIO_NO_RECORD \
+       __einfo_uniqify ( EINFO_ENXIO, 0x01, "DNS name does not exist" )
+#define ENXIO_NO_NAMESERVER __einfo_error ( EINFO_ENXIO_NO_NAMESERVER )
+#define EINFO_ENXIO_NO_NAMESERVER \
+       __einfo_uniqify ( EINFO_ENXIO, 0x02, "No DNS servers available" )
+
 /** The DNS server */
 static struct sockaddr_tcpip nameserver = {
        .st_port = htons ( DNS_PORT ),
@@ -438,7 +446,7 @@ static int dns_xfer_deliver ( struct dns_request *dns,
                        goto done;
                } else {
                        DBGC ( dns, "DNS %p found no CNAME record\n", dns );
-                       dns_done ( dns, -ENXIO );
+                       dns_done ( dns, -ENXIO_NO_RECORD );
                        rc = 0;
                        goto done;
                }
@@ -507,7 +515,7 @@ static int dns_resolv ( struct interface *resolv,
        if ( ! nameserver.st_family ) {
                DBG ( "DNS not attempting to resolve \"%s\": "
                      "no DNS servers\n", name );
-               rc = -ENXIO;
+               rc = -ENXIO_NO_NAMESERVER;
                goto err_no_nameserver;
        }