% Registration Flow based network accounting with Linux % [2]Register/Submit Proposal Harald Marc Welte (laforge@gnumonks.org) Many networking scenarios require some form of network accounting that goes beyond some simple packet and byte counters as available from the `ifconfig' output. When people want to do network accouting, the past and current Linux kernel didn't provide them with any reasonable mechanism for doing so. Network accounting can generally be done in a number of different ways. The traditional way is to capture all packets by some userspace program. Capturing can be done via a number of mechanisms such as \ident{PF_PACKET} sockets, \ident{mmap()}ed \ident{PF_PACKET}, \ident{ipt_ULOG}, or \ident{ip_queue}. This userspace program then analyzes the packets and aggregates the result into per-flow data structures. Whatever mechanism used, this scheme has a fundamental performance limitation, since all packets need to be copied and analyzed by a userspace process. The author has implemented a different approach, by which the accounting information is stored in the in-kernel connection tracking table of the \ident{ip_conntrack} stateful firewall state machine. On all firewalls, that state table has to be kept anyways---the additional overhead introduced by accounting is minimal. Once a connection is evicted from the state table, its accounting relevant data is transferred to userspace to a special accounting daemon for further processing, aggregation and finally storage in the accounting log/database.