X-Git-Url: http://git.harvie.cz/?p=svn%2FPrometheus-QoS%2F.git;a=blobdiff_plain;f=parseiptables.c;h=eca2ced6221c4af51d98be83b5a9c0adf9376c86;hp=e73632497340e0c5566d888f8f9ed8e3312f5ca1;hb=fa54950d31dc0d7e15e945750d4dcbaca2de613e;hpb=f19d3cd0bca8ef24e8c78fb6ae24346dc3b7db36 diff --git a/parseiptables.c b/parseiptables.c index e736324..eca2ced 100644 --- a/parseiptables.c +++ b/parseiptables.c @@ -1,4 +1,4 @@ -/* Modified by: xChaos, 20130115 */ +/* Modified by: xChaos, 20131208 */ #include "cll1-0.6.2.h" #include "ipstruct.h" @@ -8,14 +8,14 @@ /* globals declared in prometheus.c */ extern struct IP *ips, *ip, *sharedip; extern char *mark; -extern char *proxy_ip; +/* extern char *proxy_ip; */ extern int free_min; extern int free_max; extern int include_upload; /* ===================== traffic analyser - uses iptables ================ */ -void get_traffic_statistics(const char *whichiptables) +void get_traffic_statistics(const char *whichiptables, int ipv6) { char *str,*cmd; int downloadflag=0; @@ -36,12 +36,12 @@ void get_traffic_statistics(const char *whichiptables) for_each(line,lines) { - int col, accept = 0, proxyflag = 0, valid = 1, setchainname = 0, commonflag = 0; + int col, accept = 0, /*proxyflag = 0, */valid = 1, setchainname = 0, commonflag = 0; unsigned long long traffic = 0; unsigned long pkts = 0; char *ipaddr = NULL,*ptr; - valid_columns(ptr, line->str, ' ', col) + valid_columns(ptr, line->str, ' ', col) if(valid) switch(col) { case 1: if(eq(ptr,"Chain")) @@ -86,39 +86,76 @@ void get_traffic_statistics(const char *whichiptables) { accept = eq(ptr,mark); } - /*if(filter_type==1) accept=eq(ptr,"MARK"); else accept=eq(ptr,"CLASSIFY");*/ break; - case 8: if(downloadflag) - { - if(strstr(proxy_ip,ptr)) + case 7: if(ipv6 && !downloadflag) + { + ipaddr = ptr; + } + break; + case 8: if(ipv6 && downloadflag) + { + ipaddr = ptr; + } + else if(!ipv6) + { +/* if(downloadflag) + { + if(strstr(proxy_ip,ptr)) + { + proxyflag = 1; + } + + } + else + { */ + if(!downloadflag) { - proxyflag = 1; + ipaddr = ptr; } } - else + break; + case 9: if(!ipv6 && downloadflag) { ipaddr = ptr; } break; - case 9: if(downloadflag)ipaddr = ptr;break; } if(accept && traffic>0 && ipaddr) { + /* IPv6 subnet - /64 */ + char *isipv6 = strstr(ipaddr,"/64"); + if(ipv6 && isipv6) + { + *isipv6=0; + printf("(IPv6) "); + } + else + { + printf("(IPv4) "); + } +/* if(proxyflag) { printf("(proxy) "); } - else if(!downloadflag) + else +*/ + if(!downloadflag) { - printf("(upload) "); + printf("(up) "); } - printf("IP %s: %Lu MB (%ld pkts)\n", ipaddr, traffic, pkts); + else + { + printf("(down) "); + } + + printf("%s %Lu MB (%ld pkts)\n", ipaddr, traffic, pkts); - if_exists(ip,ips,eq(ip->addr,ipaddr)); + if_exists(ip, ips, eqi(ip->addr,ipaddr)); else { - TheIP(ipaddr); + TheIP(ipaddr, FALSE); if(eq(ip->addr,"0.0.0.0/0")) { ip->name = "(unregistered)"; @@ -133,30 +170,31 @@ void get_traffic_statistics(const char *whichiptables) if(downloadflag) { +/* if(proxyflag) { ip->proxy = traffic; } else - { - ip->traffic += traffic; - } - ip->direct = ip->traffic-ip->upload-ip->proxy; - ip->pktsdown = pkts; + {*/ + ip->traffic += traffic; +/* } */ + ip->direct += traffic; /*-ip->proxy;*/ + ip->pktsdown += pkts; } else { - ip->upload = traffic; - ip->pktsup = pkts; + ip->upload += traffic; + ip->pktsup += pkts; if(include_upload) { ip->traffic += traffic; } else { - if(traffic > ip->traffic) + if(ip->upload > ip->traffic) { - ip->traffic = traffic; + ip->traffic = ip->upload; } } }