#!/bin/bash
iptables -L FWcnt -n|gawk -v CONVFMT="%d" '{if($1 ~ "^FWcntIN"){split ($NF,N,"/");print N[1]}}'|sort -u -n -t . -k1,1 -k2,2 -k3,3 -k4,4|

gawk -v CONVFMT="%d" '

function print_header(Ofile){
OUT="/var/lib/FWcnt/run_conf/"Ofile".conf"
OUTf="/var/lib/FWcnt/run_conf/"Ofile".cfg"
print OUT > OUTf
print "######################################################################" >OUT
print "# Automaticaly generated (/var/www/mrtg/gener)" >>OUT
print "# !!!!!!! not for use with real mrtg !!!!!!" >>OUT
print "# automaticaly generated. " >>OUT
print "######################################################################" >>OUT
print "Htmldir: /var/www/mrtg-rrd" >>OUT
print "Imagedir: /var/www/mrtg-rrd" >>OUT
print "Logdir:  /var/lib/FWcnt/FW_rrd_database" >>OUT
print "" >>OUT
print "WriteExpires: Yes" >>OUT
print "LogFormat: rrdtool" >>OUT
print "" >>OUT
print "Title[^]: Traffic Analysis for " >>OUT
print "" >>OUT
}

function print_target(IP,TARGET,NAME,Ofile,HREF){
   OUT="/var/lib/FWcnt/run_conf/"Ofile".conf"
   gsub("/","_",TARGET)
   printf("Target[%s-b]: none\n",TARGET) >> OUT
   printf("MaxBytes[%s-b]: %s\n",TARGET,10000*128) >> OUT
   printf("AbsMax[%s-b]: %s\n",TARGET,3280000) >> OUT
   if(HREF==""){
   printf("Title[%s-b]: &nbsp;bytes %s\n",TARGET,IP) >> OUT
   }   
   else{
   printf("Title[%s-b]: &nbsp;bytes %s </A><A HREF=\"%s\">\n",TARGET,IP,HREF) >> OUT
   }
   printf("Options[%s-b]: bits\n",TARGET)>>OUT
   printf("PageTop[%s-b]: <H1> Bytes to/from %s (%s)\n",TARGET,IP,IP)  >> OUT                  
   printf("  %s</H1>\n  <TABLE>\n   <TR><TD>System:</TD><TD>router</TD></TR>\n",IP) >> OUT
   printf("   <TR><TD>Maintainer:</TD><TD>krak3n</TD></TR>\n  </TABLE>\n\n") >> OUT

   printf("Target[%s-p]: none\n",TARGET) >> OUT
   printf("MaxBytes[%s-p]: %s\n",TARGET,65000) >> OUT
   printf("AbsMax[%s-p]: %s\n",TARGET,1280000) >> OUT
   printf("ShortLegend[%s-p]: pps\n",TARGET) >> OUT
   printf("Options[%s-p]: nopercent,unknaszero\n",TARGET) >> OUT
   printf("Title[%s-p]: &nbsp;pkts %s\n",TARGET,IP) >> OUT
   printf("YLegend[%s-p]: Pkts per Second\n",TARGET) >> OUT
   printf("PageTop[%s-p]: <H1> Pkts to/from %s\n",TARGET,IP)  >> OUT
   printf("   </H1>\n   <TABLE>\n    <TR><TD>System:</TD><TD>router</TD></TR>\n") >> OUT
   printf("   <TR><TD>Maintainer:</TD><TD>krak3n</TD></TR>\n  </TABLE>\n\n") >> OUT                             
}

BEGIN{
 OUTx="/var/lib/FWcnt/run_conf/target.parent"
 printf("")>OUTx
 print_header("default")
 while(getline < "/var/lib/FWcnt/etc/config" ){
	if($1 ~ "^mrtgNET"){	
	  split($2,N,".")
 	  C=16
 	  if(split($3,NM,".")==4){
 		if(NM[1]==255 && NM[2]==255 && NM[3]==255) C=256-NM[4]
 	  }
 	  else   C=2^(32-$3)	
	  if(C>128 || C<8)C=16
	  N[4]=and(N[4],xor(255,(C-1))) 
	  NL[N[1]"."N[2]"."N[3]"."N[4]]=C
#	  print("Net "N[1]"."N[2]"."N[3]"."N[4]" "C)
	}
        if($1 ~ "^cntLINK"){
               print_target($2"",$2"",$2"","default","")
               printf("default %s\n",$2) >>OUTx
        }
 }
 close("/var/lib/FWcnt/etc/config");
}
{
TP="default"
IP=$1 "/24"
TARGET=$1."/24"
NAME=$1"/24"
HREF=$1"_24"
print_target(IP,TARGET,NAME,"default",HREF)
printf("%s %s\n",TP,TARGET) >>OUTx

split(IP,IPn,".");
netC=IPn[1]"."IPn[2]"."IPn[3]

 TP=$1"_24"
 print_header(TP)
 i=0
 while(i<256){
  j=16
  if(netC"."i in NL) j=NL[netC"."i]
  jx=32-int(log(j)*1.5)
#  print "j="j" jx="jx
  IP=netC"."i"/"jx
  TARGET=IP
  NAME=IP
  HREF=netC"."i"_"jx
  print_target(IP,TARGET,NAME,TP,HREF)
  printf("%s %s\n",TP,TARGET) >>OUTx
  k=0
  TPx=netC"."i"_"jx
  HREF=""
  print_header(TPx)
  while(k<j){
  	IP=netC"."k+i
	TARGET=IP
	NAME=IP
	print_target(IP,TARGET,NAME,TPx,HREF)
	printf("%s %s\n",TPx,TARGET) >>OUTx
	k++
  }
  i+=j
 }
}'
