1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #ifndef DNS_RESOLVER_H
- #define DNS_RESOLVER_H
-
- #include "stdint.h"
- #include <gpxe/in.h>
- #include "ip.h"
- #include "udp.h"
-
- /*
- * Constants
- *
- */
-
- #define DNS_TYPE_A 1
- #define DNS_TYPE_CNAME 5
- #define DNS_TYPE_ANY 255
-
- #define DNS_CLASS_IN 1
- #define DNS_CLASS_CS 2
- #define DNS_CLASS_CH 3
- #define DNS_CLASS_HS 4
-
- #define DNS_FLAG_QUERY ( 0x00 << 15 )
- #define DNS_FLAG_RESPONSE ( 0x01 << 15 )
- #define DNS_FLAG_QR(flags) ( (flags) & ( 0x01 << 15 ) )
- #define DNS_FLAG_OPCODE_QUERY ( 0x00 << 11 )
- #define DNS_FLAG_OPCODE_IQUERY ( 0x01 << 11 )
- #define DNS_FLAG_OPCODE_STATUS ( 0x02 << 11 )
- #define DNS_FLAG_OPCODE(flags) ( (flags) & ( 0x0f << 11 ) )
- #define DNS_FLAG_RD ( 0x01 << 8 )
- #define DNS_FLAG_RA ( 0x01 << 7 )
- #define DNS_FLAG_RCODE_OK ( 0x00 << 0 )
- #define DNS_FLAG_RCODE_NX ( 0x03 << 0 )
- #define DNS_FLAG_RCODE(flags) ( (flags) & ( 0x0f << 0 ) )
-
- #define DNS_UDP_PORT 53
- #define DNS_MAX_RETRIES 3
- #define DNS_MAX_CNAME_RECURSION 0x30
-
- /*
- * DNS protocol structures
- *
- */
- struct dns_header {
- uint16_t id;
- uint16_t flags;
- uint16_t qdcount;
- uint16_t ancount;
- uint16_t nscount;
- uint16_t arcount;
- } __attribute__ (( packed ));
-
- struct dns_query_info {
- uint16_t qtype;
- uint16_t qclass;
- } __attribute__ (( packed ));
-
- struct dns_query {
- struct iphdr ip;
- struct udphdr udp;
- struct dns_header dns;
- char payload[ 256 + sizeof ( struct dns_query_info ) ];
- } __attribute__ (( packed ));
-
- struct dns_rr_info {
- uint16_t type;
- uint16_t class;
- uint32_t ttl;
- uint16_t rdlength;
- } __attribute__ (( packed ));
-
- struct dns_rr_info_a {
- struct dns_rr_info info;
- struct in_addr in_addr;
- } __attribute__ (( packed ));
-
- struct dns_rr_info_cname {
- struct dns_rr_info info;
- char cname[0];
- } __attribute__ (( packed ));
-
- /*
- * Functions in dns.c (used by nmb.c)
- *
- */
- extern struct dns_header * dns_query ( struct dns_query *query,
- unsigned int query_len,
- struct sockaddr_in *nameserver );
- extern struct dns_rr_info * dns_find_rr ( struct dns_query *query,
- struct dns_header *reply );
-
- #endif /* DNS_RESOLVER_H */
|