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