|
|
1.1 ! root 1: /* ! 2: * IP masquerading functionality definitions ! 3: */ ! 4: ! 5: #ifndef _IP_MASQ_H ! 6: #define _IP_MASQ_H ! 7: ! 8: #include <linux/types.h> ! 9: #include <linux/netdevice.h> ! 10: #include <linux/skbuff.h> ! 11: #include <linux/config.h> ! 12: ! 13: /* ! 14: * This define affects the number of ports that can be handled ! 15: * by each of the protocol helper modules. ! 16: */ ! 17: #define MAX_MASQ_APP_PORTS 12 ! 18: ! 19: /* ! 20: * Linux ports don't normally get allocated above 32K. ! 21: * I used an extra 4K port-space ! 22: */ ! 23: ! 24: #define PORT_MASQ_BEGIN 61000 ! 25: #define PORT_MASQ_END (PORT_MASQ_BEGIN+4096) ! 26: ! 27: /* ! 28: * Default timeouts for masquerade functions The control channels now ! 29: * expire the same as TCP channels (other than being updated by ! 30: * packets on their associated data channels. ! 31: */ ! 32: #define MASQUERADE_EXPIRE_TCP 15*60*HZ ! 33: #define MASQUERADE_EXPIRE_TCP_FIN 2*60*HZ ! 34: #define MASQUERADE_EXPIRE_UDP 5*60*HZ ! 35: /* ! 36: * ICMP can no longer be modified on the fly using an ioctl - this ! 37: * define is the only way to change the timeouts ! 38: */ ! 39: #define MASQUERADE_EXPIRE_ICMP 125*HZ ! 40: ! 41: #define IP_AUTOFW_EXPIRE 15*HZ ! 42: ! 43: #define IP_MASQ_F_OUT_SEQ 0x01 /* must do output seq adjust */ ! 44: #define IP_MASQ_F_IN_SEQ 0x02 /* must do input seq adjust */ ! 45: #define IP_MASQ_F_NO_DPORT 0x04 /* no dport set yet */ ! 46: #define IP_MASQ_F_NO_DADDR 0x08 /* no daddr yet */ ! 47: #define IP_MASQ_F_HASHED 0x10 /* hashed entry */ ! 48: #define IP_MASQ_F_SAW_RST 0x20 /* tcp rst pkt seen */ ! 49: #define IP_MASQ_F_SAW_FIN_IN 0x40 /* tcp fin pkt seen incoming */ ! 50: #define IP_MASQ_F_SAW_FIN_OUT 0x80 /* tcp fin pkt seen outgoing */ ! 51: #define IP_MASQ_F_SAW_FIN (IP_MASQ_F_SAW_FIN_IN | \ ! 52: IP_MASQ_F_SAW_FIN_OUT) ! 53: /* tcp fin pkts seen */ ! 54: #define IP_MASQ_F_CONTROL 0x100 /* this is a control channel */ ! 55: #define IP_MASQ_F_NO_SPORT 0x200 /* no sport set yet */ ! 56: #define IP_MASQ_F_FTP_PASV 0x400 /* ftp PASV command just issued */ ! 57: #define IP_MASQ_F_NO_REPLY 0x800 /* no reply yet from outside */ ! 58: #define IP_MASQ_F_AFW_PORT 0x1000 ! 59: ! 60: #ifdef __KERNEL__ ! 61: ! 62: /* ! 63: * Delta seq. info structure ! 64: * Each MASQ struct has 2 (output AND input seq. changes). ! 65: */ ! 66: ! 67: struct ip_masq_seq { ! 68: __u32 init_seq; /* Add delta from this seq */ ! 69: short delta; /* Delta in sequence numbers */ ! 70: short previous_delta; /* Delta in sequence numbers before last resized pkt */ ! 71: }; ! 72: ! 73: /* ! 74: * MASQ structure allocated for each masqueraded association ! 75: */ ! 76: struct ip_masq { ! 77: struct ip_masq *m_link, *s_link; /* hashed link ptrs */ ! 78: struct timer_list timer; /* Expiration timer */ ! 79: __u16 protocol; /* Which protocol are we talking? */ ! 80: __u16 sport, dport, mport; /* src, dst & masq ports */ ! 81: __u32 saddr, daddr, maddr; /* src, dst & masq addresses */ ! 82: struct ip_masq_seq out_seq, in_seq; ! 83: struct ip_masq_app *app; /* bound ip_masq_app object */ ! 84: void *app_data; /* Application private data */ ! 85: unsigned flags; /* status flags */ ! 86: struct ip_masq *control; /* Corresponding control connection */ ! 87: }; ! 88: ! 89: /* ! 90: * timeout values ! 91: */ ! 92: ! 93: struct ip_fw_masq { ! 94: int tcp_timeout; ! 95: int tcp_fin_timeout; ! 96: int udp_timeout; ! 97: }; ! 98: ! 99: extern struct ip_fw_masq *ip_masq_expire; ! 100: ! 101: /* ! 102: * [0]: UDP free_ports ! 103: * [1]: TCP free_ports ! 104: * [2]: ICMP free ids ! 105: */ ! 106: ! 107: extern int ip_masq_free_ports[3]; ! 108: ! 109: /* ! 110: * ip_masq initializer (registers symbols and /proc/net entries) ! 111: */ ! 112: extern int ip_masq_init(void); ! 113: ! 114: /* ! 115: * functions called from ip layer ! 116: */ ! 117: extern int ip_fw_masquerade(struct sk_buff **, struct device *); ! 118: extern int ip_fw_masq_icmp(struct sk_buff **, struct device *); ! 119: extern int ip_fw_demasquerade(struct sk_buff **, struct device *); ! 120: ! 121: /* ! 122: * ip_masq obj creation/deletion functions. ! 123: */ ! 124: extern struct ip_masq *ip_masq_new(struct device *dev, int proto, __u32 saddr, __u16 sport, __u32 daddr, __u16 dport, unsigned flags); ! 125: extern void ip_masq_set_expire(struct ip_masq *ms, unsigned long tout); ! 126: ! 127: #ifdef CONFIG_IP_MASQUERADE_IPAUTOFW ! 128: extern void ip_autofw_expire(unsigned long data); ! 129: #endif ! 130: ! 131: /* ! 132: * ! 133: * IP_MASQ_APP: IP application masquerading definitions ! 134: * ! 135: */ ! 136: ! 137: struct ip_masq_app ! 138: { ! 139: struct ip_masq_app *next; ! 140: char *name; /* name of application proxy */ ! 141: unsigned type; /* type = proto<<16 | port (host byte order)*/ ! 142: int n_attach; ! 143: int (*masq_init_1) /* ip_masq initializer */ ! 144: (struct ip_masq_app *, struct ip_masq *); ! 145: int (*masq_done_1) /* ip_masq fin. */ ! 146: (struct ip_masq_app *, struct ip_masq *); ! 147: int (*pkt_out) /* output (masquerading) hook */ ! 148: (struct ip_masq_app *, struct ip_masq *, struct sk_buff **, struct device *); ! 149: int (*pkt_in) /* input (demasq) hook */ ! 150: (struct ip_masq_app *, struct ip_masq *, struct sk_buff **, struct device *); ! 151: }; ! 152: ! 153: /* ! 154: * ip_masq_app initializer ! 155: */ ! 156: extern int ip_masq_app_init(void); ! 157: ! 158: /* ! 159: * ip_masq_app object registration functions (port: host byte order) ! 160: */ ! 161: extern int register_ip_masq_app(struct ip_masq_app *mapp, unsigned short proto, __u16 port); ! 162: extern int unregister_ip_masq_app(struct ip_masq_app *mapp); ! 163: ! 164: /* ! 165: * get ip_masq_app obj by proto,port(net_byte_order) ! 166: */ ! 167: extern struct ip_masq_app * ip_masq_app_get(unsigned short proto, __u16 port); ! 168: ! 169: /* ! 170: * ip_masq TO ip_masq_app (un)binding functions. ! 171: */ ! 172: extern struct ip_masq_app * ip_masq_bind_app(struct ip_masq *ms); ! 173: extern int ip_masq_unbind_app(struct ip_masq *ms); ! 174: ! 175: /* ! 176: * output and input app. masquerading hooks. ! 177: * ! 178: */ ! 179: extern int ip_masq_app_pkt_out(struct ip_masq *, struct sk_buff **skb_p, struct device *dev); ! 180: extern int ip_masq_app_pkt_in(struct ip_masq *, struct sk_buff **skb_p, struct device *dev); ! 181: ! 182: /* ! 183: * service routine(s). ! 184: */ ! 185: extern struct ip_masq * ip_masq_out_get_2(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port); ! 186: extern struct ip_masq * ip_masq_in_get_2(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port); ! 187: ! 188: /* ! 189: * /proc/net entry ! 190: */ ! 191: extern int ip_masq_app_getinfo(char *buffer, char **start, off_t offset, int length, int dummy); ! 192: ! 193: /* ! 194: * skb_replace function used by "client" modules to replace ! 195: * a segment of skb. ! 196: */ ! 197: extern struct sk_buff * ip_masq_skb_replace(struct sk_buff *skb, int pri, char *o_buf, int o_len, char *n_buf, int n_len); ! 198: ! 199: #ifdef CONFIG_IP_MASQUERADE_IPAUTOFW ! 200: extern struct ip_autofw * ip_autofw_hosts; ! 201: #endif /* CONFIG_IP_MASQUERADE_IPAUTOFW */ ! 202: ! 203: #endif /* __KERNEL__ */ ! 204: ! 205: #endif /* _IP_MASQ_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.