#ifndef _IP_NAT_HELPER_H #define _IP_NAT_HELPER_H /* NAT protocol helper routines. */ #include struct sk_buff; /* Flags */ /* NAT helper must be called on every packet (for TCP) */ #define IP_NAT_HELPER_F_ALWAYS 0x01 /* Standalone NAT helper, without a conntrack part */ #define IP_NAT_HELPER_F_STANDALONE 0x02 struct ip_nat_helper { struct list_head list; /* Internal use */ const char *name; /* name of the module */ unsigned char flags; /* Flags (see above) */ struct module *me; /* pointer to self */ /* Mask of things we will help: vs. tuple from server */ struct ip_conntrack_tuple tuple; struct ip_conntrack_tuple mask; /* Helper function: returns verdict */ unsigned int (*help)(struct ip_conntrack *ct, struct ip_conntrack_expect *exp, struct ip_nat_info *info, enum ip_conntrack_info ctinfo, unsigned int hooknum, struct sk_buff **pskb); /* Returns verdict and sets up NAT for this connection */ unsigned int (*expect)(struct sk_buff **pskb, unsigned int hooknum, struct ip_conntrack *ct, struct ip_nat_info *info); }; extern struct list_head helpers; extern int ip_nat_helper_register(struct ip_nat_helper *me); extern void ip_nat_helper_unregister(struct ip_nat_helper *me); extern int ip_nat_mangle_tcp_packet(struct sk_buff **skb, struct ip_conntrack *ct, enum ip_conntrack_info ctinfo, unsigned int match_offset, unsigned int match_len, char *rep_buffer, unsigned int rep_len); extern int ip_nat_seq_adjust(struct sk_buff *skb, struct ip_conntrack *ct, enum ip_conntrack_info ctinfo); extern void ip_nat_delete_sack(struct sk_buff *skb); #endif