diff -ruN linux-2.4.9-ctnetlink/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.9-ctnetlink-trafinfo/include/linux/netfilter_ipv4/ip_conntrack.h --- linux-2.4.9-ctnetlink/include/linux/netfilter_ipv4/ip_conntrack.h Mon Oct 15 16:25:58 2001 +++ linux-2.4.9-ctnetlink-trafinfo/include/linux/netfilter_ipv4/ip_conntrack.h Tue Oct 16 12:01:42 2001 @@ -80,6 +80,11 @@ struct ip_conntrack *expectant; }; +struct ip_conntrack_traffic +{ + __u64 octets_original, octets_reply; +}; + #ifdef CONFIG_IP_NF_NAT_NEEDED #include #endif @@ -139,6 +144,7 @@ } nat; #endif /* CONFIG_IP_NF_NAT_NEEDED */ + struct ip_conntrack_traffic traffic; }; /* Alter reply tuple (maybe alter helper). If it's already taken, diff -ruN linux-2.4.9-ctnetlink/include/linux/netfilter_ipv4/ip_conntrack_netlink.h linux-2.4.9-ctnetlink-trafinfo/include/linux/netfilter_ipv4/ip_conntrack_netlink.h --- linux-2.4.9-ctnetlink/include/linux/netfilter_ipv4/ip_conntrack_netlink.h Mon Oct 15 16:25:58 2001 +++ linux-2.4.9-ctnetlink-trafinfo/include/linux/netfilter_ipv4/ip_conntrack_netlink.h Thu Oct 4 21:20:19 2001 @@ -26,7 +26,8 @@ CTA_PROTOINFO, /* [rta_proto] Protocol specific ct information. */ CTA_HELPINFO, /* [rta_help] Helper specific information. */ CTA_NATINFO, /* [rta_nat] Any NAT transformations. */ - CTA_MAX = CTA_NATINFO + CTA_TRAFINFO, + CTA_MAX = CTA_TRAFINFO }; /* Generic structure for encapsulation optional conntrack information. diff -ruN linux-2.4.9-ctnetlink/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.9-ctnetlink-trafinfo/net/ipv4/netfilter/ip_conntrack_core.c --- linux-2.4.9-ctnetlink/net/ipv4/netfilter/ip_conntrack_core.c Mon Oct 15 16:25:58 2001 +++ linux-2.4.9-ctnetlink-trafinfo/net/ipv4/netfilter/ip_conntrack_core.c Tue Oct 16 12:26:42 2001 @@ -568,6 +568,8 @@ conntrack->tuplehash[IP_CT_DIR_ORIGINAL].ctrack = conntrack; conntrack->tuplehash[IP_CT_DIR_REPLY].tuple = repl_tuple; conntrack->tuplehash[IP_CT_DIR_REPLY].ctrack = conntrack; + conntrack->traffic.octets_original = 0; + conntrack->traffic.octets_reply = 0; for (i=0; i < IP_CT_NUMBER; i++) conntrack->infos[i].master = &conntrack->ct_general; @@ -727,6 +729,11 @@ return NF_DROP; IP_NF_ASSERT((*pskb)->nfct); + + if (set_reply) + ct->traffic.octets_reply += (*pskb)->len; + else + ct->traffic.octets_original += (*pskb)->len; ret = proto->packet(ct, (*pskb)->nh.iph, (*pskb)->len, ctinfo, &set_notify); diff -ruN linux-2.4.9-ctnetlink/net/ipv4/netfilter/ip_conntrack_netlink.c linux-2.4.9-ctnetlink-trafinfo/net/ipv4/netfilter/ip_conntrack_netlink.c --- linux-2.4.9-ctnetlink/net/ipv4/netfilter/ip_conntrack_netlink.c Mon Oct 15 16:25:58 2001 +++ linux-2.4.9-ctnetlink-trafinfo/net/ipv4/netfilter/ip_conntrack_netlink.c Mon Oct 15 17:32:56 2001 @@ -84,6 +84,7 @@ &ct->tuplehash[IP_CT_DIR_REPLY].tuple); s = ct->status; CTA_PUT(skb, CTA_STATUS, sizeof(unsigned long), &s); + CTA_PUT(skb, CTA_TRAFINFO, sizeof(struct ip_conntrack_traffic), &(ct->traffic)); if(in) CTA_PUT(skb, CTA_IIF, IFNAMSIZ, in->name); if(out)