Last active
August 29, 2015 14:00
-
-
Save shangbo/11027423 to your computer and use it in GitHub Desktop.
ip_queue.h( A deprecated head file for linux, but be needed by libfilter_queue)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//A deprecated head file for linux, but be needed by libfilter_queue | |
//put this file in the path: /usr/include/linux/netfilter_ipv4/ | |
/* | |
* * This is a module which is used for queueing IPv4 packets and | |
* * communicating with userspace via netlink. | |
* * | |
* * (C) 2000 James Morris, this code is GPL. | |
* */ | |
#ifndef _IP_QUEUE_H | |
#define _IP_QUEUE_H | |
#ifdef __KERNEL__ | |
#ifdef DEBUG_IPQ | |
#define QDEBUG(x...) printk(KERN_DEBUG ## x) | |
#else | |
#define QDEBUG(x...) | |
#endif /* DEBUG_IPQ */ | |
#else | |
#include <net/if.h> | |
#endif /* ! __KERNEL__ */ | |
/* Messages sent from kernel */ | |
typedef struct ipq_packet_msg { | |
unsigned long packet_id; /* ID of queued packet */ | |
unsigned long mark; /* Netfilter mark value */ | |
long timestamp_sec; /* Packet arrival time (seconds) */ | |
long timestamp_usec; /* Packet arrvial time (+useconds) */ | |
unsigned int hook; /* Netfilter hook we rode in on */ | |
char indev_name[IFNAMSIZ]; /* Name of incoming interface */ | |
char outdev_name[IFNAMSIZ]; /* Name of outgoing interface */ | |
__be16 hw_protocol; /* Hardware protocol (network order) */ | |
unsigned short hw_type; /* Hardware type */ | |
unsigned char hw_addrlen; /* Hardware address length */ | |
unsigned char hw_addr[8]; /* Hardware address */ | |
size_t data_len; /* Length of packet data */ | |
unsigned char payload[0]; /* Optional packet data */ | |
} ipq_packet_msg_t; | |
/* Messages sent from userspace */ | |
typedef struct ipq_mode_msg { | |
unsigned char value; /* Requested mode */ | |
size_t range; /* Optional range of packet requested */ | |
} ipq_mode_msg_t; | |
typedef struct ipq_verdict_msg { | |
unsigned int value; /* Verdict to hand to netfilter */ | |
unsigned long id; /* Packet ID for this verdict */ | |
size_t data_len; /* Length of replacement data */ | |
unsigned char payload[0]; /* Optional replacement packet */ | |
} ipq_verdict_msg_t; | |
typedef struct ipq_peer_msg { | |
union { | |
ipq_verdict_msg_t verdict; | |
ipq_mode_msg_t mode; | |
} msg; | |
} ipq_peer_msg_t; | |
/* Packet delivery modes */ | |
enum { | |
IPQ_COPY_NONE, /* Initial mode, packets are dropped */ | |
IPQ_COPY_META, /* Copy metadata */ | |
IPQ_COPY_PACKET /* Copy metadata + packet (range) */ | |
}; | |
#define IPQ_COPY_MAX IPQ_COPY_PACKET | |
/* Types of messages */ | |
#define IPQM_BASE 0x10 /* standard netlink messages below this */ | |
#define IPQM_MODE (IPQM_BASE + 1) /* Mode request from peer */ | |
#define IPQM_VERDICT (IPQM_BASE + 2) /* Verdict from peer */ | |
#define IPQM_PACKET (IPQM_BASE + 3) /* Packet from kernel */ | |
#define IPQM_MAX (IPQM_BASE + 4) | |
#endif /*_IP_QUEUE_H*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment