diff --git a/html/includes/graphs/device/ib_dhcp_messages.inc.php b/html/includes/graphs/device/ib_dhcp_messages.inc.php
new file mode 100644
index 000000000..6c43a47e8
--- /dev/null
+++ b/html/includes/graphs/device/ib_dhcp_messages.inc.php
@@ -0,0 +1,57 @@
+ '#FFAB00FF',
+ 'ack' => '#007283FF',
+ 'discover' => '#74C366FF',
+ 'offer' => '#B1441EFF',
+ 'inform' => '#8D85F3FF',
+ 'nack' => '#FAFD9EFF',
+ 'release' => '#96E78AFF',
+ 'decline' => '#FF0000FF',
+ 'other' => '#8F9286FF',
+);
+
+$i = 0;
+foreach ($stats as $stat => $color) {
+ $i++;
+ $rrd_list[$i]['filename'] = $rrd_filename;
+ $rrd_list[$i]['descr'] = ucfirst ($stat);
+ $rrd_list[$i]['ds'] = $stat;
+
+ # Set up DEFs
+ $rrd_options .= " DEF:".$stat."=".$rrd_filename.':'.$stat.':AVERAGE ';
+
+ # Set up CDEFS to multiply with 60 to get per minute value
+ $rrd_options .= " 'CDEF:cdef".$stat."=".$stat.",60,*'";
+
+ # Set up area graphing with stacking
+ if ( $i == "0" ) {
+ $rrd_options .= " 'AREA:cdef".$stat . $color.":".ucfirst($stat)."'";
+ } else {
+ $rrd_options .= " 'AREA:cdef".$stat . $color.":".ucfirst($stat).":STACK'";
+ }
+
+ # Set up legend, with consistent indent
+ $filler = 8 - strlen($stat);
+ $current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+ $rrd_options .= " 'GPRINT:cdef".$stat.":LAST:".$current_pad."Current\:%8.0lf'";
+ $rrd_options .= " 'GPRINT:cdef".$stat.":AVERAGE:Average\:%8.0lf'";
+ $rrd_options .= " 'GPRINT:cdef".$stat.":MAX:Maximum\:%8.0lf\\n'";
+}
+
+// Set up Total value
+$rrd_options .= " 'CDEF:cdeftotal=cdefrequest,cdefack,cdefdiscover,cdefoffer,
+ cdefinform,cdefnack,cdefrelease,cdefdecline,cdefother,+,+,+,+,+,+,+,+'";
+$rrd_options .= " 'LINE1:cdeftotal#000000FF:Total'";
+$filler = 8 - strlen("Total");
+$current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+$rrd_options .= " 'GPRINT:cdeftotal:LAST:".$current_pad."Current\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:AVERAGE:Average\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:MAX:Maximum\:%8.0lf\\n'";
+
diff --git a/html/includes/graphs/device/ib_dns_dyn_updates.inc.php b/html/includes/graphs/device/ib_dns_dyn_updates.inc.php
new file mode 100644
index 000000000..e5e511ba8
--- /dev/null
+++ b/html/includes/graphs/device/ib_dns_dyn_updates.inc.php
@@ -0,0 +1,50 @@
+ '#74C366FF',
+ 'failure' => '#007283FF',
+ 'reject' => '#FFAB00FF',
+ 'prereq_reject' => '#B1441EFF',
+);
+
+$i = 0;
+foreach ($stats as $stat => $color) {
+ $i++;
+ $rrd_list[$i]['filename'] = $rrd_filename;
+ $rrd_list[$i]['descr'] = ucfirst ($stat);
+ $rrd_list[$i]['ds'] = $stat;
+
+ # Set up DEFs
+ $rrd_options .= " DEF:".$stat."=".$rrd_filename.':'.$stat.':AVERAGE ';
+
+ # Set up CDEFS to multiply with 60 to get per minute value
+ $rrd_options .= " 'CDEF:cdef".$stat."=".$stat.",60,*'";
+
+ # Set up area graphing with stacking
+ if ( $i == "0" ) {
+ $rrd_options .= " 'AREA:cdef".$stat . $color.":".$stat."'";
+ } else {
+ $rrd_options .= " 'AREA:cdef".$stat . $color.":".$stat.":STACK'";
+ }
+
+ # Set up legend, with consistent indent
+ $filler = 15 - strlen($stat);
+ $current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+ $rrd_options .= " 'GPRINT:cdef".$stat.":LAST: ".$current_pad."Current\:%8.0lf'";
+ $rrd_options .= " 'GPRINT:cdef".$stat.":AVERAGE:Average\:%8.0lf'";
+ $rrd_options .= " 'GPRINT:cdef".$stat.":MAX:Maximum\:%8.0lf\\n'";
+}
+
+# Add total value
+$rrd_options .= " 'CDEF:cdeftotal=cdefsuccess,cdeffailure,cdefreject,cdefprereq_reject,+,+,+'";
+$rrd_options .= " 'LINE1:cdeftotal#000000FF:Total'";
+$filler = 16 - strlen("Total");
+$current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+$rrd_options .= " 'GPRINT:cdeftotal:LAST:".$current_pad."Current\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:AVERAGE:Average\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:MAX:Maximum\:%8.0lf\\n'";
diff --git a/html/includes/graphs/device/ib_dns_performance.inc.php b/html/includes/graphs/device/ib_dns_performance.inc.php
new file mode 100644
index 000000000..f97c1eb9b
--- /dev/null
+++ b/html/includes/graphs/device/ib_dns_performance.inc.php
@@ -0,0 +1,48 @@
+ '#74C366FF',
+ 'PerfnonAA' => '#007283FF',
+);
+
+$i = 0;
+foreach ($stats as $stat => $color) {
+ $i++;
+ $rrd_list[$i]['filename'] = $rrd_filename;
+ $rrd_list[$i]['descr'] = ucfirst ($stat);
+ $rrd_list[$i]['ds'] = $stat;
+
+ # Set up DEFs
+ $rrd_options .= " DEF:".$stat."=".$rrd_filename.':'.$stat.':AVERAGE ';
+
+ # Set up area graphing with stacking
+ if ( $i == "0" ) {
+ $rrd_options .= " 'AREA:".$stat . $color.":".$stat."'";
+ } else {
+ $rrd_options .= " 'AREA:".$stat . $color.":".$stat.":STACK'";
+ }
+
+ # Set up legend, with consistent indent
+ $filler = 15 - strlen($stat);
+ $current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+ $rrd_options .= " 'GPRINT:".$stat.":LAST: ".$current_pad."Current\:%8.0lf'";
+ $rrd_options .= " 'GPRINT:".$stat.":AVERAGE:Average\:%8.0lf'";
+ $rrd_options .= " 'GPRINT:".$stat.":MAX:Maximum\:%8.0lf\\n'";
+}
+
+# Add total value
+$rrd_options .= " 'CDEF:cdeftotal=PerfAA,PerfnonAA,+'";
+$rrd_options .= " 'LINE1:cdeftotal#000000FF:Total'";
+$filler = 16 - strlen("Total");
+$current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+$rrd_options .= " 'GPRINT:cdeftotal:LAST:".$current_pad."Current\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:AVERAGE:Average\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:MAX:Maximum\:%8.0lf\\n'";
+
diff --git a/html/includes/graphs/device/ib_dns_request_return_codes.inc.php b/html/includes/graphs/device/ib_dns_request_return_codes.inc.php
new file mode 100644
index 000000000..180f6ebd4
--- /dev/null
+++ b/html/includes/graphs/device/ib_dns_request_return_codes.inc.php
@@ -0,0 +1,52 @@
+ '#74C366FF',
+ 'failure' => '#007283FF',
+ 'nxdomain' => '#FFAB00FF',
+ 'nxrrset' => '#B1441EFF',
+);
+
+$i = 0;
+foreach ($stats as $stat => $color) {
+ $i++;
+ $rrd_list[$i]['filename'] = $rrd_filename;
+ $rrd_list[$i]['descr'] = ucfirst ($stat);
+ $rrd_list[$i]['ds'] = $stat;
+
+ # Set up DEFs
+ $rrd_options .= " DEF:".$stat."=".$rrd_filename.':'.$stat.':AVERAGE ';
+
+ # Set up CDEFS to multiply with 1 to get per second value
+ $rrd_options .= " 'CDEF:cdef".$stat."=".$stat.",1,*'";
+
+ # Set up area graphing with stacking
+ if ( $i == "0" ) {
+ $rrd_options .= " 'AREA:cdef".$stat . $color.":".ucfirst($stat)."'";
+ } else {
+ $rrd_options .= " 'AREA:cdef".$stat . $color.":".ucfirst($stat).":STACK'";
+ }
+
+ # Set up legend, with consistent indent
+ $filler = 15 - strlen($stat);
+ $current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+ $rrd_options .= " 'GPRINT:cdef".$stat.":LAST: ".$current_pad."Current\:%8.0lf%s'";
+ $rrd_options .= " 'GPRINT:cdef".$stat.":AVERAGE:Average\:%8.0lf'";
+ $rrd_options .= " 'GPRINT:cdef".$stat.":MAX:Maximum\:%8.0lf\\n'";
+
+ $statstring .= "cdef".$stat.",";
+}
+
+# Add total value
+$rrd_options .= " 'CDEF:cdeftotal=".$statstring."+,+,+'";
+$rrd_options .= " 'LINE1:cdeftotal#000000FF:Total'";
+$filler = 16 - strlen("Total");
+$current_pad = str_pad("", $filler, ' ', STR_PAD_LEFT);
+$rrd_options .= " 'GPRINT:cdeftotal:LAST:".$current_pad."Current\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:AVERAGE:Average\:%8.0lf'";
+$rrd_options .= " 'GPRINT:cdeftotal:MAX:Maximum\:%8.0lf\\n'";
diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php
index 26f58e992..c3300e0d9 100644
--- a/includes/definitions.inc.php
+++ b/includes/definitions.inc.php
@@ -1,5 +1,6 @@
$ds1,
+ 'failure' => $ds2,
+ 'reject' => $ds3,
+ 'prereq_reject' => $ds4,
+);
+
+
+rrdtool_update($rrdfile, $fields);
+$graphs['ib_dns_dyn_updates'] = true;
+
+
+##################
+# Create dns performance graph (latency)
+##################
+$rrdfile = $config['rrd_dir'].'/'.$device['hostname'].'/ib_dns_performance.rrd';
+
+$mibs = '+IB-PLATFORMONE-MIB';
+$oids = '
+ IB-PLATFORMONE-MIB::ibNetworkMonitorDNSNonAAT1AvgLatency.0
+ IB-PLATFORMONE-MIB::ibNetworkMonitorDNSAAT1AvgLatency.0';
+
+$data = snmp_get_multi(
+ $device,
+ $oids,
+ '-OQUs',
+ $mibs);
+
+$ds1 = $data[0]['ibNetworkMonitorDNSAAT1AvgLatency'];
+$ds2 = $data[0]['ibNetworkMonitorDNSNonAAT1AvgLatency'];
+
+if (!is_file($rrdfile)) {
+ rrdtool_create(
+ $rrdfile,
+ 'DS:PerfAA:GAUGE:600:0:U
+ DS:PerfnonAA:GAUGE:600:0:U '.$config['rrd_rra']);
+}
+
+$fields = array(
+ 'PerfAA' => $ds1,
+ 'PerfnonAA' => $ds2,
+);
+
+rrdtool_update($rrdfile, $fields);
+$graphs['ib_dns_performance'] = true;
+
+##################
+# Create dns request return code graph
+##################
+$rrdfile = $config['rrd_dir'].'/'.$device['hostname'].'/ib_dns_request_return_codes.rrd';
+
+$mibs = '+IB-DNSONE-MIB';
+$oids = '
+ IB-DNSONE-MIB::ibBindZoneFailure.\"summary\"
+ IB-DNSONE-MIB::ibBindZoneNxDomain.\"summary\"
+ IB-DNSONE-MIB::ibBindZoneNxRRset.\"summary\"
+ IB-DNSONE-MIB::ibBindZoneSuccess.\"summary\"';
+
+$data = snmp_get_multi(
+ $device,
+ $oids,
+ '-OQUs',
+ $mibs);
+
+$ds1 = $data['"summary"']['ibBindZoneSuccess'];
+$ds2 = $data['"summary"']['ibBindZoneFailure'];
+$ds3 = $data['"summary"']['ibBindZoneNxDomain'];
+$ds4 = $data['"summary"']['ibBindZoneNxRRset'];
+
+
+if (!is_file($rrdfile)) {
+ rrdtool_create(
+ $rrdfile,
+ 'DS:success:DERIVE:600:0:U
+ DS:failure:DERIVE:600:0:U
+ DS:nxdomain:DERIVE:600:0:U
+ DS:nxrrset:DERIVE:600:0:U '.$config['rrd_rra']);
+}
+
+$fields = array(
+ 'success' => $ds1,
+ 'failure' => $ds2,
+ 'nxdomain' => $ds3,
+ 'nxrrset' => $ds4,
+);
+
+rrdtool_update($rrdfile, $fields);
+$graphs['ib_dns_request_return_codes'] = true;
+
+
+##################
+# Create dhcp messages graph
+##################
+$rrdfile = $config['rrd_dir'].'/'.$device['hostname'].'/ib_dhcp_messages.rrd';
+
+$mibs = '+IB-DHCPONE-MIB';
+$oids = '
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfAcks.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfDeclines.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfDiscovers.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfInforms.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfNacks.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfOffers.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfOthers.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfReleases.0
+ IB-DHCPONE-MIB::ibDhcpTotalNoOfRequests.0';
+
+$data = snmp_get_multi(
+ $device,
+ $oids,
+ '-OQUs',
+ $mibs);
+
+$ds1 = $data[0]['ibDhcpTotalNoOfAcks'];
+$ds2 = $data[0]['ibDhcpTotalNoOfDeclines'];
+$ds3 = $data[0]['ibDhcpTotalNoOfDiscovers'];
+$ds4 = $data[0]['ibDhcpTotalNoOfInforms'];
+$ds5 = $data[0]['ibDhcpTotalNoOfNacks'];
+$ds6 = $data[0]['ibDhcpTotalNoOfOffers'];
+$ds7 = $data[0]['ibDhcpTotalNoOfOthers'];
+$ds8 = $data[0]['ibDhcpTotalNoOfReleases'];
+$ds9 = $data[0]['ibDhcpTotalNoOfRequests'];
+
+if (!is_file($rrdfile)) {
+ rrdtool_create(
+ $rrdfile,
+ 'DS:ack:DERIVE:600:0:U
+ DS:decline:DERIVE:600:0:U
+ DS:discover:DERIVE:600:0:U
+ DS:inform:DERIVE:600:0:U
+ DS:nack:DERIVE:600:0:U
+ DS:offer:DERIVE:600:0:U
+ DS:other:DERIVE:600:0:U
+ DS:release:DERIVE:600:0:U
+ DS:request:DERIVE:600:0:U '.$config['rrd_rra']);
+}
+
+$fields = array(
+ 'ack' => $ds1,
+ 'decline' => $ds2,
+ 'discover' => $ds3,
+ 'inform' => $ds4,
+ 'nack' => $ds5,
+ 'offer' => $ds6,
+ 'other' => $ds7,
+ 'release' => $ds8,
+ 'request' => $ds9,
+);
+
+rrdtool_update($rrdfile, $fields);
+$graphs['ib_dhcp_messages'] = true;
+
+