Respdiff second generation: reachitecture, support for parallel processing
The original monolitic Respdif (one f in the name) by Jan Holusa was reachitected and split into separate tools which (when chained together) do very similar job but much faster and flexibly. The second generation is conceptually chain of independent tools: 1. generate queries in wire format 2. send pre-generated wire format to resolvers and gather answers 3. analyze answers This split allows us to repeat steps using the same data as necessary, e.g. run analysis with different parameters without re-querying the resolvers. This first version is using filesystem to store queries and answers. Tool "makedirs.py" reads list of queries in text format <name> <RR type> and creates directory structure with subdirectory for each query. File "q.dns" in each subdirectory contains query in DNS wire format. Tool "orchestrator.py" then reads this stored wire format, sends it to resolvers and stores answer from each resolver into separate file. Directory structure for one query is: 00001/ - subdirectory name == query ID 00001/q.dns - query in wire format 00001/bind.dns - answer from BIND in wire format 00001/kresd.dns - kresd 00001/unbound.dns - Unbound Resulting files can be analyzed using tool "msgdiff.py". The tool refers to one resolver as "target" and to remaining resolvers as "others". Msgdiff compares specified fields in the answers and compute statistics based on comparion results. Answers where "others" do not agree with each other are simply counted but not processed further. Answers where "others" agree but the "target" returned a different answer than all "others" are counted separately with higher granularity, producing stats for each field in DNS message (rcode, flags, answer section ...). This very first version lacks proper user interface and values are hardcoded into Python scripts, see orchestrator.py.
Showing with 2344 additions and 0 deletions