ip_nat_protocol.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Header for use in defining a given protocol. */
  2. #ifndef _IP_NAT_PROTOCOL_H
  3. #define _IP_NAT_PROTOCOL_H
  4. #include <linux/init.h>
  5. #include <linux/list.h>
  6. #include <linux/netfilter_ipv4/ip_nat.h>
  7. #include <linux/netfilter/nfnetlink_conntrack.h>
  8. struct iphdr;
  9. struct ip_nat_range;
  10. struct ip_nat_protocol
  11. {
  12. /* Protocol name */
  13. const char *name;
  14. /* Protocol number. */
  15. unsigned int protonum;
  16. struct module *me;
  17. /* Translate a packet to the target according to manip type.
  18.    Return true if succeeded. */
  19. int (*manip_pkt)(struct sk_buff **pskb,
  20.  unsigned int iphdroff,
  21.  const struct ip_conntrack_tuple *tuple,
  22.  enum ip_nat_manip_type maniptype);
  23. /* Is the manipable part of the tuple between min and max incl? */
  24. int (*in_range)(const struct ip_conntrack_tuple *tuple,
  25. enum ip_nat_manip_type maniptype,
  26. const union ip_conntrack_manip_proto *min,
  27. const union ip_conntrack_manip_proto *max);
  28. /* Alter the per-proto part of the tuple (depending on
  29.    maniptype), to give a unique tuple in the given range if
  30.    possible; return false if not.  Per-protocol part of tuple
  31.    is initialized to the incoming packet. */
  32. int (*unique_tuple)(struct ip_conntrack_tuple *tuple,
  33.     const struct ip_nat_range *range,
  34.     enum ip_nat_manip_type maniptype,
  35.     const struct ip_conntrack *conntrack);
  36. unsigned int (*print)(char *buffer,
  37.       const struct ip_conntrack_tuple *match,
  38.       const struct ip_conntrack_tuple *mask);
  39. unsigned int (*print_range)(char *buffer,
  40.     const struct ip_nat_range *range);
  41. int (*range_to_nfattr)(struct sk_buff *skb,
  42.        const struct ip_nat_range *range);
  43. int (*nfattr_to_range)(struct nfattr *tb[],
  44.        struct ip_nat_range *range);
  45. };
  46. /* Protocol registration. */
  47. extern int ip_nat_protocol_register(struct ip_nat_protocol *proto);
  48. extern void ip_nat_protocol_unregister(struct ip_nat_protocol *proto);
  49. extern struct ip_nat_protocol *ip_nat_proto_find_get(u_int8_t protocol);
  50. extern void ip_nat_proto_put(struct ip_nat_protocol *proto);
  51. /* Built-in protocols. */
  52. extern struct ip_nat_protocol ip_nat_protocol_tcp;
  53. extern struct ip_nat_protocol ip_nat_protocol_udp;
  54. extern struct ip_nat_protocol ip_nat_protocol_icmp;
  55. extern struct ip_nat_protocol ip_nat_unknown_protocol;
  56. extern int init_protocols(void) __init;
  57. extern void cleanup_protocols(void);
  58. extern struct ip_nat_protocol *find_nat_proto(u_int16_t protonum);
  59. extern int ip_nat_port_range_to_nfattr(struct sk_buff *skb,
  60.        const struct ip_nat_range *range);
  61. extern int ip_nat_port_nfattr_to_range(struct nfattr *tb[],
  62.        struct ip_nat_range *range);
  63. #endif /*_IP_NAT_PROTO_H*/