ipt_TOS.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Kernel module to match TOS values. */
  2. #include <linux/module.h>
  3. #include <linux/skbuff.h>
  4. #include <linux/netfilter_ipv4/ipt_tos.h>
  5. #include <linux/netfilter_ipv4/ip_tables.h>
  6. static int
  7. match(const struct sk_buff *skb,
  8.       const struct net_device *in,
  9.       const struct net_device *out,
  10.       const void *matchinfo,
  11.       int offset,
  12.       const void *hdr,
  13.       u_int16_t datalen,
  14.       int *hotdrop)
  15. {
  16. const struct ipt_tos_info *info = matchinfo;
  17. const struct iphdr *iph = skb->nh.iph;
  18. return (iph->tos == info->tos) ^ info->invert;
  19. }
  20. static int
  21. checkentry(const char *tablename,
  22.            const struct ipt_ip *ip,
  23.            void *matchinfo,
  24.            unsigned int matchsize,
  25.            unsigned int hook_mask)
  26. {
  27. if (matchsize != IPT_ALIGN(sizeof(struct ipt_tos_info)))
  28. return 0;
  29. return 1;
  30. }
  31. static struct ipt_match tos_match
  32. = { { NULL, NULL }, "tos", &match, &checkentry, NULL, THIS_MODULE };
  33. static int __init init(void)
  34. {
  35. return ipt_register_match(&tos_match);
  36. }
  37. static void __exit fini(void)
  38. {
  39. ipt_unregister_match(&tos_match);
  40. }
  41. module_init(init);
  42. module_exit(fini);
  43. MODULE_LICENSE("GPL");