www.pudn.com > nat.rar > ip_nat_proto.h


#ifndef _IP_NAT_PROTO_H_ 
#define _IP_NAT_PROTO_H_ 
 
struct ip_nat_protocol 
{ 
	struct list_head	list; 
	unsigned char		proto; 
	 
	int (*pkt_to_tuple)(const void *datah, unsigned int datalen, 
			    struct ip_conntrack_tuple *tuple); 
 
	 
	int (*invert_tuple)(struct ip_conntrack_tuple *inverse, 
			    const struct ip_conntrack_tuple *orig); 
 
	void (*manip_pkt)(struct ip_hdr *iph, unsigned int len, 
	       const struct ip_conntrack_manip *manip, 
	       enum ip_nat_manip_type maniptype); 
	 
	int (*in_range)(const struct ip_conntrack_tuple *tuple, 
			enum ip_nat_manip_type maniptype, 
			const union ip_conntrack_manip_proto *min, 
			const union ip_conntrack_manip_proto *max); 
 
	 
	int (*unique_tuple)(struct ip_conntrack_tuple *tuple, 
			    const struct ip_nat_range *range, 
			    enum ip_nat_manip_type maniptype, 
			    const struct ip_conntrack *conntrack); 
 
	unsigned int (*print)(char *buffer, 
			      const struct ip_conntrack_tuple *match, 
			      const struct ip_conntrack_tuple *mask); 
 
	unsigned int (*print_range)(char *buffer, 
				    const struct ip_nat_range *range); 
 
 
	int (*packet)(struct ip_conntrack *ct, 
		       struct ip_hdr *iph, unsigned int len, 
		       enum ip_nat_manip_type maniptype); 
}; 
 
extern struct ip_nat_protocol	ip_nat_protocol_icmp; 
extern struct ip_nat_protocol	ip_nat_protocol_udp; 
extern struct ip_nat_protocol	ip_nat_protocol_tcp; 
 
extern int						ip_conntrack_protocol_register( 
								struct ip_nat_protocol *proto); 
extern struct ip_nat_protocol	*find_proto(unsigned char protocol); 
 
 
#endif