Skip to content
Snippets Groups Projects
dns.h 1.61 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef DNS_H
    #define DNS_H
    
    #include "config.h"
    
    #define DNS_PORT	53
    #define MAX_EXT_HDR	8
    #define MAX_DNS_ANS_RECORD 	20
    #define DELIM	"."
    #define T_A 	1
    #define T_CNAME	5
    
    Amit Kumar's avatar
    Amit Kumar committed
    #define T_AAAA	28
    
    
    /*
     * The DNS header structure
     */
    struct dnshdr {
    	uint16_t id;
    	uint16_t flags;
    	uint16_t qdcount;
    	uint16_t ancount;
    	uint16_t nscount;
    	uint16_t arcount;
    
    
    //DNS header structure
    
    	unsigned short id; // identification number
    	unsigned char rd :1; // recursion desired
    	unsigned char tc :1; // truncated message
    
    	unsigned char aa :1; // authoritative answer
    
    	unsigned char opcode :4; // purpose of message
    	unsigned char qr :1; // query/response flag
    
    	unsigned char rcode :4; // response code
    	unsigned char cd :1; // checking disabled
    	unsigned char ad :1; // authenticated data
    	unsigned char z :1; // its z! reserved
    	unsigned char ra :1; // recursion available
    
    	unsigned short q_count; // number of question entries
    	unsigned short ans_count; // number of answer entries
    	unsigned short auth_count; // number of authority entries
    	unsigned short add_count; // number of resource entries
    };
    
    #pragma pack(push, 1)
    
    	unsigned short type;
    	unsigned short _class;
    	unsigned int ttl;
    	unsigned short data_len;
    };
    #pragma pack(pop)
    
    //Pointers to resource record contents
    
    	unsigned char *name;
    	struct R_DATA *resource;
    	unsigned char *rdata;
    };
    
    //Constant sized fields of query structure
    
    	unsigned short qtype;
    	unsigned short qclass;
    };
    
    
    Rahul Thakur's avatar
    Rahul Thakur committed
    
    
    void *send_dns_queries(void *arg);
    
    void parse_dns_response(unsigned char *data_p);
    
    #endif