#include #include #include #include #include size_t tcount = 0; unsigned long int lasttime; irq_handler_t irq_handler (int irq, void *dev_id, struct pt_regs *regs) { tcount++; return (irq_handler_t) IRQ_HANDLED; } ssize_t read_proc(struct file* filp, char *buf, size_t count, loff_t *offp){ char message[128]; unsigned long int newtime = jiffies; int calls_per_second = (HZ * tcount) / (newtime - lasttime); tcount = 0; lasttime = newtime; sprintf(message, "Calls Per Second: %d\n", calls_per_second); strcpy(buf, message); return strlen(message); } struct file_operations pfo = { read : read_proc, write: 0 }; int startthings (void){ int err = request_irq (1, (irq_handler_t) irq_handler, IRQF_SHARED, "netmon", (void *)(irq_handler)); if(err){ printk(KERN_INFO "Received error %d\n", err); } proc_create("netmon", 0, NULL, &pfo); lasttime = jiffies; return err; } void cleanup(void){ free_irq(1, (void*)irq_handler); remove_proc_entry("netmon", NULL); } MODULE_LICENSE ("GPL"); module_init(startthings); module_exit(cleanup);