|
|
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.