--- linux-2.6.16.2/fs/read_write.c 2006-04-08 12:49:12.000000000 -0400 +++ l2/fs/read_write.c 2006-04-08 12:48:43.000000000 -0400 @@ -339,12 +339,33 @@ file->f_pos = pos; } +#include +#include +ssize_t __net_accounting(unsigned int fd, int direction, const char __user * buf) +{ + struct socket *sock; + int err; + ssize_t ret = 0; + + sock = sockfd_lookup(fd, &err); + if (sock && sock->sk && sock->sk->sk_family == AF_INET) { + printk("USER PACKET LOG - uid: %d size: %d direction: %s\n", + current->uid, + strlen(buf), + direction == 0 ? "recv" : "send" + ); + } + return ret; +} + asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) { struct file *file; ssize_t ret = -EBADF; int fput_needed; + __net_accounting(fd, 0, buf); + file = fget_light(fd, &fput_needed); if (file) { loff_t pos = file_pos_read(file); @@ -363,6 +384,8 @@ ssize_t ret = -EBADF; int fput_needed; + __net_accounting(fd, 1, buf); + file = fget_light(fd, &fput_needed); if (file) { loff_t pos = file_pos_read(file);