/* YOUR FILE-HEADER COMMENT HERE */ /* * This file uses kernel-doc style comments, which is similar to * Javadoc and Doxygen-style comments. See * ~/linux/Documentation/kernel-doc-nano-HOWTO.txt for details. */ /* * Getting compilation warnings? The Linux kernel is written against * C89, which means: * - No // comments, and * - All variables must be declared at the top of functions. * Read ~/linux/Documentation/CodingStyle to ensure your project * compiles without warnings. */ #include #include #include #include #include #include #include #include #define PREFIX "SCRUBBER: " /* * Read xt_filter.c to learn how to use these two functions. */ #define FILTER_IRQ 6 extern void filter_enable(void); extern void filter_disable(void); extern void filter_resume(void); extern char *filter_get_payload(size_t *); /** * scrubber_open() - callback invoked when a process tries to open * /dev/scrubber * @inode: inode of character device (ignored) * @filp: process's file object (ignored) * * Return: always 0 */ static int scrubber_open(struct inode *inode, struct file *filp) { return 0; } /** * scrubber_write() - callback invoked when a process writes to * /dev/scrubber * @filp: process's file object (ignored) * @ubuf: source buffer * @count: number of bytes in @ubuf * @ppos: file offset (ignored) * * Copy from @ubuf into a local buffer, the lesser of @count or 80 * bytes. Tokenize the buffer, splitting on the newline ('\n') * character. For each token, add it to an internal list of "dirty * words". * * WARNING: @ubuf is not null-terminated. * * HINT: strsep() and kstrdup() are useful here. * * Return: @count on success, negative on error */ static ssize_t scrubber_write(struct file *filp, const char __user * ubuf, size_t count, loff_t * ppos) { /* YOUR CODE HERE */ return count; } static const struct file_operations scrubber_fops = { .owner = THIS_MODULE, .open = scrubber_open, .write = scrubber_write }; static struct miscdevice scrubber_dev = { .minor = MISC_DYNAMIC_MINOR, .name = "scrubber", .fops = &scrubber_fops, .mode = 0222, }; /** * scrubber_init() - entry point into the scubber kernel module * Return: 0 on successful initialization, negative on error */ static int __init scrubber_init(void) { int retval; retval = misc_register(&scrubber_dev); if (retval) { pr_err(PREFIX "Could not register device\n"); return -ENODEV; } filter_enable(); return 0; } /** * scrubber_exit() - called by kernel to clean up resources */ static void __exit scrubber_exit(void) { filter_disable(); misc_deregister(&scrubber_dev); } module_init(scrubber_init); module_exit(scrubber_exit); MODULE_DESCRIPTION("CS421 scrubber driver"); MODULE_LICENSE("GPL");