diff options
Diffstat (limited to 'include/dns_decoder.h')
| -rw-r--r-- | include/dns_decoder.h | 245 |
1 files changed, 11 insertions, 234 deletions
diff --git a/include/dns_decoder.h b/include/dns_decoder.h index 3892d12..b41f7b9 100644 --- a/include/dns_decoder.h +++ b/include/dns_decoder.h @@ -1,13 +1,3 @@ -/* -********************************************************************************************** -* File: dns_decoder.h -* Description: dns decoder api -* Authors: Liu XueLi <[email protected]> -* Date: 2024-02-07 -* Copyright: (c) Since 2022 Geedge Networks, Ltd. All rights reserved. -*********************************************************************************************** -*/ - #pragma once #ifdef __cplusplus @@ -19,223 +9,11 @@ extern "C" #include <linux/limits.h> #include <stddef.h> -#define DNS_MESSAGE_TOPIC "TOPIC_DNS" - -#define DNS_NAME_MAX (NAME_MAX + 1) -// #define HINFO_NAME_MAX (40 + 1) /* https://www.ietf.org/rfc/rfc1010.txt */ - -#define DNS_CLASS_UNKNOWN 0 -#define DNS_CLASS_IN 1 -#define DNS_CLASS_CS 2 -#define DNS_CLASS_CH 3 -#define DNS_CLASS_HS 4 -#define DNS_CLASS_ANY 255 - -/* RR(resource record) type, defined in https://www.ietf.org/rfc/rfc1035.txt */ -enum dns_rr_type -{ - DNS_RR_TYPE_A = 1, - DNS_RR_TYPE_NS, - DNS_RR_TYPE_MD, /* Obsolete - use MX, rfc973 */ - DNS_RR_TYPE_MF, /* Obsolete - use MX, rfc973 */ - DNS_RR_TYPE_CNAME, - DNS_RR_TYPE_SOA, - DNS_RR_TYPE_MB, /* EXPERIMENTAL, rfc883,rfc2505 */ - DNS_RR_TYPE_MG, /* EXPERIMENTAL, rfc883,rfc2505 */ - DNS_RR_TYPE_MR, /* EXPERIMENTAL, rfc883 */ - DNS_RR_TYPE_NULL, /* EXPERIMENTAL, rfc1035 */ - DNS_RR_TYPE_WKS, /* Not to be relied upon, rfc1123 */ - DNS_RR_TYPE_PTR, - DNS_RR_TYPE_HINFO, - DNS_RR_TYPE_MINFO, - DNS_RR_TYPE_MX, - DNS_RR_TYPE_TXT, - DNS_RR_TYPE_RP, - DNS_RR_TYPE_ISDN = 20, - DNS_RR_TYPE_AAAA = 28, /* dns_ipv6 */ - DNS_RR_TYPE_SRV = 33, - DNS_RR_TYPE_DNAME = 39, - DNS_RR_TYPE_OPT = 41, - DNS_RR_TYPE_DS = 43, - DNS_RR_TYPE_RRSIG = 46, - DNS_RR_TYPE_NSEC, - DNS_RR_TYPE_DNSKEY, - DNS_RR_TYPE_NSEC3 = 50, - DNS_RR_TYPE_NSEC3PARAM, - DNS_RR_TYPE_HTTPS = 65, - DNS_RR_TYPE_AXFR = 252, - DNS_RR_TYPE_MAILB, - DNS_RR_TYPE_MAILA, /* Obsolete - see MX */ - DNS_RR_TYPE_ANY, - DNS_RR_TYPE_DLV = 32769, /* DSNSEC Lokkaside Validation */ - DNS_RR_TYPE_UNKNOWN = 65534 -}; - -struct dstring -{ - size_t value_sz; - uint8_t value[DNS_NAME_MAX]; -}; - -struct rdata_hinfo -{ - struct dstring os; - struct dstring cpu; -}; - -struct rdata_minfo -{ - struct dstring rmailbx; - struct dstring emailbx; -}; - -struct rdata_mx -{ - uint16_t preference; - struct dstring exchange; -}; - -struct rdata_soa -{ - struct dstring mname; - struct dstring rname; - uint32_t serial; - uint32_t refresh; - uint32_t retry; - uint32_t expire; - uint32_t minimum; -}; - -struct rdata_rp -{ - struct dstring txt_rr; - struct dstring mailbox; -}; - -struct rdata_wks -{ - uint8_t protocol; - uint32_t addr; - uint32_t size; - uint8_t *bitmap; -}; - -struct rdata_srv -{ - uint16_t priority; - uint16_t weight; - uint16_t port; - struct dstring target; -}; - -struct rdata_ds -{ - uint16_t key_tag; - uint8_t algo; - uint8_t digest_type; - uint32_t digest_len; - uint8_t *digest; -}; - -struct rdata_rrsig -{ - uint16_t type_covered; - uint8_t algo; - uint8_t labels; - uint32_t original_ttl; - uint32_t sig_expiration; - uint32_t sig_inception; - uint16_t key_tag; - uint32_t signature_len; - uint8_t *signature; - struct dstring signer_name; -}; - -struct rdata_nsec -{ - uint16_t maps_len; - struct dstring next_domain; - struct dstring type_bit_maps; -}; - -struct rdata_dnskey -{ - uint16_t flags; - uint8_t protocol; - uint8_t algo; - uint32_t public_key_len; - uint8_t *public_key; -}; - -struct rdata_nsec3 -{ - uint8_t hash_algo; - uint8_t flags; - uint8_t salt_len; - uint8_t hash_len; - uint16_t iteration; - uint16_t maps_len; - uint8_t *salt_value; - uint8_t *next_hash_owner; - struct dstring type_bit_maps; -}; - -struct rdata_nsec3param -{ - uint8_t hash_algo; - uint8_t flags; - uint8_t salt_len; - uint16_t iteration; - uint8_t *salt_value; -}; - -/* rr is short for resource record */ -struct dns_resource_record -{ - struct dstring qname; - enum dns_rr_type type; - uint16_t rr_class; - uint32_t ttl; /* 1byte: extended RCODE; 1byte: version; 2bytes: Z(upper bit) if type is OPT */ - uint16_t rdlength; - union - { - - struct dstring cname; - struct dstring mb; - struct dstring md; - struct dstring mf; - struct dstring mg; - struct dstring mr; - struct dstring ns; - struct dstring ptr; - struct dstring a; - struct dstring aaaa; - struct dstring dname; - struct dstring isdn; - struct dstring unknown; - - struct dstring txt; - struct dstring null; - - struct rdata_hinfo hinfo; - struct rdata_minfo minfo; - struct rdata_mx mx; - struct rdata_soa soa; - struct rdata_rp rp; - struct rdata_wks wks; - struct rdata_srv srv; - struct rdata_ds ds; - struct rdata_rrsig rrsig; - struct rdata_nsec nsec; - struct rdata_dnskey dnskey; - struct rdata_nsec3 nsec3; - struct rdata_nsec3param nsec3param; - struct dstring string; - } rdata; -}; +#define DNS_MESSAGE_TOPIC "TOPIC_DNS_MESSAGE" struct dns_message; - +struct dns_query_question; +struct dns_resource_record; /*. First call DNS_MESSAGE_TRANSACTION_BEGIN to create the transaction, @@ -265,23 +43,22 @@ struct dns_flag uint8_t rcode:4; }; -struct dns_query_question -{ - enum dns_rr_type qtype; - uint16_t qclass; - size_t qname_sz; - uint8_t qname[DNS_NAME_MAX]; -}; - int32_t dns_message_transaction_index_get(struct dns_message *msg); int32_t dns_message_header_id_get(struct dns_message *msg); struct dns_flag *dns_message_header_flag_get0(struct dns_message *msg); -void dns_message_question_get0(struct dns_message *msg, struct dns_query_question **question, uint16_t *n_question); + +void dns_message_query_question_get0(struct dns_message *msg, struct dns_query_question **question, uint16_t *n_question); +const char *dns_query_question_qname_get0(struct dns_query_question *question); +int32_t dns_query_question_qtype_get0(struct dns_query_question *question); +int32_t dns_query_question_qclass_get0(struct dns_query_question *question); + void dns_message_answer_resource_record_get0(struct dns_message *msg, struct dns_resource_record **answer_rr, uint16_t *n_answer_rr); void dns_message_authority_resource_record_get0(struct dns_message *msg, struct dns_resource_record **authority_rr, uint16_t *n_authority_rr); void dns_message_additional_resource_record_get0(struct dns_message *msg, struct dns_resource_record **additional_rr, uint16_t *n_additional_rr); +const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_array, uint16_t n_rr); + #ifdef __cplusplus } #endif |
