Network based RRD graphs Bytes to Bits

Message ID 29303608-26e9-a531-b181-c6f545117592@fastmail.com
State Superseded
Headers
Series Network based RRD graphs Bytes to Bits |

Commit Message

nateos2g May 24, 2021, 4:31 a.m. UTC
  For proper display of network measurements, Bps (bytes) should be
converted to bps (bits). Bytes are for data/storage (RAM, HDD, SSD,
etc.), bits are for network bandwidth or throughput (NICs, switches,
routers, WiFi adapters, etc.).

Networks transfer data as single bits at a time. It’s both more accurate
and more intuitive to measure network speed in bits per second that a
network connection is transmitting, not the amount of data units, or
bytes, it transmits. Notice all network devices are marketed, measure
and diplay in bits per second.

I simply used RRD CDEF to multiply by 8.

NOTE: Found: "ERROR: rpn expressions without DEF or CDEF variables are
not supported".
Specifically in updateqosgraph, CDEF does not like a number as a
variable name. ie. "204" from $classline[1].

Requires update of the language cache files:
perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
or: update-lang-cache

Found one other asking for this:
https://community.ipfire.org/t/ipfire-bandwidth-usage/1203

Signed-off-by: Nate Oaks <nateos2g@fastmail.com>
---
  config/cfgroot/graphs.pl | 202 +++++++++++++++++++++------------------
  langs/en/cgi-bin/en.pl   |  13 +--
  2 files changed, 117 insertions(+), 98 deletions(-)

  'ovpn add conf' => 'Additional configuration',
  

Comments

Matthias Fischer May 24, 2021, 10:39 a.m. UTC | #1
Hi,

I'd like to test this patch - but it won't apply because 'graphs.pl'
contains *tabs* for identation and your patch only *spaces*.

And: there's a line break in line 398:

...
'outgoing firewall warning' => 'Not selecting source ip or mac ignores
them',
...

This should be *one* line.

Could you please correct this? I downloaded
https://patchwork.ipfire.org/patch/4367/raw/ but - no chance...

Thanks in advance,

Matthias

On 24.05.2021 06:31, nateos2g wrote:
> For proper display of network measurements, Bps (bytes) should be
> converted to bps (bits). Bytes are for data/storage (RAM, HDD, SSD,
> etc.), bits are for network bandwidth or throughput (NICs, switches,
> routers, WiFi adapters, etc.).
> 
> Networks transfer data as single bits at a time. It’s both more accurate
> and more intuitive to measure network speed in bits per second that a
> network connection is transmitting, not the amount of data units, or
> bytes, it transmits. Notice all network devices are marketed, measure
> and diplay in bits per second.
> 
> I simply used RRD CDEF to multiply by 8.
> 
> NOTE: Found: "ERROR: rpn expressions without DEF or CDEF variables are
> not supported".
> Specifically in updateqosgraph, CDEF does not like a number as a
> variable name. ie. "204" from $classline[1].
> 
> Requires update of the language cache files:
> perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
> or: update-lang-cache
> 
> Found one other asking for this:
> https://community.ipfire.org/t/ipfire-bandwidth-usage/1203
> 
> Signed-off-by: Nate Oaks <nateos2g@fastmail.com>
> ---
>   config/cfgroot/graphs.pl | 202 +++++++++++++++++++++------------------
>   langs/en/cgi-bin/en.pl   |  13 +--
>   2 files changed, 117 insertions(+), 98 deletions(-)
> 
> diff --git a/config/cfgroot/graphs.pl b/config/cfgroot/graphs.pl
> index 441d4c483a46..c83ae67bbfc1 100644
> --- a/config/cfgroot/graphs.pl
> +++ b/config/cfgroot/graphs.pl
> @@ -545,28 +545,30 @@ sub updateifgraph {
>           "-1".$period,
>           "-r",
>           "-t ".$Lang::tr{'traffic on'}." ".$interface." 
> ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
> -        "-v ".$Lang::tr{'bytes per second'},
> +        "-v ".$Lang::tr{'bits per second'},
>           "--color=SHADEA".$color{"color19"},
>           "--color=SHADEB".$color{"color19"},
>           "--color=BACK".$color{"color21"},
> "DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/interface/if_octets-".$interface.".rrd:rx:AVERAGE",
> "DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/interface/if_octets-".$interface.".rrd:tx:AVERAGE",
> -        "CDEF:outgoingn=outgoing,-1,*",
> +        "CDEF:outgoingb=outgoing,8,*",
> +        "CDEF:outgoingn=outgoingb,-1,*",
> +        "CDEF:incomingb=incoming,8,*",
>           "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
> - 
> "AREA:incoming".$color{"color12"}."A0:".sprintf("%-20s",$Lang::tr{'incoming 
> traffic in bytes per second'}),
> -        "GPRINT:incoming:MAX:%8.1lf %sBps",
> -        "GPRINT:incoming:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:incoming:MIN:%8.1lf %sBps",
> -        "GPRINT:incoming:LAST:%8.1lf %sBps\\j",
> - 
> "AREA:outgoingn".$color{"color13"}."A0:".sprintf("%-20s",$Lang::tr{'outgoing 
> traffic in bytes per second'}),
> -        "GPRINT:outgoing:MAX:%8.1lf %sBps",
> -        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:outgoing:MIN:%8.1lf %sBps",
> -        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j",
> + 
> "AREA:incomingb".$color{"color12"}."A0:".sprintf("%-20s",$Lang::tr{'incoming 
> traffic in bits per second'}),
> +        "GPRINT:incomingb:MAX:%8.1lf %sbps",
> +        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:incomingb:MIN:%8.1lf %sbps",
> +        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j",
> + 
> "AREA:outgoingn".$color{"color13"}."A0:".sprintf("%-20s",$Lang::tr{'outgoing 
> traffic in bits per second'}),
> +        "GPRINT:outgoingb:MAX:%8.1lf %sbps",
> +        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:outgoingb:MIN:%8.1lf %sbps",
> +        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j",
>           );
>           $ERROR = RRDs::error;
>           return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" 
> if $ERROR;
> @@ -582,28 +584,30 @@ sub updatevpngraph {
>           "-1".$period,
>           "-r",
>           "-t ".$Lang::tr{'traffic on'}." ".$interface." 
> ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
> -        "-v ".$Lang::tr{'bytes per second'},
> +        "-v ".$Lang::tr{'bits per second'},
>           "--color=SHADEA".$color{"color19"},
>           "--color=SHADEB".$color{"color19"},
>           "--color=BACK".$color{"color21"},
> "DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:rx:AVERAGE",
> "DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:tx:AVERAGE",
> -        "CDEF:outgoingn=outgoing,-1,*",
> +        "CDEF:outgoingb=outgoing,8,*",
> +        "CDEF:outgoingn=outgoingb,-1,*",
> +        "CDEF:incomingb=incoming,8,*",
>           "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
> -        "AREA:incoming#00dd00:".sprintf("%-20s",$Lang::tr{'incoming 
> traffic in bytes per second'}),
> -        "GPRINT:incoming:MAX:%8.1lf %sBps",
> -        "GPRINT:incoming:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:incoming:MIN:%8.1lf %sBps",
> -        "GPRINT:incoming:LAST:%8.1lf %sBps\\j",
> - "AREA:outgoingn#dd0000:".sprintf("%-20s",$Lang::tr{'outgoing traffic 
> in bytes per second'}),
> -        "GPRINT:outgoing:MAX:%8.1lf %sBps",
> -        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:outgoing:MIN:%8.1lf %sBps",
> -        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j",
> + "AREA:incomingb#00dd00:".sprintf("%-20s",$Lang::tr{'incoming traffic 
> in bits per second'}),
> +        "GPRINT:incomingb:MAX:%8.1lf %sbps",
> +        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:incomingb:MIN:%8.1lf %sbps",
> +        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j",
> + "AREA:outgoingn#dd0000:".sprintf("%-20s",$Lang::tr{'outgoing traffic 
> in bits per second'}),
> +        "GPRINT:outgoingb:MAX:%8.1lf %sbps",
> +        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:outgoingb:MIN:%8.1lf %sbps",
> +        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j",
>           );
>           $ERROR = RRDs::error;
>           return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" 
> if $ERROR;
> @@ -619,7 +623,7 @@ sub updatevpnn2ngraph {
>           "-1".$period,
>           "-r",
>           "-t ".$Lang::tr{'traffic on'}." ".$interface." 
> ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
> -        "-v ".$Lang::tr{'bytes per second'},
> +        "-v ".$Lang::tr{'bits per second'},
>           "--color=SHADEA".$color{"color19"},
>           "--color=SHADEB".$color{"color19"},
>           "--color=BACK".$color{"color21"},
> @@ -629,44 +633,50 @@ sub updatevpnn2ngraph {
> "DEF:overhead_out=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive-overhead.rrd:tx:AVERAGE",
> "DEF:compression_in=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/compression_derive-data_in.rrd:uncompressed:AVERAGE",
> "DEF:compression_out=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/compression_derive-data_out.rrd:uncompressed:AVERAGE",
> -        "CDEF:outgoingn=outgoing,-1,*",
> -        "CDEF:overhead_outn=overhead_out,-1,*",
> -        "CDEF:compression_outn=compression_out,-1,*",
> +        "CDEF:outgoingb=outgoing,8,*",
> +        "CDEF:outgoingn=outgoingb,-1,*",
> +        "CDEF:incomingb=incoming,8,*",
> +        "CDEF:overhead_outb=overhead_out,8,*",
> +        "CDEF:overhead_outn=overhead_outb,-1,*",
> +        "CDEF:overhead_inb=overhead_in,8,*",
> +        "CDEF:compression_outb=compression_out,8,*",
> +        "CDEF:compression_outn=compression_outb,-1,*",
> +        "CDEF:compression_inb=compression_in,8,*",
>           "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
> -        "AREA:incoming#00dd00:".sprintf("%-23s",$Lang::tr{'incoming 
> traffic in bytes per second'}),
> -        "GPRINT:incoming:MAX:%8.1lf %sBps",
> -        "GPRINT:incoming:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:incoming:MIN:%8.1lf %sBps",
> -        "GPRINT:incoming:LAST:%8.1lf %sBps\\j",
> - "STACK:overhead_in#116B11:".sprintf("%-23s",$Lang::tr{'incoming 
> overhead in bytes per second'}),
> -        "GPRINT:overhead_in:MAX:%8.1lf %sBps",
> -        "GPRINT:overhead_in:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:overhead_in:MIN:%8.1lf %sBps",
> -        "GPRINT:overhead_in:LAST:%8.1lf %sBps\\j",
> - "LINE1:compression_in#ff00ff:".sprintf("%-23s",$Lang::tr{'incoming 
> compression in bytes per second'}),
> -        "GPRINT:compression_in:MAX:%8.1lf %sBps",
> -        "GPRINT:compression_in:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:compression_in:MIN:%8.1lf %sBps",
> -        "GPRINT:compression_in:LAST:%8.1lf %sBps\\j",
> - "AREA:outgoingn#dd0000:".sprintf("%-23s",$Lang::tr{'outgoing traffic 
> in bytes per second'}),
> -        "GPRINT:outgoing:MAX:%8.1lf %sBps",
> -        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:outgoing:MIN:%8.1lf %sBps",
> -        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j",
> - "STACK:overhead_outn#870C0C:".sprintf("%-23s",$Lang::tr{'outgoing 
> overhead in bytes per second'}),
> -        "GPRINT:overhead_out:MAX:%8.1lf %sBps",
> -        "GPRINT:overhead_out:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:overhead_out:MIN:%8.1lf %sBps",
> -        "GPRINT:overhead_out:LAST:%8.1lf %sBps\\j",
> - "LINE1:compression_outn#000000:".sprintf("%-23s",$Lang::tr{'outgoing 
> compression in bytes per second'}),
> -        "GPRINT:compression_out:MAX:%8.1lf %sBps",
> -        "GPRINT:compression_out:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:compression_out:MIN:%8.1lf %sBps",
> -        "GPRINT:compression_out:LAST:%8.1lf %sBps\\j",
> + "AREA:incomingb#00dd00:".sprintf("%-23s",$Lang::tr{'incoming traffic 
> in bits per second'}),
> +        "GPRINT:incomingb:MAX:%8.1lf %sbps",
> +        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:incomingb:MIN:%8.1lf %sbps",
> +        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j",
> + "STACK:overhead_inb#116B11:".sprintf("%-23s",$Lang::tr{'incoming 
> overhead in bits per second'}),
> +        "GPRINT:overhead_inb:MAX:%8.1lf %sbps",
> +        "GPRINT:overhead_inb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:overhead_inb:MIN:%8.1lf %sbps",
> +        "GPRINT:overhead_inb:bLAST:%8.1lf %sbps\\j",
> + "LINE1:compression_inb#ff00ff:".sprintf("%-23s",$Lang::tr{'incoming 
> compression in bits per second'}),
> +        "GPRINT:compression_inb:MAX:%8.1lf %sbps",
> +        "GPRINT:compression_inb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:compression_inb:MIN:%8.1lf %sbps",
> +        "GPRINT:compression_inb:LAST:%8.1lf %sbps\\j",
> + "AREA:outgoingn#dd0000:".sprintf("%-23s",$Lang::tr{'outgoing traffic 
> in bits per second'}),
> +        "GPRINT:outgoingb:MAX:%8.1lf %sbps",
> +        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:outgoingb:MIN:%8.1lf %sbps",
> +        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j",
> + "STACK:overhead_outn#870C0C:".sprintf("%-23s",$Lang::tr{'outgoing 
> overhead in bits per second'}),
> +        "GPRINT:overhead_outb:MAX:%8.1lf %sbps",
> +        "GPRINT:overhead_outb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:overhead_outb:MIN:%8.1lf %sbps",
> +        "GPRINT:overhead_outb:LAST:%8.1lf %sbps\\j",
> + "LINE1:compression_outn#000000:".sprintf("%-23s",$Lang::tr{'outgoing 
> compression in bits per second'}),
> +        "GPRINT:compression_outb:MAX:%8.1lf %sbps",
> +        "GPRINT:compression_outb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:compression_outb:MIN:%8.1lf %sbps",
> +        "GPRINT:compression_outb:LAST:%8.1lf %sbps\\j",
>           );
>           $ERROR = RRDs::error;
>           return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" 
> if $ERROR;
> @@ -683,7 +693,7 @@ sub updatefwhitsgraph {
>           "-1".$period,
>           "-r",
>           "-t ".$Lang::tr{'firewall hits per'}." 
> ".$Lang::tr{$period."-graph"},
> -        "-v ".$Lang::tr{'bytes per second'},
> +        "-v ".$Lang::tr{'bits per second'},
>           "--color=SHADEA".$color{"color19"},
>           "--color=SHADEB".$color{"color19"},
>           "--color=BACK".$color{"color21"},
> @@ -692,36 +702,41 @@ sub updatefwhitsgraph {
> "DEF:forward=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-POLICYFWD/ipt_bytes-DROP_FORWARD.rrd:value:AVERAGE",
> "DEF:newnotsyn=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-NEWNOTSYN/ipt_bytes-DROP_NEWNOTSYN.rrd:value:AVERAGE",
> "DEF:portscan=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-PSCAN/ipt_bytes-DROP_PScan.rrd:value:AVERAGE",
> +        "CDEF:outputb=output,8,*",
> +        "CDEF:inputb=input,8,*",
> +        "CDEF:forwardb=forward,8,*",
> +        "CDEF:newnotsynb=newnotsyn,8,*",
> +        "CDEF:portscanb=portscan,8,*",
>           "COMMENT:".sprintf("%-26s",$Lang::tr{'caption'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
>           "COMMENT:".sprintf("%14s",$Lang::tr{'minimal'}),
>           "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
> - 
> "AREA:output".$color{"color25"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
> (OUTPUT)"),
> -        "GPRINT:output:MAX:%8.1lf %sBps",
> -        "GPRINT:output:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:output:MIN:%8.1lf %sBps",
> -        "GPRINT:output:LAST:%8.1lf %sBps\\j",
> - 
> "STACK:forward".$color{"color23"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
> (FORWARD)"),
> -        "GPRINT:forward:MAX:%8.1lf %sBps",
> -        "GPRINT:forward:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:forward:MIN:%8.1lf %sBps",
> -        "GPRINT:forward:LAST:%8.1lf %sBps\\j",
> - 
> "STACK:input".$color{"color24"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
> (INPUT)"),
> -        "GPRINT:input:MAX:%8.1lf %sBps",
> -        "GPRINT:input:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:input:MIN:%8.1lf %sBps",
> -        "GPRINT:input:LAST:%8.1lf %sBps\\j",
> - "STACK:newnotsyn".$color{"color14"}."A0:".sprintf("%-25s","NewNotSYN"),
> -        "GPRINT:newnotsyn:MAX:%8.1lf %sBps",
> -        "GPRINT:newnotsyn:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:newnotsyn:MIN:%8.1lf %sBps",
> -        "GPRINT:newnotsyn:LAST:%8.1lf %sBps\\j",
> - 
> "STACK:portscan".$color{"color16"}."A0:".sprintf("%-25s",$Lang::tr{'portscans'}),
> -        "GPRINT:portscan:MAX:%8.1lf %sBps",
> -        "GPRINT:portscan:AVERAGE:%8.1lf %sBps",
> -        "GPRINT:portscan:MIN:%8.1lf %sBps",
> -        "GPRINT:portscan:LAST:%8.1lf %sBps\\j",
> + 
> "AREA:outputb".$color{"color25"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
> (OUTPUT)"),
> +        "GPRINT:outputb:MAX:%8.1lf %sbps",
> +        "GPRINT:outputb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:outputb:MIN:%8.1lf %sbps",
> +        "GPRINT:outputb:LAST:%8.1lf %sbps\\j",
> + 
> "STACK:forwardb".$color{"color23"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
> (FORWARD)"),
> +        "GPRINT:forwardb:MAX:%8.1lf %sbps",
> +        "GPRINT:forwardb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:forwardb:MIN:%8.1lf %sbps",
> +        "GPRINT:forwardb:LAST:%8.1lf %sbps\\j",
> + 
> "STACK:inputb".$color{"color24"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
> (INPUT)"),
> +        "GPRINT:inputb:MAX:%8.1lf %sbps",
> +        "GPRINT:inputb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:inputb:MIN:%8.1lf %sbps",
> +        "GPRINT:inputb:LAST:%8.1lf %sbps\\j",
> + "STACK:newnotsynb".$color{"color14"}."A0:".sprintf("%-25s","NewNotSYN"),
> +        "GPRINT:newnotsynb:MAX:%8.1lf %sbps",
> +        "GPRINT:newnotsynb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:newnotsynb:MIN:%8.1lf %sbps",
> +        "GPRINT:newnotsynb:LAST:%8.1lf %sbps\\j",
> + 
> "STACK:portscanb".$color{"color16"}."A0:".sprintf("%-25s",$Lang::tr{'portscans'}),
> +        "GPRINT:portscanb:MAX:%8.1lf %sbps",
> +        "GPRINT:portscanb:AVERAGE:%8.1lf %sbps",
> +        "GPRINT:portscanb:MIN:%8.1lf %sbps",
> +        "GPRINT:portscanb:LAST:%8.1lf %sbps\\j",
>           );
>           $ERROR = RRDs::error;
>           return "Error in RRD::graph for firewallhits: ".$ERROR."\n" if 
> $ERROR;
> @@ -1012,7 +1027,7 @@ sub updateqosgraph {
>           "-1".$period,
>           "-r",
>           "-t ".$Lang::tr{'Utilization on'}." (".$qossettings{'DEV'}.") 
> ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
> -        "-v ".$Lang::tr{'bytes per second'},
> +        "-v ".$Lang::tr{'bits per second'},
>           "--color=SHADEA".$color{"color19"},
>           "--color=SHADEB".$color{"color19"},
>           "--color=BACK".$color{"color21"},
> @@ -1039,21 +1054,24 @@ sub updateqosgraph {
>               }
> 
>               if ( $classline[0] eq $qossettings{'DEV'} ){
> -                push(@command, 
> "DEF:$classline[1]=$mainsettings{'RRDLOG'}/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE");
> +                # Found: ERROR: rpn expressions without DEF or CDEF 
> variables are not supported
> +                # CDEF does not like a number as a variable name. ie. 
> "204" from $classline[1]
> +                push(@command, 
> "DEF:$classline[1]bit=$mainsettings{'RRDLOG'}/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE");
> +                push(@command, "CDEF:$classline[8]=$classline[1]bit,8,*");
> 
>                   # get color to be used for this graph
>                   my $graphColor = $colorMap{$colorKey};
> 
>                   if ($count eq "1") {
> -                    push(@command, 
> "AREA:$classline[1]$graphColor:$Lang::tr{'Class'} $classline[1] 
> -".sprintf("%15s",$classline[8]));
> +                    push(@command, 
> "AREA:$classline[8]$graphColor:$Lang::tr{'Class'} $classline[1] 
> -".sprintf("%15s",$classline[8]));
>                   } else {
> -                    push(@command, 
> "STACK:$classline[1]$graphColor:$Lang::tr{'Class'} $classline[1] 
> -".sprintf("%15s",$classline[8]));
> +                    push(@command, 
> "STACK:$classline[8]$graphColor:$Lang::tr{'Class'} $classline[1] 
> -".sprintf("%15s",$classline[8]));
>                   }
> 
> -                push(@command, "GPRINT:$classline[1]:MAX:%8.1lf %sBps"
> -                        , "GPRINT:$classline[1]:AVERAGE:%8.1lf %sBps"
> -                        , "GPRINT:$classline[1]:MIN:%8.1lf %sBps"
> -                        , "GPRINT:$classline[1]:LAST:%8.1lf %sBps\\j");
> +                push(@command, "GPRINT:$classline[8]:MAX:%8.1lf %sbps"
> +                        , "GPRINT:$classline[8]:AVERAGE:%8.1lf %sbps"
> +                        , "GPRINT:$classline[8]:MIN:%8.1lf %sbps"
> +                        , "GPRINT:$classline[8]:LAST:%8.1lf %sbps\\j");
>                   $count++;
>               }
>           }
> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
> index dc1fd8d67b30..b0097074beb0 100644
> --- a/langs/en/cgi-bin/en.pl
> +++ b/langs/en/cgi-bin/en.pl
> @@ -515,6 +515,7 @@
>   'broken pipe' => 'Broken pipe',
>   'buffered memory' => 'Buffered Memory',
>   'buffers' => 'buffers',
> +'bits per second' => 'Bits per Second',
>   'bytes per second' => 'Bytes per Second',
>   'bytes received' => 'Bytes Received',
>   'bytes sent' => 'Bytes Sent',
> @@ -1431,10 +1432,10 @@
>   'inactive' => 'inactive',
>   'include logfiles' => 'Include logfiles',
>   'incoming' => 'incoming',
> -'incoming compression in bytes per second' => 'Incoming Compression',
> +'incoming compression in bits per second' => 'Incoming Compression',
>   'incoming firewall access' => 'Incoming Firewall Access',
> -'incoming overhead in bytes per second' => 'Incoming Overhead',
> -'incoming traffic in bytes per second' => 'Incoming Traffic',
> +'incoming overhead in bits per second' => 'Incoming Overhead',
> +'incoming traffic in bits per second' => 'Incoming Traffic',
>   'incorrect password' => 'Incorrect password',
>   'info' => 'Info',
>   'init string' => 'Init:',
> @@ -1907,7 +1908,7 @@
>   'our donors' => 'Our donors',
>   'out' => 'Out',
>   'outgoing' => 'outgoing',
> -'outgoing compression in bytes per second' => 'Outgoing compression',
> +'outgoing compression in bits per second' => 'Outgoing compression',
>   'outgoing firewall' => 'Outgoing Firewall',
>   'outgoing firewall access' => 'Outgoing Firewall Access',
>   'outgoing firewall add ip group' => 'Add IP Address Group',
> @@ -1930,8 +1931,8 @@
>   'outgoing firewall reset' => 'Reset all',
>   'outgoing firewall view group' => 'View group',
>   'outgoing firewall warning' => 'Not selecting source ip or mac ignores 
> them',
> -'outgoing overhead in bytes per second' => 'Outgoing Overhead',
> -'outgoing traffic in bytes per second' => 'Outgoing Traffic',
> +'outgoing overhead in bits per second' => 'Outgoing Overhead',
> +'outgoing traffic in bits per second' => 'Outgoing Traffic',
>   'override mtu' => 'Override default MTU',
>   'ovpn' => 'OpenVPN',
>   'ovpn add conf' => 'Additional configuration',
>
  

Patch

diff --git a/config/cfgroot/graphs.pl b/config/cfgroot/graphs.pl
index 441d4c483a46..c83ae67bbfc1 100644
--- a/config/cfgroot/graphs.pl
+++ b/config/cfgroot/graphs.pl
@@ -545,28 +545,30 @@  sub updateifgraph {
          "-1".$period,
          "-r",
          "-t ".$Lang::tr{'traffic on'}." ".$interface." 
".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
-        "-v ".$Lang::tr{'bytes per second'},
+        "-v ".$Lang::tr{'bits per second'},
          "--color=SHADEA".$color{"color19"},
          "--color=SHADEB".$color{"color19"},
          "--color=BACK".$color{"color21"},
"DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/interface/if_octets-".$interface.".rrd:rx:AVERAGE",
"DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/interface/if_octets-".$interface.".rrd:tx:AVERAGE",
-        "CDEF:outgoingn=outgoing,-1,*",
+        "CDEF:outgoingb=outgoing,8,*",
+        "CDEF:outgoingn=outgoingb,-1,*",
+        "CDEF:incomingb=incoming,8,*",
          "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
- 
"AREA:incoming".$color{"color12"}."A0:".sprintf("%-20s",$Lang::tr{'incoming 
traffic in bytes per second'}),
-        "GPRINT:incoming:MAX:%8.1lf %sBps",
-        "GPRINT:incoming:AVERAGE:%8.1lf %sBps",
-        "GPRINT:incoming:MIN:%8.1lf %sBps",
-        "GPRINT:incoming:LAST:%8.1lf %sBps\\j",
- 
"AREA:outgoingn".$color{"color13"}."A0:".sprintf("%-20s",$Lang::tr{'outgoing 
traffic in bytes per second'}),
-        "GPRINT:outgoing:MAX:%8.1lf %sBps",
-        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps",
-        "GPRINT:outgoing:MIN:%8.1lf %sBps",
-        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j",
+ 
"AREA:incomingb".$color{"color12"}."A0:".sprintf("%-20s",$Lang::tr{'incoming 
traffic in bits per second'}),
+        "GPRINT:incomingb:MAX:%8.1lf %sbps",
+        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:incomingb:MIN:%8.1lf %sbps",
+        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j",
+ 
"AREA:outgoingn".$color{"color13"}."A0:".sprintf("%-20s",$Lang::tr{'outgoing 
traffic in bits per second'}),
+        "GPRINT:outgoingb:MAX:%8.1lf %sbps",
+        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:outgoingb:MIN:%8.1lf %sbps",
+        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j",
          );
          $ERROR = RRDs::error;
          return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" 
if $ERROR;
@@ -582,28 +584,30 @@  sub updatevpngraph {
          "-1".$period,
          "-r",
          "-t ".$Lang::tr{'traffic on'}." ".$interface." 
".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
-        "-v ".$Lang::tr{'bytes per second'},
+        "-v ".$Lang::tr{'bits per second'},
          "--color=SHADEA".$color{"color19"},
          "--color=SHADEB".$color{"color19"},
          "--color=BACK".$color{"color21"},
"DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:rx:AVERAGE",
"DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:tx:AVERAGE",
-        "CDEF:outgoingn=outgoing,-1,*",
+        "CDEF:outgoingb=outgoing,8,*",
+        "CDEF:outgoingn=outgoingb,-1,*",
+        "CDEF:incomingb=incoming,8,*",
          "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
-        "AREA:incoming#00dd00:".sprintf("%-20s",$Lang::tr{'incoming 
traffic in bytes per second'}),
-        "GPRINT:incoming:MAX:%8.1lf %sBps",
-        "GPRINT:incoming:AVERAGE:%8.1lf %sBps",
-        "GPRINT:incoming:MIN:%8.1lf %sBps",
-        "GPRINT:incoming:LAST:%8.1lf %sBps\\j",
- "AREA:outgoingn#dd0000:".sprintf("%-20s",$Lang::tr{'outgoing traffic 
in bytes per second'}),
-        "GPRINT:outgoing:MAX:%8.1lf %sBps",
-        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps",
-        "GPRINT:outgoing:MIN:%8.1lf %sBps",
-        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j",
+ "AREA:incomingb#00dd00:".sprintf("%-20s",$Lang::tr{'incoming traffic 
in bits per second'}),
+        "GPRINT:incomingb:MAX:%8.1lf %sbps",
+        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:incomingb:MIN:%8.1lf %sbps",
+        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j",
+ "AREA:outgoingn#dd0000:".sprintf("%-20s",$Lang::tr{'outgoing traffic 
in bits per second'}),
+        "GPRINT:outgoingb:MAX:%8.1lf %sbps",
+        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:outgoingb:MIN:%8.1lf %sbps",
+        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j",
          );
          $ERROR = RRDs::error;
          return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" 
if $ERROR;
@@ -619,7 +623,7 @@  sub updatevpnn2ngraph {
          "-1".$period,
          "-r",
          "-t ".$Lang::tr{'traffic on'}." ".$interface." 
".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
-        "-v ".$Lang::tr{'bytes per second'},
+        "-v ".$Lang::tr{'bits per second'},
          "--color=SHADEA".$color{"color19"},
          "--color=SHADEB".$color{"color19"},
          "--color=BACK".$color{"color21"},
@@ -629,44 +633,50 @@  sub updatevpnn2ngraph {
"DEF:overhead_out=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive-overhead.rrd:tx:AVERAGE",
"DEF:compression_in=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/compression_derive-data_in.rrd:uncompressed:AVERAGE",
"DEF:compression_out=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/compression_derive-data_out.rrd:uncompressed:AVERAGE",
-        "CDEF:outgoingn=outgoing,-1,*",
-        "CDEF:overhead_outn=overhead_out,-1,*",
-        "CDEF:compression_outn=compression_out,-1,*",
+        "CDEF:outgoingb=outgoing,8,*",
+        "CDEF:outgoingn=outgoingb,-1,*",
+        "CDEF:incomingb=incoming,8,*",
+        "CDEF:overhead_outb=overhead_out,8,*",
+        "CDEF:overhead_outn=overhead_outb,-1,*",
+        "CDEF:overhead_inb=overhead_in,8,*",
+        "CDEF:compression_outb=compression_out,8,*",
+        "CDEF:compression_outn=compression_outb,-1,*",
+        "CDEF:compression_inb=compression_in,8,*",
          "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
-        "AREA:incoming#00dd00:".sprintf("%-23s",$Lang::tr{'incoming 
traffic in bytes per second'}),
-        "GPRINT:incoming:MAX:%8.1lf %sBps",
-        "GPRINT:incoming:AVERAGE:%8.1lf %sBps",
-        "GPRINT:incoming:MIN:%8.1lf %sBps",
-        "GPRINT:incoming:LAST:%8.1lf %sBps\\j",
- "STACK:overhead_in#116B11:".sprintf("%-23s",$Lang::tr{'incoming 
overhead in bytes per second'}),
-        "GPRINT:overhead_in:MAX:%8.1lf %sBps",
-        "GPRINT:overhead_in:AVERAGE:%8.1lf %sBps",
-        "GPRINT:overhead_in:MIN:%8.1lf %sBps",
-        "GPRINT:overhead_in:LAST:%8.1lf %sBps\\j",
- "LINE1:compression_in#ff00ff:".sprintf("%-23s",$Lang::tr{'incoming 
compression in bytes per second'}),
-        "GPRINT:compression_in:MAX:%8.1lf %sBps",
-        "GPRINT:compression_in:AVERAGE:%8.1lf %sBps",
-        "GPRINT:compression_in:MIN:%8.1lf %sBps",
-        "GPRINT:compression_in:LAST:%8.1lf %sBps\\j",
- "AREA:outgoingn#dd0000:".sprintf("%-23s",$Lang::tr{'outgoing traffic 
in bytes per second'}),
-        "GPRINT:outgoing:MAX:%8.1lf %sBps",
-        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps",
-        "GPRINT:outgoing:MIN:%8.1lf %sBps",
-        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j",
- "STACK:overhead_outn#870C0C:".sprintf("%-23s",$Lang::tr{'outgoing 
overhead in bytes per second'}),
-        "GPRINT:overhead_out:MAX:%8.1lf %sBps",
-        "GPRINT:overhead_out:AVERAGE:%8.1lf %sBps",
-        "GPRINT:overhead_out:MIN:%8.1lf %sBps",
-        "GPRINT:overhead_out:LAST:%8.1lf %sBps\\j",
- "LINE1:compression_outn#000000:".sprintf("%-23s",$Lang::tr{'outgoing 
compression in bytes per second'}),
-        "GPRINT:compression_out:MAX:%8.1lf %sBps",
-        "GPRINT:compression_out:AVERAGE:%8.1lf %sBps",
-        "GPRINT:compression_out:MIN:%8.1lf %sBps",
-        "GPRINT:compression_out:LAST:%8.1lf %sBps\\j",
+ "AREA:incomingb#00dd00:".sprintf("%-23s",$Lang::tr{'incoming traffic 
in bits per second'}),
+        "GPRINT:incomingb:MAX:%8.1lf %sbps",
+        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:incomingb:MIN:%8.1lf %sbps",
+        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j",
+ "STACK:overhead_inb#116B11:".sprintf("%-23s",$Lang::tr{'incoming 
overhead in bits per second'}),
+        "GPRINT:overhead_inb:MAX:%8.1lf %sbps",
+        "GPRINT:overhead_inb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:overhead_inb:MIN:%8.1lf %sbps",
+        "GPRINT:overhead_inb:bLAST:%8.1lf %sbps\\j",
+ "LINE1:compression_inb#ff00ff:".sprintf("%-23s",$Lang::tr{'incoming 
compression in bits per second'}),
+        "GPRINT:compression_inb:MAX:%8.1lf %sbps",
+        "GPRINT:compression_inb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:compression_inb:MIN:%8.1lf %sbps",
+        "GPRINT:compression_inb:LAST:%8.1lf %sbps\\j",
+ "AREA:outgoingn#dd0000:".sprintf("%-23s",$Lang::tr{'outgoing traffic 
in bits per second'}),
+        "GPRINT:outgoingb:MAX:%8.1lf %sbps",
+        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:outgoingb:MIN:%8.1lf %sbps",
+        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j",
+ "STACK:overhead_outn#870C0C:".sprintf("%-23s",$Lang::tr{'outgoing 
overhead in bits per second'}),
+        "GPRINT:overhead_outb:MAX:%8.1lf %sbps",
+        "GPRINT:overhead_outb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:overhead_outb:MIN:%8.1lf %sbps",
+        "GPRINT:overhead_outb:LAST:%8.1lf %sbps\\j",
+ "LINE1:compression_outn#000000:".sprintf("%-23s",$Lang::tr{'outgoing 
compression in bits per second'}),
+        "GPRINT:compression_outb:MAX:%8.1lf %sbps",
+        "GPRINT:compression_outb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:compression_outb:MIN:%8.1lf %sbps",
+        "GPRINT:compression_outb:LAST:%8.1lf %sbps\\j",
          );
          $ERROR = RRDs::error;
          return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" 
if $ERROR;
@@ -683,7 +693,7 @@  sub updatefwhitsgraph {
          "-1".$period,
          "-r",
          "-t ".$Lang::tr{'firewall hits per'}." 
".$Lang::tr{$period."-graph"},
-        "-v ".$Lang::tr{'bytes per second'},
+        "-v ".$Lang::tr{'bits per second'},
          "--color=SHADEA".$color{"color19"},
          "--color=SHADEB".$color{"color19"},
          "--color=BACK".$color{"color21"},
@@ -692,36 +702,41 @@  sub updatefwhitsgraph {
"DEF:forward=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-POLICYFWD/ipt_bytes-DROP_FORWARD.rrd:value:AVERAGE",
"DEF:newnotsyn=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-NEWNOTSYN/ipt_bytes-DROP_NEWNOTSYN.rrd:value:AVERAGE",
"DEF:portscan=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-PSCAN/ipt_bytes-DROP_PScan.rrd:value:AVERAGE",
+        "CDEF:outputb=output,8,*",
+        "CDEF:inputb=input,8,*",
+        "CDEF:forwardb=forward,8,*",
+        "CDEF:newnotsynb=newnotsyn,8,*",
+        "CDEF:portscanb=portscan,8,*",
          "COMMENT:".sprintf("%-26s",$Lang::tr{'caption'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
          "COMMENT:".sprintf("%14s",$Lang::tr{'minimal'}),
          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
- 
"AREA:output".$color{"color25"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
(OUTPUT)"),
-        "GPRINT:output:MAX:%8.1lf %sBps",
-        "GPRINT:output:AVERAGE:%8.1lf %sBps",
-        "GPRINT:output:MIN:%8.1lf %sBps",
-        "GPRINT:output:LAST:%8.1lf %sBps\\j",
- 
"STACK:forward".$color{"color23"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
(FORWARD)"),
-        "GPRINT:forward:MAX:%8.1lf %sBps",
-        "GPRINT:forward:AVERAGE:%8.1lf %sBps",
-        "GPRINT:forward:MIN:%8.1lf %sBps",
-        "GPRINT:forward:LAST:%8.1lf %sBps\\j",
- 
"STACK:input".$color{"color24"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
(INPUT)"),
-        "GPRINT:input:MAX:%8.1lf %sBps",
-        "GPRINT:input:AVERAGE:%8.1lf %sBps",
-        "GPRINT:input:MIN:%8.1lf %sBps",
-        "GPRINT:input:LAST:%8.1lf %sBps\\j",
- "STACK:newnotsyn".$color{"color14"}."A0:".sprintf("%-25s","NewNotSYN"),
-        "GPRINT:newnotsyn:MAX:%8.1lf %sBps",
-        "GPRINT:newnotsyn:AVERAGE:%8.1lf %sBps",
-        "GPRINT:newnotsyn:MIN:%8.1lf %sBps",
-        "GPRINT:newnotsyn:LAST:%8.1lf %sBps\\j",
- 
"STACK:portscan".$color{"color16"}."A0:".sprintf("%-25s",$Lang::tr{'portscans'}),
-        "GPRINT:portscan:MAX:%8.1lf %sBps",
-        "GPRINT:portscan:AVERAGE:%8.1lf %sBps",
-        "GPRINT:portscan:MIN:%8.1lf %sBps",
-        "GPRINT:portscan:LAST:%8.1lf %sBps\\j",
+ 
"AREA:outputb".$color{"color25"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
(OUTPUT)"),
+        "GPRINT:outputb:MAX:%8.1lf %sbps",
+        "GPRINT:outputb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:outputb:MIN:%8.1lf %sbps",
+        "GPRINT:outputb:LAST:%8.1lf %sbps\\j",
+ 
"STACK:forwardb".$color{"color23"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
(FORWARD)"),
+        "GPRINT:forwardb:MAX:%8.1lf %sbps",
+        "GPRINT:forwardb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:forwardb:MIN:%8.1lf %sbps",
+        "GPRINT:forwardb:LAST:%8.1lf %sbps\\j",
+ 
"STACK:inputb".$color{"color24"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." 
(INPUT)"),
+        "GPRINT:inputb:MAX:%8.1lf %sbps",
+        "GPRINT:inputb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:inputb:MIN:%8.1lf %sbps",
+        "GPRINT:inputb:LAST:%8.1lf %sbps\\j",
+ "STACK:newnotsynb".$color{"color14"}."A0:".sprintf("%-25s","NewNotSYN"),
+        "GPRINT:newnotsynb:MAX:%8.1lf %sbps",
+        "GPRINT:newnotsynb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:newnotsynb:MIN:%8.1lf %sbps",
+        "GPRINT:newnotsynb:LAST:%8.1lf %sbps\\j",
+ 
"STACK:portscanb".$color{"color16"}."A0:".sprintf("%-25s",$Lang::tr{'portscans'}),
+        "GPRINT:portscanb:MAX:%8.1lf %sbps",
+        "GPRINT:portscanb:AVERAGE:%8.1lf %sbps",
+        "GPRINT:portscanb:MIN:%8.1lf %sbps",
+        "GPRINT:portscanb:LAST:%8.1lf %sbps\\j",
          );
          $ERROR = RRDs::error;
          return "Error in RRD::graph for firewallhits: ".$ERROR."\n" if 
$ERROR;
@@ -1012,7 +1027,7 @@  sub updateqosgraph {
          "-1".$period,
          "-r",
          "-t ".$Lang::tr{'Utilization on'}." (".$qossettings{'DEV'}.") 
".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"},
-        "-v ".$Lang::tr{'bytes per second'},
+        "-v ".$Lang::tr{'bits per second'},
          "--color=SHADEA".$color{"color19"},
          "--color=SHADEB".$color{"color19"},
          "--color=BACK".$color{"color21"},
@@ -1039,21 +1054,24 @@  sub updateqosgraph {
              }

              if ( $classline[0] eq $qossettings{'DEV'} ){
-                push(@command, 
"DEF:$classline[1]=$mainsettings{'RRDLOG'}/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE");
+                # Found: ERROR: rpn expressions without DEF or CDEF 
variables are not supported
+                # CDEF does not like a number as a variable name. ie. 
"204" from $classline[1]
+                push(@command, 
"DEF:$classline[1]bit=$mainsettings{'RRDLOG'}/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE");
+                push(@command, "CDEF:$classline[8]=$classline[1]bit,8,*");

                  # get color to be used for this graph
                  my $graphColor = $colorMap{$colorKey};

                  if ($count eq "1") {
-                    push(@command, 
"AREA:$classline[1]$graphColor:$Lang::tr{'Class'} $classline[1] 
-".sprintf("%15s",$classline[8]));
+                    push(@command, 
"AREA:$classline[8]$graphColor:$Lang::tr{'Class'} $classline[1] 
-".sprintf("%15s",$classline[8]));
                  } else {
-                    push(@command, 
"STACK:$classline[1]$graphColor:$Lang::tr{'Class'} $classline[1] 
-".sprintf("%15s",$classline[8]));
+                    push(@command, 
"STACK:$classline[8]$graphColor:$Lang::tr{'Class'} $classline[1] 
-".sprintf("%15s",$classline[8]));
                  }

-                push(@command, "GPRINT:$classline[1]:MAX:%8.1lf %sBps"
-                        , "GPRINT:$classline[1]:AVERAGE:%8.1lf %sBps"
-                        , "GPRINT:$classline[1]:MIN:%8.1lf %sBps"
-                        , "GPRINT:$classline[1]:LAST:%8.1lf %sBps\\j");
+                push(@command, "GPRINT:$classline[8]:MAX:%8.1lf %sbps"
+                        , "GPRINT:$classline[8]:AVERAGE:%8.1lf %sbps"
+                        , "GPRINT:$classline[8]:MIN:%8.1lf %sbps"
+                        , "GPRINT:$classline[8]:LAST:%8.1lf %sbps\\j");
                  $count++;
              }
          }
diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
index dc1fd8d67b30..b0097074beb0 100644
--- a/langs/en/cgi-bin/en.pl
+++ b/langs/en/cgi-bin/en.pl
@@ -515,6 +515,7 @@ 
  'broken pipe' => 'Broken pipe',
  'buffered memory' => 'Buffered Memory',
  'buffers' => 'buffers',
+'bits per second' => 'Bits per Second',
  'bytes per second' => 'Bytes per Second',
  'bytes received' => 'Bytes Received',
  'bytes sent' => 'Bytes Sent',
@@ -1431,10 +1432,10 @@ 
  'inactive' => 'inactive',
  'include logfiles' => 'Include logfiles',
  'incoming' => 'incoming',
-'incoming compression in bytes per second' => 'Incoming Compression',
+'incoming compression in bits per second' => 'Incoming Compression',
  'incoming firewall access' => 'Incoming Firewall Access',
-'incoming overhead in bytes per second' => 'Incoming Overhead',
-'incoming traffic in bytes per second' => 'Incoming Traffic',
+'incoming overhead in bits per second' => 'Incoming Overhead',
+'incoming traffic in bits per second' => 'Incoming Traffic',
  'incorrect password' => 'Incorrect password',
  'info' => 'Info',
  'init string' => 'Init:',
@@ -1907,7 +1908,7 @@ 
  'our donors' => 'Our donors',
  'out' => 'Out',
  'outgoing' => 'outgoing',
-'outgoing compression in bytes per second' => 'Outgoing compression',
+'outgoing compression in bits per second' => 'Outgoing compression',
  'outgoing firewall' => 'Outgoing Firewall',
  'outgoing firewall access' => 'Outgoing Firewall Access',
  'outgoing firewall add ip group' => 'Add IP Address Group',
@@ -1930,8 +1931,8 @@ 
  'outgoing firewall reset' => 'Reset all',
  'outgoing firewall view group' => 'View group',
  'outgoing firewall warning' => 'Not selecting source ip or mac ignores 
them',
-'outgoing overhead in bytes per second' => 'Outgoing Overhead',
-'outgoing traffic in bytes per second' => 'Outgoing Traffic',
+'outgoing overhead in bits per second' => 'Outgoing Overhead',
+'outgoing traffic in bits per second' => 'Outgoing Traffic',
  'override mtu' => 'Override default MTU',
  'ovpn' => 'OpenVPN',