Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 
 10 #ifdef __KERNEL__
 11 #ifdef DEBUG_IPQ
 12 #define QDEBUG(x...) printk(KERN_DEBUG ## x)
 13 #else
 14 #define QDEBUG(x...)
 15 #endif  /* DEBUG_IPQ */
 16 #else
 17 #include <net/if.h>
 18 #endif  /* ! __KERNEL__ */
 19 
 20 /* Messages sent from kernel */
 21 typedef struct ipq_packet_msg {
 22         unsigned long packet_id;        /* ID of queued packet */
 23         unsigned long mark;             /* Netfilter mark value */
 24         long timestamp_sec;             /* Packet arrival time (seconds) */
 25         long timestamp_usec;            /* Packet arrvial time (+useconds) */
 26         unsigned int hook;              /* Netfilter hook we rode in on */
 27         char indev_name[IFNAMSIZ];      /* Name of incoming interface */
 28         char outdev_name[IFNAMSIZ];     /* Name of outgoing interface */
 29         __be16 hw_protocol;             /* Hardware protocol (network order) */
 30         unsigned short hw_type;         /* Hardware type */
 31         unsigned char hw_addrlen;       /* Hardware address length */
 32         unsigned char hw_addr[8];       /* Hardware address */
 33         size_t data_len;                /* Length of packet data */
 34         unsigned char payload[0];       /* Optional packet data */
 35 } ipq_packet_msg_t;
 36 
 37 /* Messages sent from userspace */
 38 typedef struct ipq_mode_msg {
 39         unsigned char value;            /* Requested mode */
 40         size_t range;                   /* Optional range of packet requested */
 41 } ipq_mode_msg_t;
 42 
 43 typedef struct ipq_verdict_msg {
 44         unsigned int value;             /* Verdict to hand to netfilter */
 45         unsigned long id;               /* Packet ID for this verdict */
 46         size_t data_len;                /* Length of replacement data */
 47         unsigned char payload[0];       /* Optional replacement packet */
 48 } ipq_verdict_msg_t;
 49 
 50 typedef struct ipq_peer_msg {
 51         union {
 52                 ipq_verdict_msg_t verdict;
 53                 ipq_mode_msg_t mode;
 54         } msg;
 55 } ipq_peer_msg_t;
 56 
 57 /* Packet delivery modes */
 58 enum {
 59         IPQ_COPY_NONE,          /* Initial mode, packets are dropped */
 60         IPQ_COPY_META,          /* Copy metadata */
 61         IPQ_COPY_PACKET         /* Copy metadata + packet (range) */
 62 };
 63 #define IPQ_COPY_MAX IPQ_COPY_PACKET
 64 
 65 /* Types of messages */
 66 #define IPQM_BASE       0x10    /* standard netlink messages below this */
 67 #define IPQM_MODE       (IPQM_BASE + 1)         /* Mode request from peer */
 68 #define IPQM_VERDICT    (IPQM_BASE + 2)         /* Verdict from peer */ 
 69 #define IPQM_PACKET     (IPQM_BASE + 3)         /* Packet from kernel */
 70 #define IPQM_MAX        (IPQM_BASE + 4)
 71 
 72 #endif /*_IP_QUEUE_H*/
 73 
  This page was automatically generated by the LXR engine.