1 /* 2 * Copyright (C) 2014 John Crispin <blogic@openwrt.org> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License version 2.1 6 * as published by the Free Software Foundation 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 14 #ifndef _DNS_H__ 15 #define _DNS_H__ 16 17 #include <stdint.h> 18 #include <arpa/inet.h> 19 20 #define FLAG_RESPONSE 0x8000 21 #define FLAG_AUTHORATIVE 0x0400 22 23 #define TYPE_A 0x0001 24 #define TYPE_PTR 0x000C 25 #define TYPE_TXT 0x0010 26 #define TYPE_AAAA 0x001c 27 #define TYPE_SRV 0x0021 28 #define TYPE_ANY 0x00ff 29 30 #define IS_COMPRESSED(x) ((x & 0xc0) == 0xc0) 31 32 #define MCAST_ADDR "224.0.0.251" 33 #define MCAST_ADDR6 "ff02::fb" 34 #define MCAST_PORT 5353 35 36 #define CLASS_FLUSH 0x8000 37 #define CLASS_UNICAST 0x8000 38 #define CLASS_IN 0x0001 39 40 #define MAX_NAME_LEN 8096 41 #define MAX_DATA_LEN 8096 42 43 #define C_DNS_SD "_services._dns-sd._udp.local" 44 45 struct dns_header { 46 uint16_t id; 47 uint16_t flags; 48 uint16_t questions; 49 uint16_t answers; 50 uint16_t authority; 51 uint16_t additional; 52 } __attribute__((packed)); 53 54 struct dns_srv_data { 55 uint16_t priority; 56 uint16_t weight; 57 uint16_t port; 58 } __attribute__((packed)); 59 60 struct dns_answer { 61 uint16_t type; 62 uint16_t class; 63 uint32_t ttl; 64 uint16_t rdlength; 65 } __attribute__((packed)); 66 67 struct dns_question { 68 uint16_t type; 69 uint16_t class; 70 } __attribute__((packed)); 71 72 struct interface; 73 extern int cfg_proto; 74 extern int cfg_no_subnet; 75 76 void dns_send_question(struct interface *iface, struct sockaddr *to, 77 const char *question, int type, int multicast); 78 void dns_init_answer(void); 79 void dns_add_answer(int type, const uint8_t *rdata, uint16_t rdlength, int ttl); 80 void dns_send_answer(struct interface *iface, struct sockaddr *to, const char *answer); 81 void dns_reply_a(struct interface *iface, struct sockaddr *to, int ttl, const char *hostname); 82 void dns_reply_a_additional(struct interface *iface, struct sockaddr *to, int ttl); 83 const char* dns_type_string(uint16_t type); 84 void dns_handle_packet(struct interface *iface, struct sockaddr *s, uint16_t port, uint8_t *buf, int len); 85 86 #endif 87
This page was automatically generated by LXR 0.3.1. • OpenWrt