diff --git a/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/details.php b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/details.php
new file mode 100644
index 0000000..448ea46
--- /dev/null
+++ b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/details.php
@@ -0,0 +1,104 @@
+<?php
+include("include.php");
+?>
+<html>
+<center>
+<img src=logo.gif>
+<?php
+if (isset($_GET['sensor_name']))
+    $sensor_name = $_GET['sensor_name'];
+else
+    {
+    echo "<br>Please provide a sensor_name";
+    exit(1);
+    }
+
+if (isset($_GET['ip']))
+    $ip = $_GET['ip'];
+else
+    {
+    echo "<br>Please provide an ip address";
+    exit(1);
+    }
+                                                                                                                             
+echo "<h3>";
+if (strpos($ip, "/") === FALSE)
+	echo "$ip - ".gethostbyaddr($ip)."</h3>";
+else
+	echo "Total - $ip</h3>";
+
+$db = ConnectDb();
+
+if ($ip == "0.0.0.0/0")
+	{
+    $rxtable = "bd_rx_total_log";
+	$txtable = "bd_tx_total_log";
+	}
+else
+	{
+    $rxtable = "bd_rx_log";
+	$txtable = "bd_tx_log";
+	}
+
+$sql = "select rx.scale as rxscale, tx.scale as txscale, tx.total+rx.total as total, tx.total as sent,
+rx.total as received, tx.tcp+rx.tcp as tcp, tx.udp+rx.udp as udp,
+tx.icmp+rx.icmp as icmp, tx.http+rx.http as http,
+tx.p2p+rx.p2p as p2p, tx.ftp+rx.ftp as ftp
+from
+                                                                                                                             
+(SELECT ip, max(total/sample_duration)*8 as scale, sum(total) as total, sum(tcp) as tcp, sum(udp) as udp, sum(icmp) as icmp,
+sum(http) as http, sum(p2p) as p2p, sum(ftp) as ftp
+from sensors, $txtable
+where sensor_name = '$sensor_name'
+and sensors.sensor_id = ".$txtable.".sensor_id
+$sql_subnet
+group by ip) as tx,
+                                                                                                                             
+(SELECT ip, max(total/sample_duration)*8 as scale, sum(total) as total, sum(tcp) as tcp, sum(udp) as udp, sum(icmp) as icmp,
+sum(http) as http, sum(p2p) as p2p, sum(ftp) as ftp
+from sensors, $rxtable
+where sensor_name = '$sensor_name'
+and sensors.sensor_id = ".$rxtable.".sensor_id
+$sql_subnet
+group by ip) as rx
+                                                                                                                             
+where tx.ip = rx.ip;";
+//error_log($sql); printf('</center><tt>%s</tt><center>', $sql);
+$db = ConnectDb();
+$result = $db->query($sql);
+echo "<table width=100% border=1 cellspacing=0><tr><td>Ip<td>Name<td>Total<td>Sent<td>Received<td>tcp<td>udp<td>icmp<td>http<td>smtp<td>ftp";
+$r = $result->fetch();
+$db = NULL;
+echo "<tr><td>";
+if (strpos($ip, "/") === FALSE)
+	echo "$ip<td>".gethostbyaddr($ip);
+else
+	echo "Total<td>$ip";
+echo fmtb($r['total']).fmtb($r['sent']).fmtb($r['received']).
+	fmtb($r['tcp']).fmtb($r['udp']).fmtb($r['icmp']).fmtb($r['http']).
+    fmtb($r['p2p']).fmtb($r['ftp']);
+echo "</table></center>";
+
+echo "<center><h4>Daily</h4></center>";
+echo "Send:<br><img src=graph.php?ip=$ip&sensor_name=".$sensor_name."&table=$txtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
+echo "Receive:<br><img src=graph.php?ip=$ip&sensor_name=".$sensor_name."&table=$rxtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
+
+echo "<center><h4>Weekly</h4></center>";
+echo "Send:<br><img src=graph.php?interval=".INT_WEEKLY."&ip=$ip&sensor_name=$sensor_name&table=$txtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
+echo "Receive:<br><img src=graph.php?interval=".INT_WEEKLY."&ip=$ip&sensor_name=$sensor_name&table=$rxtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
+
+echo "<center><h4>Monthly</h4></center>";
+echo "Send:<br><img src=graph.php?interval=".INT_MONTHLY."&ip=$ip&sensor_name=$sensor_name&table=$txtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
+echo "Receive:<br><img src=graph.php?interval=".INT_MONTHLY."&ip=$ip&sensor_name=$sensor_name&table=$rxtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
+
+echo "<center><h4>Yearly</h4></center>";
+echo "Send:<br><img src=graph.php?interval=".INT_YEARLY."&ip=$ip&sensor_name=$sensor_name&table=$txtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
+echo "Receive:<br><img src=graph.php?interval=".INT_YEARLY."&ip=$ip&sensor_name=$sensor_name&table=$rxtable&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+echo "<img src=legend.gif><br>";
diff --git a/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/footer.php b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/footer.php
new file mode 100644
index 0000000..b342825
--- /dev/null
+++ b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/footer.php
@@ -0,0 +1,3 @@
+<?php
+echo("Page load completed in ". (time() - $starttime) ." seconds"); 
+?>
diff --git a/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/graph.php b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/graph.php
new file mode 100644
index 0000000..82df317
--- /dev/null
+++ b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/graph.php
@@ -0,0 +1,455 @@
+<?php
+require("include.php");
+
+// Returns x location of any given timestamp
+function ts2x($ts)
+	{
+	global $timestamp, $width, $interval;
+	return(($ts-$timestamp)*(($width-XOFFSET) / $interval) + XOFFSET);
+	}
+
+// If we have multiple IP's in a result set we need to total the average of each IP's samples
+function AverageAndAccumulate()
+	{
+	global $Count, $total, $icmp, $udp, $tcp, $ftp, $http, $p2p, $YMax;
+	global $a_total, $a_icmp, $a_udp, $a_tcp, $a_ftp, $a_http, $a_p2p;
+
+	foreach ($Count as $key => $number)
+    	{
+	    $total[$key] /= $number;
+    	$icmp[$key] /= $number;
+    	$udp[$key] /= $number;
+    	$tcp[$key] /= $number;
+    	$ftp[$key] /= $number;
+    	$http[$key] /= $number;
+    	$p2p[$key] /= $number;
+    	}
+
+	foreach ($Count as $key => $number)
+		{
+		$a_total[$key] += $total[$key];
+		$a_icmp[$key] += $icmp[$key];
+		$a_udp[$key] += $udp[$key];
+		$a_tcp[$key] += $tcp[$key];
+		$a_ftp[$key] += $ftp[$key];
+		$a_http[$key] += $http[$key];
+		$a_p2p[$key] += $p2p[$key];
+
+		if ($a_total[$key] > $YMax)
+			$YMax = $a_total[$key];
+		}
+
+	unset($GLOBALS['total'], $GLOBALS['icmp'], $GLOBALS['udp'], $GLOBALS['tcp'], $GLOBALS['ftp'], $GLOBALS['http'], $GLOBALS['p2p'], $GLOBALS['Count']);
+
+	$total = array();
+	$icmp = array();
+	$udp = array();
+	$tcp = array();
+	$ftp = array();
+	$http = array();
+	$p2p = array();
+	$Count = array();
+	}
+
+$db = ConnectDb();
+
+// Get parameters
+
+if (isset($_GET['width']))
+    $width = $_GET['width'];
+else
+	$width = DFLT_WIDTH;
+
+if (isset($_GET['height']))
+    $height = $_GET['height'];
+else
+	$height = DFLT_HEIGHT;
+
+if (isset($_GET['interval']))
+    $interval = $_GET['interval'];
+else
+	$interval = DFLT_INTERVAL;
+
+if (isset($_GET['ip']))
+    $ip = $_GET['ip'];
+else
+	exit(1);
+
+if (isset($_GET['sensor_name']))
+	$sensor_name = $_GET['sensor_name'];
+else
+	exit(1);
+
+if (isset($_GET['timestamp']))
+    $timestamp = $_GET['timestamp'];
+else
+	$timestamp = time() - $interval + (0.05*$interval);
+
+if (isset($_GET['table']))
+    $table = $_GET['table'];
+else
+	$table = "bd_rx_log";
+
+if (isset($_GET['yscale']))
+    $yscale = $_GET['yscale'];
+
+$total = array();
+$icmp = array();
+$udp = array();
+$tcp = array();
+$ftp = array();
+$http = array();
+$p2p = array();
+$Count = array();
+
+// Accumulator
+$a_total = array();
+$a_icmp = array();
+$a_udp = array();
+$a_tcp = array();
+$a_ftp = array();
+$a_http = array();
+$a_p2p = array();
+
+$sql_subnet = prepare_sql_subnet($ip);
+$sql = "select *, timestamp as ts from sensors, $table where sensors.sensor_id = ".$table.".sensor_id $sql_subnet and sensor_name = '$sensor_name' and timestamp > $timestamp and timestamp < ".($timestamp+$interval)." order by ip;";
+//error_log($sql);
+$result = $db->query($sql);
+
+// The SQL statement pulls the data out of the database ordered by IP address, that way we can average each
+// datapoint for each IP address to provide smoothing and then toss the smoothed value into the accumulator
+// to provide accurate total traffic rate.
+
+while ($row = $result->fetch())
+	{
+	if ($row['ip'] != $last_ip)
+		{
+		AverageAndAccumulate();
+		$last_ip = $row['ip'];
+		}
+
+	$x = ($row['ts']-$timestamp)*(($width-XOFFSET)/$interval)+XOFFSET;
+	$xint = (int) $x;
+
+	//echo "xint: ".$xint."<br>";
+	$Count[$xint]++;
+
+	if ($row['total']/$row['sample_duration'] > $SentPeak)
+		$SentPeak = $row['total']/$row['sample_duration'];
+	$TotalSent += $row['total'];
+	$total[$xint] += $row['total']/$row['sample_duration'];
+	$icmp[$xint] += $row['icmp']/$row['sample_duration'];
+	$udp[$xint] += $row['udp']/$row['sample_duration'];
+	$tcp[$xint] += $row['tcp']/$row['sample_duration'];
+	$ftp[$xint] += $row['ftp']/$row['sample_duration'];
+	$http[$xint] += $row['http']/$row['sample_duration'];
+	$p2p[$xint] += $row['p2p']/$row['sample_duration'];
+	}
+
+// One more time for the last IP
+AverageAndAccumulate();
+
+// Pull the data out of Accumulator
+$total = $a_total;
+$icmp = $a_icmp;
+$udp = $a_udp;
+$tcp = $a_tcp;
+$ftp = $a_ftp;
+$http = $a_http;
+$p2p = $a_p2p;
+
+$YMax += $YMax*0.05;    // Add an extra 5%
+
+// if a y scale was specified override YMax
+if (isset($yscale)&& $yscale > 0)
+    $YMax = $yscale/8;
+
+// Plot the data
+
+header("Content-type: image/png");
+
+$im = imagecreate($width, $height);
+$white = imagecolorallocate($im, 255, 255, 255);
+$purple = ImageColorAllocate($im, 255, 0, 255);
+$green  = ImageColorAllocate($im, 0, 255, 0);
+$blue   = ImageColorAllocate($im, 0, 0, 255);
+$lblue  = ImageColorAllocate($im, 128, 128, 255);
+$brown  = ImageColorAllocate($im, 128, 0, 0);
+$red    = ImageColorAllocate($im, 255, 0, 0);
+$black  = ImageColorAllocate($im, 0, 0, 0);
+
+for($Counter=XOFFSET+1; $Counter < $width; $Counter++)
+	{
+	if (isset($total[$Counter]))
+		{
+		// Convert the bytes/sec to y coords
+        $total[$Counter] = ($total[$Counter]*($height-YOFFSET))/$YMax;
+		$tcp[$Counter] = ($tcp[$Counter]*($height-YOFFSET))/$YMax;
+        $ftp[$Counter] = ($ftp[$Counter]*($height-YOFFSET))/$YMax;
+		$http[$Counter] = ($http[$Counter]*($height-YOFFSET))/$YMax;
+		$p2p[$Counter] = ($p2p[$Counter]*($height-YOFFSET))/$YMax;
+        $udp[$Counter] = ($udp[$Counter]*($height-YOFFSET))/$YMax;
+		$icmp[$Counter] = ($icmp[$Counter]*($height-YOFFSET))/$YMax;
+
+		// Stack 'em up!
+		// Total is stacked from the bottom
+		// Icmp is on the bottom too
+		// Udp is stacked on top of icmp
+		$udp[$Counter] += $icmp[$Counter];
+		// TCP and p2p are stacked on top of Udp
+		$tcp[$Counter] += $udp[$Counter];
+		$p2p[$Counter] += $udp[$Counter];
+ 		// Http is stacked on top of p2p
+		$http[$Counter] += $p2p[$Counter];
+		// Ftp is stacked on top of http
+        $ftp[$Counter] += $http[$Counter];
+
+		// Plot them!
+		//echo "$Counter:".$Counter." (h-y)-t:".($height-YOFFSET) - $total[$Counter]." h-YO-1:".$height-YOFFSET-1;
+        ImageLine($im, $Counter, ($height-YOFFSET) - $icmp[$Counter], $Counter, $height-YOFFSET-1, $red);
+        ImageLine($im, $Counter, ($height-YOFFSET) - $udp[$Counter], $Counter, ($height-YOFFSET) - $icmp[$Counter] - 1, $brown);
+        ImageLine($im, $Counter, ($height-YOFFSET) - $tcp[$Counter], $Counter, ($height-YOFFSET) - $udp[$Counter] - 1, $green);
+        ImageLine($im, $Counter, ($height-YOFFSET) - $p2p[$Counter], $Counter, ($height-YOFFSET) - $udp[$Counter] - 1, $purple);
+        ImageLine($im, $Counter, ($height-YOFFSET) - $http[$Counter], $Counter, ($height-YOFFSET) - $p2p[$Counter] - 1, $blue);
+        ImageLine($im, $Counter, ($height-YOFFSET) - $ftp[$Counter], $Counter, ($height-YOFFSET) - $http[$Counter] - 1, $lblue);
+		}
+//	else
+//		echo $Counter." not set<br>";
+	}
+
+// Margin Text
+if ($SentPeak < 1024/8)
+	$txtPeakSendRate = sprintf("Peak Send Rate: %.1f KBits/sec", $SentPeak*8);
+else if ($SentPeak < (1024*1024)/8)
+    $txtPeakSendRate = sprintf("Peak Send Rate: %.1f MBits/sec", ($SentPeak*8.0)/1024.0);
+else
+	$txtPeakSendRate = sprintf("Peak Send Rate: %.1f GBits/sec", ($SentPeak*8.0)/(1024.0*1024.0));
+
+if ($TotalSent < 1024)
+	$txtTotalSent = sprintf("Sent %.1f KBytes", $TotalSent);
+else if ($TotalSent < 1024*1024)
+	$txtTotalSent = sprintf("Sent %.1f MBytes", $TotalSent/1024.0);
+else
+	$txtTotalSent = sprintf("Sent %.1f GBytes", $TotalSent/(1024.0*1024.0));
+
+ImageString($im, 2, XOFFSET+5,  $height-20, $txtTotalSent, $black);
+ImageString($im, 2, $width/2+XOFFSET/2,  $height-20, $txtPeakSendRate, $black);
+
+// Draw X Axis
+
+ImageLine($im, 0, $height-YOFFSET, $width, $height-YOFFSET, $black);
+
+// Day/Month Seperator bars
+
+if ((24*60*60*($width-XOFFSET))/$interval > ($width-XOFFSET)/10)
+	{
+	$ts = getdate($timestamp);
+	$MarkTime = mktime(0, 0, 0, $ts['mon'], $ts['mday'], $ts['year']);
+
+    $x = ts2x($MarkTime);
+    while ($x < XOFFSET)
+    	{
+        $MarkTime += (24*60*60);
+	    $x = ts2x($MarkTime);
+        }
+
+    while ($x < ($width-10))
+    	{
+        // Day Lines
+        ImageLine($im, $x, 0, $x, $height-YOFFSET, $black);
+        ImageLine($im, $x+1, 0, $x+1, $height-YOFFSET, $black);
+
+        $txtDate = strftime("%a, %b %d", $MarkTime);
+        ImageString($im, 2, $x-30,  $height-YOFFSET+10, $txtDate, $black);
+
+        // Calculate Next x
+        $MarkTime += (24*60*60);
+	    $x = ts2x($MarkTime);
+        }
+	}
+else if ((24*60*60*30*($width-XOFFSET))/$interval > ($width-XOFFSET)/10)
+	{
+	// Monthly Bars
+	$ts = getdate($timestamp);
+	$month = $ts['mon'];
+	$MarkTime = mktime(0, 0, 0, $month, 1, $ts['year']);
+
+    $x = ts2x($MarkTime);
+    while ($x < XOFFSET)
+    	{
+		$month++;
+        $MarkTime = mktime(0, 0, 0, $month, 1, $ts['year']);
+	    $x = ts2x($MarkTime);
+        }
+
+    while ($x < ($width-10))
+    	{
+        // Day Lines
+        ImageLine($im, $x, 0, $x, $height-YOFFSET, $black);
+        ImageLine($im, $x+1, 0, $x+1, $height-YOFFSET, $black);
+
+        $txtDate = strftime("%b, %Y", $MarkTime);
+        ImageString($im, 2, $x-25,  $height-YOFFSET+10, $txtDate, $black);
+
+        // Calculate Next x
+		$month++;
+        $MarkTime = mktime(0, 0, 0, $month, 1, $ts['year']);
+	    $x = ts2x($MarkTime);
+        }
+	}
+else
+	{
+	// Year Bars
+    $ts = getdate($timestamp);
+    $year = $ts['year'];
+    $MarkTime = mktime(0, 0, 0, 1, 1, $year);
+
+    $x = ts2x($MarkTime);
+    while ($x < XOFFSET)
+        {
+        $year++;
+        $MarkTime = mktime(0, 0, 0, 1, 1, $year);
+        $x = ts2x($MarkTime);
+        }
+
+    while ($x < ($width-10))
+        {
+        // Day Lines
+        ImageLine($im, $x, 0, $x, $height-YOFFSET, $black);
+        ImageLine($im, $x+1, 0, $x+1, $height-YOFFSET, $black);
+
+        $txtDate = strftime("%b, %Y", $MarkTime);
+        ImageString($im, 2, $x-25,  $height-YOFFSET+10, $txtDate, $black);
+
+        // Calculate Next x
+        $year++;
+        $MarkTime = mktime(0, 0, 0, 1, 1, $year);
+        $x = ts2x($MarkTime);
+        }
+	}
+
+// Draw Major Tick Marks
+if ((6*60*60*($width-XOFFSET))/$interval > 10) // pixels per 6 hours is more than 2
+	$MarkTimeStep = 6*60*60; // Major ticks are 6 hours
+else if ((24*60*60*($width-XOFFSET))/$interval > 10)
+	$MarkTimeStep = 24*60*60; // Major ticks are 24 hours;
+else if ((24*60*60*30*($width-XOFFSET))/$interval > 10)
+	{
+	// Major tick marks are months
+	$MarkTimeStep = 0; // Skip the standard way of drawing major tick marks below
+
+    $ts = getdate($timestamp);
+    $month = $ts['mon'];
+    $MarkTime = mktime(0, 0, 0, $month, 1, $ts['year']);
+
+    $x = ts2x($MarkTime);
+    while ($x < XOFFSET)
+        {
+        $month++;
+        $MarkTime = mktime(0, 0, 0, $month, 1, $ts['year']);
+        $x = ts2x($MarkTime);
+        }
+
+    while ($x < ($width-10))
+        {
+        // Day Lines
+		$date = getdate($MarkTime);
+		if ($date['mon'] != 1)
+			{
+	        ImageLine($im, $x, $height-YOFFSET-5, $x, $height-YOFFSET+5, $black);
+    	    $txtDate = strftime("%b", $MarkTime);
+        	ImageString($im, 2, $x-5,  $height-YOFFSET+10, $txtDate, $black);
+          	}
+
+        // Calculate Next x
+        $month++;
+        $MarkTime = mktime(0, 0, 0, $month, 1, $ts['year']);
+        $x = ts2x($MarkTime);
+        }
+	}
+else
+	$MarkTimeStep = 0; // Skip Major Tick Marks
+
+if ($MarkTimeStep)
+	{
+	$ts = getdate($timestamp);
+	$MarkTime = mktime(0, 0, 0, $ts['mon'], $ts['mday'], $ts['year']);
+	$x = ts2x($MarkTime);
+
+	while ($x < ($width-10))
+		{
+    	if ($x > XOFFSET)
+			{
+    	    ImageLine($im, $x, $height-YOFFSET-5, $x, $height-YOFFSET+5, $black);
+	        }
+		$MarkTime += $MarkTimeStep;
+	    $x = ts2x($MarkTime);
+		}
+	}
+
+// Draw Minor Tick marks
+if ((60*60*($width-XOFFSET))/$interval > 4) // pixels per hour is more than 2
+	$MarkTimeStep = 60*60;  // Minor ticks are 1 hour
+else if ((6*60*60*($width-XOFFSET))/$interval > 4)
+	$MarkTimeStep = 6*60*60; // Minor ticks are 6 hours
+else if ((24*60*60*($width-XOFFSET))/$interval > 4)
+	$MarkTimeStep = 24*60*60;
+else
+	$MarkTimeStep = 0; // Skip minor tick marks
+
+if ($MarkTimeStep)
+	{
+	$ts = getdate($timestamp);
+	$MarkTime = mktime(0, 0, 0, $ts['mon'], $ts['mday'], $ts['year']);
+	$x = ts2x($MarkTime);
+
+	while ($x < ($width-10))
+		{
+    	if ($x > XOFFSET)
+			{
+    	    ImageLine($im, $x, $height-YOFFSET, $x, $height-YOFFSET+5, $black);
+	        }
+		$MarkTime += $MarkTimeStep;
+	    $x = ts2x($MarkTime);
+		}
+	}
+
+// Draw Y Axis
+ImageLine($im, XOFFSET, 0, XOFFSET, $height, $black);
+
+$YLegend = 'k';
+$Divisor = 1;
+if ($YMax*8 > 1024*2)
+	{
+    $Divisor = 1024;    // Display in m
+    $YLegend = 'm';
+    }
+
+if ($YMax*8 > 1024*1024*2)
+	{
+    $Divisor = 1024*1024; // Display in g
+    $YLegend = 'g';
+	}
+
+if ($YMax*8 > 1024*1024*1024*2)
+	{
+    $Divisor = 1024*1024*1024; // Display in t
+    $YLegend = 't';
+    }
+
+$YStep = $YMax/10;
+if ($YStep < 1)
+	$YStep=1;
+$YTic=$YStep;
+
+while ($YTic <= ($YMax - $YMax/10))
+	{
+    $y = ($height-YOFFSET)-(($YTic*($height-YOFFSET))/$YMax);
+	ImageLine($im, XOFFSET, $y, $width, $y, $black);
+    $txtYLegend = sprintf("%4.1f %sbits/s", (8.0*$YTic)/$Divisor, $YLegend);
+    ImageString($im, 2, 3, $y-7, $txtYLegend, $black);
+	$YTic += $YStep;
+	}
+
+imagepng($im);
+imagedestroy($im);
diff --git a/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/include.php b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/include.php
new file mode 100644
index 0000000..5195098
--- /dev/null
+++ b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/include.php
@@ -0,0 +1,69 @@
+<?php
+error_reporting(E_ALL & ~(E_NOTICE|E_STRICT));
+define("INT_DAILY", 60*60*24*2);
+define("INT_WEEKLY", 60*60*24*8);
+define("INT_MONTHLY", 60*60*24*35);
+define("INT_YEARLY", 60*60*24*400);
+
+define("XOFFSET", 90);
+define("YOFFSET", 45);
+
+require("config.conf.php");
+
+function ConnectDb() {
+    global $db_connect_string;
+    try {
+        $db = new PDO($db_connect_string);
+    } catch (PDOException $ex) {
+        die("DB Error, could not connect to database: "  . $ex->getMessage());
+    }
+    return $db;
+}
+
+function fmtb($kbytes)
+	{
+	$Max = 1024;
+	$Output = $kbytes;
+	$Suffix = 'K';
+
+	if ($Output > $Max)
+		{
+		$Output /= 1024;
+		$Suffix = 'M';
+		}
+
+	if ($Output > $Max)
+		{
+		$Output /= 1024;
+		$Suffix = 'G';
+		}
+
+	if ($Output > $Max)
+		{
+		$Output /= 1024;
+		$Suffix = 'T';
+		}
+
+	return(sprintf("<td align=right><tt>%.1f%s</td>", $Output, $Suffix));
+	}
+
+function ip2s32($ip) {
+    $i = ip2long($ip);
+    return ($i & 0x80000000 ? '-' . ((~$i & 0x7fffffff)+1) : ''. ($i & 0x7fffffff));
+}
+
+function prepare_sql_subnet($subnet) {
+    list($snet, $smask) = explode('/', $subnet);
+    $inet = ip2s32($snet);
+    if($smask > 0 && $smask < 32) {
+        $mask = -1 << (32 - (int)$smask);
+        return "and (ip & $mask = $inet)";
+    } elseif ($inet) {
+        return "and ip = " . $inet;
+    }
+    return "";
+}
+
+$starttime = time();
+set_time_limit(300);
+?>
diff --git a/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/index.php b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/index.php
new file mode 100644
index 0000000..c8b8598
--- /dev/null
+++ b/external/subpack/utils/bandwidthd/files/phphtdocs-sqlite/index.php
@@ -0,0 +1,190 @@
+<?php
+include("include.php");
+?>
+<html>
+<center>
+<img src=logo.gif>
+<?php
+
+$sensor_name = 'default';
+
+// Get variables from url
+
+if (isset($_GET['interval']) && $_GET['interval'] != "none")
+    $interval = $_GET['interval'];
+
+if (isset($_GET['timestamp']) && $_GET['timestamp'] != "none")
+    $timestamp = $_GET['timestamp'];
+
+if (isset($_GET['subnet']) && $_GET['subnet'] != "none")
+    $subnet = $_GET['subnet'];
+
+if (isset($_GET['limit']) && $_GET['limit'] != "none")
+	$limit = $_GET['limit'];
+
+
+$db = ConnectDb();
+?>
+<FORM name="navigation" method="get">
+<table width=100% cellspacing=0 cellpadding=5 border=1>
+<tr>
+<td><SELECT name="interval">
+<OPTION value="none">--Select An Interval--
+<OPTION value=<?php echo INT_DAILY?> <?php echo $interval==INT_DAILY?"SELECTED":""?>>Daily
+<OPTION value=<?php echo INT_WEEKLY?> <?php echo $interval==INT_WEEKLY?"SELECTED":""?>>Weekly
+<OPTION value=<?php echo INT_MONTHLY?> <?php echo $interval==INT_MONTHLY?"SELECTED":""?>>Monthly
+<OPTION value=<?php echo INT_YEARLY?> <?php echo $interval==INT_YEARLY?"SELECTED":""?>>Yearly
+<OPTION value=<?php echo 24*60*60?> <?php echo $interval==24*60*60?"SELECTED":""?>>24hrs
+<OPTION value=<?php echo 30*24*60*60?> <?php echo $interval==30*24*60*60?"SELECTED":""?>>30days
+</select>
+
+<td><SELECT name="limit">
+<OPTION value="none">--How Many Results--
+<OPTION value=20 <?php echo $limit==20?"SELECTED":""?>>20
+<OPTION value=50 <?php echo $limit==50?"SELECTED":""?>>50
+<OPTION value=100 <?php echo $limit==100?"SELECTED":""?>>100
+<OPTION value=all <?php echo $limit=="all"?"SELECTED":""?>>All
+</select>
+
+<td>Subnet Filter:<input name=subnet value="<?php echo isset($subnet)?$subnet:"0.0.0.0/0"?>"> 
+<input type=submit value="Go">
+</table>
+</FORM>
+<?php 
+// Set defaults
+if (!isset($interval))
+	$interval = DFLT_INTERVAL;
+
+if (!isset($timestamp))
+	$timestamp = time() - $interval + (0.05*$interval);
+
+if (!isset($limit))
+	$limit = 20;
+
+// Validation
+if (!isset($sensor_name))
+	exit(0);
+
+// Print Title
+
+if (isset($limit))
+	echo "<h2>Top $limit - $sensor_name</h2>";
+else
+	echo "<h2>All Records - $sensor_name</h2>";
+
+// Sqlize the incomming variables
+if (isset($subnet)) {
+    $sql_subnet = prepare_sql_subnet($subnet);
+}
+
+// Sql Statement
+$sql = "select tx.ip, rx.scale as rxscale, tx.scale as txscale, tx.total+rx.total as total, tx.total as sent, 
+rx.total as received, tx.tcp+rx.tcp as tcp, tx.udp+rx.udp as udp,
+tx.icmp+rx.icmp as icmp, tx.http+rx.http as http,
+tx.p2p+rx.p2p as p2p, tx.ftp+rx.ftp as ftp
+from
+
+(SELECT ip, max(total/sample_duration)*8 as scale, sum(total) as total, sum(tcp) as tcp, sum(udp) as udp, sum(icmp) as icmp,
+sum(http) as http, sum(p2p) as p2p, sum(ftp) as ftp
+from sensors, bd_tx_log
+where sensor_name = '$sensor_name'
+and sensors.sensor_id = bd_tx_log.sensor_id
+$sql_subnet
+and timestamp > $timestamp and timestamp < ".($timestamp+$interval)."
+group by ip) as tx,
+
+(SELECT ip, max(total/sample_duration)*8 as scale, sum(total) as total, sum(tcp) as tcp, sum(udp) as udp, sum(icmp) as icmp,
+sum(http) as http, sum(p2p) as p2p, sum(ftp) as ftp
+from sensors, bd_rx_log
+where sensor_name = '$sensor_name'
+and sensors.sensor_id = bd_rx_log.sensor_id
+$sql_subnet
+and timestamp > $timestamp and timestamp < ".($timestamp+$interval)."
+group by ip) as rx
+
+where tx.ip = rx.ip
+order by total desc;";
+
+//echo "</center><pre>$sql</pre><center>"; error_log($sql);
+$pdoResult = $db->query($sql);
+$result = $pdoResult->fetchAll();
+$db = NULL;
+$num_rows = count($result);
+if ($limit == "all")
+	$limit = $num_rows;
+
+echo "<table width=100% border=1 cellspacing=0><tr><td>Ip<td>Name<td>Total<td>Sent<td>Received<td>tcp<td>udp<td>icmp<td>http<td>smtp<td>ftp";
+
+if (!isset($subnet)) // Set this now for total graphs
+	$subnet = "0.0.0.0/0";
+
+// Output Total Line
+echo "<TR><TD><a href=Total>Total</a><TD>$subnet";
+foreach (array("total", "sent", "received", "tcp", "udp", "icmp", "http", "p2p", "ftp") as $key)
+	{
+	for($Counter=0, $Total = 0; $Counter < $num_rows; $Counter++)
+		{
+		$r = $result[$Counter];
+		$Total += $r[$key];
+		}
+	echo fmtb($Total);
+	}
+echo "\n";
+
+// Output Other Lines
+for($Counter=0; $Counter < $num_rows && $Counter < $limit; $Counter++)
+	{
+	$r = $result[$Counter];
+	$r['ip'] = long2ip($r['ip']);
+	echo "<tr><td><a href=#".$r['ip'].">";
+	echo $r['ip']."<td>".gethostbyaddr($r['ip']);
+	echo "</a>";
+	echo fmtb($r['total']).fmtb($r['sent']).fmtb($r['received']).
+		fmtb($r['tcp']).fmtb($r['udp']).fmtb($r['icmp']).fmtb($r['http']).
+		fmtb($r['p2p']).fmtb($r['ftp'])."\n";
+	}
+echo "</table></center>";
+
+// Output Total Graph
+for($Counter=0, $Total = 0; $Counter < $num_rows; $Counter++)
+	{
+	$r = $result[$Counter];
+	$scale = max($r['txscale'], $scale);
+	$scale = max($r['rxscale'], $scale);
+	}
+
+if ($subnet == "0.0.0.0/0")
+	$total_table = "bd_tx_total_log";
+else
+	$total_table = "bd_tx_log";
+echo "<a name=Total><h3><a href=details.php?sensor_name=$sensor_name&ip=$subnet>";
+echo "Total - Total of $subnet</h3>";
+echo "</a>";
+echo "Send:<br><img src=graph.php?ip=$subnet&interval=$interval&sensor_name=".$sensor_name."&table=$total_table><br>";
+echo "<img src=legend.gif><br>\n";
+if ($subnet == "0.0.0.0/0")
+	$total_table = "bd_rx_total_log";
+else
+	$total_table = "bd_rx_log";
+echo "Receive:<br><img src=graph.php?ip=$subnet&interval=$interval&sensor_name=".$sensor_name."&table=$total_table><br>";
+echo "<img src=legend.gif><br>\n";
+
+
+// Output Other Graphs
+for($Counter=0; $Counter < $num_rows && $Counter < $limit; $Counter++)
+	{
+	$r = $result[$Counter];
+	$r['ip'] = long2ip($r['ip']);
+	echo "<a name=".$r['ip']."><h3><a href=details.php?sensor_name=$sensor_name&ip=".$r['ip'].">";
+	if ($r['ip'] == "0.0.0.0")
+		echo "Total - Total of all subnets</h3>";
+	else
+		echo $r['ip']." - ".gethostbyaddr($r['ip'])."</h3>";
+	echo "</a>";
+	echo "Send:<br><img src=graph.php?ip=".$r['ip']."&interval=$interval&sensor_name=".$sensor_name."&table=bd_tx_log&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+	echo "<img src=legend.gif><br>\n";
+	echo "Receive:<br><img src=graph.php?ip=".$r['ip']."&interval=$interval&sensor_name=".$sensor_name."&table=bd_rx_log&yscale=".(max($r['txscale'], $r['rxscale']))."><br>";
+	echo "<img src=legend.gif><br>\n";
+	}
+
+include('footer.php');
