• Petr Špaček's avatar
    Respdiff second generation: reachitecture, support for parallel processing · 527d6f91
    Petr Špaček authored
    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.
    527d6f91