diff -Naur dsc-200706121022.orig/presenter/perllib/DSC/extractor/config.pm dsc-200706121022/presenter/perllib/DSC/extractor/config.pm
--- dsc-200706121022.orig/presenter/perllib/DSC/extractor/config.pm	2007-05-15 21:39:54.000000000 +0200
+++ dsc-200706121022/presenter/perllib/DSC/extractor/config.pm	2007-12-18 16:20:13.565777000 +0100
@@ -230,6 +230,34 @@
     },
   },
 
+  client_addr_ipv4_vs_rcode => {
+    ndim	=> 2,
+    type1	=> 'Rcode',
+    type2	=> 'ClientAddr',
+    outputs	=> {
+      client_addr_ipv4_vs_rcode_accum => {
+	data_munger => \&main::swap_dimensions,
+	data_reader => \&DSC::extractor::read_data3,
+	data_merger => \&main::merge_accum2d,
+	data_writer => \&DSC::extractor::write_data3,
+      },
+    },
+  },
+
+  client_addr_ipv6_vs_rcode => {
+    ndim	=> 2,
+    type1	=> 'Rcode',
+    type2	=> 'ClientAddr',
+    outputs	=> {
+      client_addr_ipv6_vs_rcode_accum => {
+	data_munger => \&main::swap_dimensions,
+	data_reader => \&DSC::extractor::read_data3,
+	data_merger => \&main::merge_accum2d,
+	data_writer => \&DSC::extractor::write_data3,
+      },
+    },
+  },
+
   direction_vs_ipproto => {
     ndim	=> 2,
     type1	=> 'Direction',
@@ -331,6 +359,28 @@
     },
   },
 
+  dns_ip_version_vs_qtype => {
+    ndim	=> 2,
+    type1	=> 'IPVersion',
+    type2       => 'Qtype',
+    outputs	=> {
+      dns_ip_version => {
+	keys2	=> [ qw(1 2 5 6 12 15 28 33 38 255 else) ],
+	data_munger => \&main::munge_elsify,
+	data_reader => \&DSC::extractor::read_data4,
+	data_merger => \&main::merge_trace,
+	data_writer => \&DSC::extractor::write_data4,
+      },
+      dns_ip_version_vs_qtype => {
+	keys2	=> [ qw(1 2 5 6 12 15 28 33 38 255 else) ],
+	data_munger	=> \&main::munge_elsify,
+	data_reader	=> \&DSC::extractor::read_data3,
+	data_merger	=> \&main::merge_accum2d,
+	data_writer	=> \&DSC::extractor::write_data3,
+	#data_trimer	=> \&main::trim_accum2d,
+      },
+    },
+  },
 );
 
 1;
diff -Naur dsc-200706121022.orig/presenter/perllib/DSC/grapher/plot.pm dsc-200706121022/presenter/perllib/DSC/grapher/plot.pm
--- dsc-200706121022.orig/presenter/perllib/DSC/grapher/plot.pm	2007-05-15 22:34:33.000000000 +0200
+++ dsc-200706121022/presenter/perllib/DSC/grapher/plot.pm	2007-12-18 16:32:13.551684000 +0100
@@ -455,6 +455,44 @@
    }
   },
 
+  dns_ip_version => {
+    dataset     => 'dns_ip_version_vs_qtype',
+    plot_type   => 'trace',
+    keys	=> [qw(IPv4 IPv6 else)],
+    names	=> [qw(IPv4 IPv6 Other)],
+    colors	=> [qw(red brightgreen purple)],
+    data_reader => \&DSC::extractor::read_data4,
+    data_summer => \&DSC::grapher::data_summer_2d,
+    yaxes	=> {
+        rate => {
+            label => 'Queries Rate (q/s)',
+            divideflag => 1,
+            default => 1,
+        },
+        percent => {
+            label => 'Percent of Queries',
+            divideflag => 0,
+            default => 0,
+        },
+    },
+    plottitle   => 'IP Version Carrying DNS Queries',
+    map_legend	=> 1,
+    munge_func  => \&DSC::grapher::munge_sum_2d_to_1d,
+  },
+
+  dns_ip_version_vs_qtype => {
+    plot_type => 'accum2d',
+    divideflag 	=> 0,
+    keys	=> $qtype_keys,
+    names	=> $qtype_names,
+    colors	=> $qtype_colors,
+    data_reader => \&DSC::extractor::read_data3,
+    data_summer => \&DSC::grapher::data_summer_1d,
+    yaxes	=> $std_accum_yaxes,
+    plottitle   => 'Query Types by IP version',
+    map_legend	=> 1,
+  },
+
   transport_vs_qtype => {
     dataset => 'transport_vs_qtype',
     plot_type => 'trace',
@@ -664,6 +702,34 @@
     munge_func 	=> \&DSC::grapher::munge_anonymize_ip,
   },
 
+  client_addr_ipv4_vs_rcode_accum => {
+    dataset => 'client_addr_ipv4_vs_rcode',
+    plot_type => 'accum2d',
+    yaxes	=> $std_accum_yaxes,
+    keys	=> [ qw(0 1 2 3 4 5) ],
+    names	=> [ qw(NOERROR FORMERR SERVFAIL NXDOMAIN NOTIMPL REFUSED) ],
+    colors	=> [ qw(brightgreen red purple blue orange magenta ) ],
+    data_reader => \&DSC::extractor::read_data3,
+    data_summer => \&DSC::grapher::data_summer_1d,
+    plottitle	=> 'Rcodes and Addrs IPv4',
+    map_legend	=> 1,
+    munge_func 	=> \&DSC::grapher::munge_anonymize_ip,
+  },
+
+  client_addr_ipv6_vs_rcode_accum => {
+    dataset => 'client_addr_ipv6_vs_rcode',
+    plot_type => 'accum2d',
+    yaxes	=> $std_accum_yaxes,
+    keys	=> [ qw(0 1 2 3 4 5) ],
+    names	=> [ qw(NOERROR FORMERR SERVFAIL NXDOMAIN NOTIMPL REFUSED) ],
+    colors	=> [ qw(brightgreen red purple blue orange magenta ) ],
+    data_reader => \&DSC::extractor::read_data3,
+    data_summer => \&DSC::grapher::data_summer_1d,
+    plottitle	=> 'Rcodes and Addrs IPv6',
+    map_legend	=> 1,
+    munge_func 	=> \&DSC::grapher::munge_anonymize_ip,
+  },
+
   ipv6_rsn_abusers_accum => {
     dataset	=> 'ipv6_rsn_abusers',
     plot_type	=> 'accum1d',
diff -Naur dsc-200706121022.orig/presenter/perllib/DSC/grapher.pm dsc-200706121022/presenter/perllib/DSC/grapher.pm
--- dsc-200706121022.orig/presenter/perllib/DSC/grapher.pm	2007-05-15 22:31:53.000000000 +0200
+++ dsc-200706121022/presenter/perllib/DSC/grapher.pm	2007-12-18 16:12:09.630859000 +0100
@@ -1239,6 +1239,10 @@
 		push(@items, sublist_item() . navbar_item('plot','qtype_vs_numeric_tld', 'numeric'));
 	}
 	push(@items, navbar_item('plot','client_addr_vs_rcode_accum','Rcodes by Client Address'));
+	if ($pn =~ /client_addr_vs_rcode_accum|client_addr_ipv6_vs_rcode_accum|client_addr_ipv4_vs_rcode_accum/) {
+	    push(@items, sublist_item() . navbar_item('plot','client_addr_ipv4_vs_rcode_accum','IPv4'));
+	    push(@items, sublist_item() . navbar_item('plot','client_addr_ipv6_vs_rcode_accum','IPv6'));
+	}
 	push(@items, navbar_item('plot','certain_qnames_vs_qtype','Popular Names'));
 	push(@items, navbar_item('plot','ipv6_rsn_abusers_accum','IPv6 root abusers'));
 	push(@items, navbar_item('plot','opcode','Opcodes'));
@@ -1250,6 +1254,10 @@
 		push(@items, sublist_item() . navbar_item('plot','edns_version', 'EDNS version'));
 	}
 	push(@items, navbar_item('plot','chaos_types_and_names','CHAOS'));
+	push(@items, navbar_item('plot','dns_ip_version','IP Version'));
+	if ($pn =~ /dns_ip_version|dns_ip_version_vs_qtype/) {
+	    push(@items, sublist_item() . navbar_item('plot', 'dns_ip_version_vs_qtype', 'Query Types'));
+	}
 	push(@items, navbar_item('plot','transport_vs_qtype','DNS Transport'));
 	push(@items, navbar_item('plot','direction_vs_ipproto','IP Protocols'));
 	push(@items, navbar_item('plot','qtype_vs_qnamelen','Qname Length'));
