ip_queue.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * This is a module which is used for queueing IPv4 packets and
  3.  * communicating with userspace via netlink.
  4.  *
  5.  * (C) 2000 James Morris, this code is GPL.
  6.  */
  7. #ifndef _IP_QUEUE_H
  8. #define _IP_QUEUE_H
  9. #ifdef __KERNEL__
  10. #ifdef DEBUG_IPQ
  11. #define QDEBUG(x...) printk(KERN_DEBUG ## x)
  12. #else
  13. #define QDEBUG(x...)
  14. #endif  /* DEBUG_IPQ */
  15. #else
  16. #include <net/if.h>
  17. #endif /* ! __KERNEL__ */
  18. /* Messages sent from kernel */
  19. typedef struct ipq_packet_msg {
  20. unsigned long packet_id; /* ID of queued packet */
  21. unsigned long mark; /* Netfilter mark value */
  22. long timestamp_sec; /* Packet arrival time (seconds) */
  23. long timestamp_usec; /* Packet arrvial time (+useconds) */
  24. unsigned int hook; /* Netfilter hook we rode in on */
  25. char indev_name[IFNAMSIZ]; /* Name of incoming interface */
  26. char outdev_name[IFNAMSIZ]; /* Name of outgoing interface */
  27. unsigned short hw_protocol; /* Hardware protocol (network order) */
  28. unsigned short hw_type; /* Hardware type */
  29. unsigned char hw_addrlen; /* Hardware address length */
  30. unsigned char hw_addr[8]; /* Hardware address */
  31. size_t data_len; /* Length of packet data */
  32. unsigned char payload[0]; /* Optional packet data */
  33. } ipq_packet_msg_t;
  34. /* Messages sent from userspace */
  35. typedef struct ipq_mode_msg {
  36. unsigned char value; /* Requested mode */
  37. size_t range; /* Optional range of packet requested */
  38. } ipq_mode_msg_t;
  39. typedef struct ipq_verdict_msg {
  40. unsigned int value; /* Verdict to hand to netfilter */
  41. unsigned long id; /* Packet ID for this verdict */
  42. size_t data_len; /* Length of replacement data */
  43. unsigned char payload[0]; /* Optional replacement packet */
  44. } ipq_verdict_msg_t;
  45. typedef struct ipq_peer_msg {
  46. union {
  47. ipq_verdict_msg_t verdict;
  48. ipq_mode_msg_t mode;
  49. } msg;
  50. } ipq_peer_msg_t;
  51. /* Packet delivery modes */
  52. enum {
  53. IPQ_COPY_NONE, /* Initial mode, packets are dropped */
  54. IPQ_COPY_META, /* Copy metadata */
  55. IPQ_COPY_PACKET /* Copy metadata + packet (range) */
  56. };
  57. #define IPQ_COPY_MAX IPQ_COPY_PACKET
  58. /* Types of messages */
  59. #define IPQM_BASE 0x10 /* standard netlink messages below this */
  60. #define IPQM_MODE (IPQM_BASE + 1) /* Mode request from peer */
  61. #define IPQM_VERDICT (IPQM_BASE + 2) /* Verdict from peer */ 
  62. #define IPQM_PACKET (IPQM_BASE + 3) /* Packet from kernel */
  63. #define IPQM_MAX (IPQM_BASE + 4)
  64. #endif /*_IP_QUEUE_H*/