]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
Use struct sockaddr rather than struct sockaddr_tcpip
authorMichael Brown <mcb30@etherboot.org>
Thu, 18 Jan 2007 03:35:00 +0000 (03:35 +0000)
committerMichael Brown <mcb30@etherboot.org>
Thu, 18 Jan 2007 03:35:00 +0000 (03:35 +0000)
Tidy up code

src/include/gpxe/dns.h
src/net/udp/dns.c

index 49292d588d1be2e94cadf42aec83134a7cf9fcfd..234517ffb68319fdcb72d61a96f11594195205c0 100644 (file)
@@ -89,21 +89,27 @@ union dns_rr_info {
        struct dns_rr_info_cname cname;
 };
 
+/** A DNS request */
 struct dns_request {
+       /** Socket address to fill in with resolved address */
+       struct sockaddr *sa;
 
-       struct sockaddr_tcpip *st;
-
-       struct async async;
+       /** Current query packet */
        struct dns_query query;
+       /** Length of current query packet */
        struct dns_query_info *qinfo;
-
+       /** Recursion counter */
        unsigned int recursion;
 
+       /** Asynchronous operation */
+       struct async async;
+       /** UDP connection */
        struct udp_connection udp;
+       /** Retry timer */
        struct retry_timer timer;
 };
 
-extern int dns_resolv ( const char *name, struct sockaddr_tcpip *st,
+extern int dns_resolv ( const char *name, struct sockaddr *sa,
                        struct async *parent );
 
 #endif /* _GPXE_DNS_H */
index 17075d68e54a3d486456fdb066c90afdedc8aa26..c636790449512694c88b678ae4125b1035021cb3 100644 (file)
@@ -308,7 +308,7 @@ static int dns_newdata ( struct udp_connection *conn, void *data, size_t len,
                        /* Found the target A record */
                        DBGC ( dns, "DNS %p found address %s\n",
                               dns, inet_ntoa ( rr_info->a.in_addr ) );
-                       sin = ( struct sockaddr_in * ) dns->st;
+                       sin = ( struct sockaddr_in * ) dns->sa;
                        sin->sin_family = AF_INET;
                        sin->sin_addr = rr_info->a.in_addr;
 
@@ -403,13 +403,15 @@ static struct async_operations dns_async_operations = {
  * Resolve name using DNS
  *
  */
-int dns_resolv ( const char *name, struct sockaddr_tcpip *st,
+int dns_resolv ( const char *name, struct sockaddr *sa,
                 struct async *parent ) {
        struct dns_request *dns;
+       struct dhcp_option *option;
        union {
                struct sockaddr_tcpip st;
                struct sockaddr_in sin;
        } nameserver;
+
        int rc;
 
        /* Allocate DNS structure */
@@ -419,9 +421,10 @@ int dns_resolv ( const char *name, struct sockaddr_tcpip *st,
                goto err;
        }
        memset ( dns, 0, sizeof ( *dns ) );
-       dns->st = st;
+       dns->sa = sa;
        dns->timer.expired = dns_timer_expired;
        dns->udp.udp_op = &dns_udp_operations;
+       async_init ( &dns->async, &dns_async_operations, parent );
 
        /* Create query */
        dns->query.dns.flags = htons ( DNS_FLAG_QUERY | DNS_FLAG_OPCODE_QUERY |
@@ -431,33 +434,33 @@ int dns_resolv ( const char *name, struct sockaddr_tcpip *st,
        dns->qinfo->qtype = htons ( DNS_TYPE_A );
        dns->qinfo->qclass = htons ( DNS_CLASS_IN );
 
-       /* Open UDP connection */
+       /* Identify nameserver */
        memset ( &nameserver, 0, sizeof ( nameserver ) );
        nameserver.sin.sin_family = AF_INET;
        nameserver.sin.sin_port = htons ( DNS_PORT );
-#warning "DHCP-DNS hack"
-       struct dhcp_option *option =
-               find_global_dhcp_option ( DHCP_DNS_SERVERS );
-       if ( ! option ) {
+       if ( ! ( option = find_global_dhcp_option ( DHCP_DNS_SERVERS ) ) ) {
                DBGC ( dns, "DNS %p no name servers\n", dns );
                rc = -ENXIO;
                goto err;
        }
        dhcp_ipv4_option ( option, &nameserver.sin.sin_addr );
+
+       /* Open UDP connection */
        DBGC ( dns, "DNS %p using nameserver %s\n", dns, 
               inet_ntoa ( nameserver.sin.sin_addr ) );
        udp_connect ( &dns->udp, &nameserver.st );
        if ( ( rc = udp_open ( &dns->udp, 0 ) ) != 0 )
                goto err;
 
+       /* Send first DNS packet */
        dns_send_packet ( dns );
 
-       async_init ( &dns->async, &dns_async_operations, parent );
        return 0;       
 
  err:
        DBGC ( dns, "DNS %p could not create request: %s\n", 
               dns, strerror ( rc ) );
+       async_uninit ( &dns->async );
        free ( dns );
        return rc;
 }