Advertisement
Guest User

c

a guest
Apr 25th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/kernel.h>
  4. #include <linux/netdevice.h>
  5.  
  6. MODULE_LICENSE("GPL");
  7.  
  8. rx_handler_result_t (*old_func_ptr)(struct sk_buff **);
  9.  
  10.  
  11. rx_handler_result_t pack_handler (struct sk_buff **pskb) {
  12.  
  13. struct sk_buff *skbuff = *pskb;
  14.  
  15. printk (KERN_INFO "SK_BUFF_INFO: mac_len = %d", skbuff->mac_len);
  16. printk (KERN_INFO "proto_id = %#hx \n", ntohs(skbuff->protocol));
  17.  
  18. return RX_HANDLER_PASS;
  19. }
  20.  
  21. static int __init mod_init (void) {
  22.  
  23. struct net_device * dev;
  24.  
  25. dev = first_net_device (&init_net);
  26.  
  27. while (dev) {
  28. // if (dev->rx_handler != NULL) {
  29. old_func_ptr = dev->rx_handler;
  30. dev->rx_handler = pack_handler;
  31. printk (KERN_INFO "ptr = %p \n", old_func_ptr);
  32. // }
  33.  
  34. printk (KERN_INFO "name = %s \n", dev->name);
  35.  
  36. printk (KERN_INFO "pointer = %p \n", dev->rx_handler);
  37.  
  38.  
  39. printk (KERN_INFO "RX packets = %lu \n", dev->stats.rx_packets);
  40. printk (KERN_INFO "TX packets = %lu \n", dev->stats.tx_packets);
  41. dev = next_net_device(dev);
  42. }
  43.  
  44. // dev = first_net_device(&init_net);
  45. // while (dev) {
  46. dev->rx_handler = old_func_ptr;
  47. // dev = next_net_device(dev);
  48. // }
  49.  
  50. return 0;
  51. }
  52.  
  53. static void __exit mod_exit (void) {
  54. printk (KERN_INFO "Bye! \n");
  55. }
  56.  
  57. module_init(mod_init);
  58. module_exit(mod_exit);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement