From 5496804914e7adee6a64e9267f34040865611dc2 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Thu, 20 Jun 2024 02:33:35 +0000 Subject: [PATCH] Feature: performance test case --- include/dns_decoder.h | 20 ++- perf/byte_to_hex_highly_optimized | Bin 22064 -> 0 bytes src/dns_resource_record.h | 5 + src/dns_resource_record_exporter.cpp | 146 +++++++++++++++++- src/version.map | 4 +- test/CMakeLists.txt | 4 +- test/case/cernet1/cernet1_result.json | 12 -- test/case/cernet2/cernet2_result.json | 4 - test/case/https/https_result.json | 1 - .../multi_pkt_trans_2bytes_result.json | 1 - test/case/query/query_result.json | 3 - test/case/srv/srv_result.json | 1 - test/dns_decoder_perf_main.cpp | 9 -- test/dns_decoder_test.cpp | 41 +---- 14 files changed, 167 insertions(+), 84 deletions(-) delete mode 100755 perf/byte_to_hex_highly_optimized diff --git a/include/dns_decoder.h b/include/dns_decoder.h index b41f7b9..074ab92 100644 --- a/include/dns_decoder.h +++ b/include/dns_decoder.h @@ -11,10 +11,6 @@ extern "C" #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, then publish the transaction's DNS_MESSAGE_QUERY/DNS_MESSAGE_RESPONSE, @@ -29,8 +25,6 @@ enum dns_message_type DNS_MESSAGE_MAX }; -enum dns_message_type dns_message_type_get(struct dns_message *msg); - struct dns_flag { uint8_t qr:1; @@ -43,6 +37,12 @@ struct dns_flag uint8_t rcode:4; }; +struct dns_message; +struct dns_query_question; +struct dns_resource_record; + +enum dns_message_type dns_message_type_get(struct dns_message *msg); + int32_t dns_message_transaction_index_get(struct dns_message *msg); int32_t dns_message_header_id_get(struct dns_message *msg); @@ -53,11 +53,9 @@ 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); +int dns_message_resource_record_is_dnssec(struct dns_message *msg); +const char *dns_message_resource_record_json_exporter(struct dns_message *msg); +const char *dns_message_resource_record_cname_json_exporter(struct dns_message *msg); #ifdef __cplusplus } diff --git a/perf/byte_to_hex_highly_optimized b/perf/byte_to_hex_highly_optimized deleted file mode 100755 index 253ef7a10e436ff0039de486b3c657daf1095744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22064 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 a&4mMq%1wg!y^oXrR|kZ|Z8im4lKmf*oPOT` diff --git a/src/dns_resource_record.h b/src/dns_resource_record.h index 6070b20..54998ac 100644 --- a/src/dns_resource_record.h +++ b/src/dns_resource_record.h @@ -217,3 +217,8 @@ struct dns_query_question size_t qname_sz; uint8_t qname[DNS_NAME_MAX]; }; + +int32_t dns_message_contains_resource_record(struct dns_message *msg); +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); \ No newline at end of file diff --git a/src/dns_resource_record_exporter.cpp b/src/dns_resource_record_exporter.cpp index 7dd5900..4a0e38e 100644 --- a/src/dns_resource_record_exporter.cpp +++ b/src/dns_resource_record_exporter.cpp @@ -41,7 +41,7 @@ void dns_resource_record_dstring_append(cJSON *one_rr_object, struct dstring *ds } } -const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_array, uint16_t n_rr) +cJSON *dns_resource_record_json_create(struct dns_resource_record *rr_array, uint16_t n_rr) { if(rr_array==NULL || n_rr==0) { @@ -222,9 +222,149 @@ const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_arr cJSON_AddItemToArray(dns_rr_array, one_rr_object); } + + return dns_rr_array; +} - char *json_str=cJSON_PrintUnformatted(dns_rr_array); - cJSON_Delete(dns_rr_array); +const char *dns_message_resource_record_json_exporter(struct dns_message *msg) +{ + uint16_t n_answer_rr=0; + struct dns_resource_record *answer_rr=NULL; + dns_message_answer_resource_record_get0(msg, &answer_rr, &n_answer_rr); + + uint16_t n_authority_rr=0; + struct dns_resource_record *authority_rr=NULL; + dns_message_authority_resource_record_get0(msg, &authority_rr, &n_authority_rr); + + uint16_t n_additional_rr=0; + struct dns_resource_record *additional_rr=NULL; + dns_message_additional_resource_record_get0(msg, &additional_rr, &n_additional_rr); + + if(n_answer_rr==0 && n_authority_rr==0 && n_additional_rr==0) + { + return NULL; + } + + cJSON *answer=dns_resource_record_json_create(answer_rr, n_answer_rr); + cJSON *authority=dns_resource_record_json_create(authority_rr, n_authority_rr); + cJSON *additional=dns_resource_record_json_create(additional_rr, n_additional_rr); + + cJSON *rr_array=cJSON_CreateObject(); + if(answer!=NULL) + { + cJSON_AddItemToObject(rr_array, "answer", answer); + } + + if(authority!=NULL) + { + cJSON_AddItemToObject(rr_array, "authority", authority); + } + + if(additional!=NULL) + { + cJSON_AddItemToObject(rr_array, "additional", additional); + } + + char *json_str=cJSON_PrintUnformatted(rr_array); + cJSON_Delete(rr_array); return json_str; +} + +int dns_resource_record_is_dnssec(struct dns_resource_record *rr_array, uint16_t n_rr) +{ + for(uint16_t i=0; ifse.handle, tid, main_env->fse.id[PERF_TAG_QUESTION], &(main_env->fse.tag[PERF_TAG_QUESTION]), 1, time_diff_ns) } diff --git a/test/dns_decoder_test.cpp b/test/dns_decoder_test.cpp index 44931e5..0472ad5 100644 --- a/test/dns_decoder_test.cpp +++ b/test/dns_decoder_test.cpp @@ -85,46 +85,13 @@ void dns_decoder_test_message_cb(struct session *ss, int topic_id, const void *m cJSON_AddNumberToObject(real_result, "dns_rd", (double)(flag->rd)); } - uint16_t n_answer_rr=0; - struct dns_resource_record *answer_rr=NULL; - dns_message_answer_resource_record_get0(dns_msg, &answer_rr, &n_answer_rr); - - uint16_t n_authority_rr=0; - struct dns_resource_record *authority_rr=NULL; - dns_message_authority_resource_record_get0(dns_msg, &authority_rr, &n_authority_rr); - - uint16_t n_additional_rr=0; - struct dns_resource_record *additional_rr=NULL; - dns_message_additional_resource_record_get0(dns_msg, &additional_rr, &n_additional_rr); - - const char *answer=dns_resource_record_json_exporter(answer_rr, n_answer_rr); - const char *authority=dns_resource_record_json_exporter(authority_rr, n_authority_rr); - const char *additional=dns_resource_record_json_exporter(additional_rr, n_additional_rr); - - cJSON *rr_array=cJSON_CreateObject(); - if(answer!=NULL) + const char *resource_record_str=dns_message_resource_record_json_exporter(dns_msg); + if(resource_record_str!=NULL) { - cJSON *rr_object=cJSON_Parse(answer); - cJSON_AddItemToObject(rr_array, "answer", rr_object); - free((void *)answer); + cJSON *rr_array=cJSON_Parse(resource_record_str); + cJSON_AddItemToObject(real_result, "rr", rr_array); } - if(authority!=NULL) - { - cJSON *rr_object=cJSON_Parse(authority); - cJSON_AddItemToObject(rr_array, "authority", rr_object); - free((void *)authority); - } - - if(additional!=NULL) - { - cJSON *rr_object=cJSON_Parse(additional); - cJSON_AddItemToObject(rr_array, "additional", rr_object); - free((void *)additional); - } - - cJSON_AddItemToObject(real_result, "rr", rr_array); - if(plugin_env->write_result_enable==1) { char *real_result_str=cJSON_Print(real_result);