/* * IP_MASQ user space control interface * $Id: ip_masq.h,v 1.2 1998/12/08 05:41:48 davem Exp $ */ #ifndef _LINUX_IP_MASQ_H #define _LINUX_IP_MASQ_H #ifdef __KERNEL__ #include #include #else #include #include #endif struct ip_masq_user { int protocol; u_int16_t sport, dport, mport; u_int32_t saddr, daddr, maddr; u_int32_t rt_daddr; /* dst address to use for rt query */ u_int32_t rt_saddr; u_int32_t ip_tos; /* TOS */ unsigned timeout; /* in ticks (HZ per sec) */ unsigned flags; int fd; /* NOT IMPL: attach tunnel to this fd */ int state; /* NOT IMPL: return conn state */ }; #define IP_MASQ_USER_F_LISTEN 0x01 /* put entry to LISTEN state */ #define IP_MASQ_USER_F_DEAD 0x02 /* mark as DEAD */ #define IP_MASQ_USER_F_FORCE 0x04 /* force operation */ struct ip_masq_timeout { int protocol; union { struct { unsigned established; unsigned syn_sent; unsigned syn_recv; unsigned fin_wait; unsigned time_wait; unsigned close; unsigned close_wait; unsigned last_ack; unsigned listen; } tcp; unsigned udp; unsigned icmp; } u; }; /* * AUTOFW stuff */ #define IP_FWD_RANGE 1 #define IP_FWD_PORT 2 #define IP_FWD_DIRECT 3 #define IP_AUTOFW_ACTIVE 1 #define IP_AUTOFW_USETIME 2 #define IP_AUTOFW_SECURE 4 /* WARNING: bitwise equal to ip_autofw in net/ip_autofw.h */ struct ip_autofw_user { void * next; u_int16_t type; u_int16_t low; u_int16_t hidden; u_int16_t high; u_int16_t visible; u_int16_t protocol; u_int32_t lastcontact; u_int32_t where; u_int16_t ctlproto; u_int16_t ctlport; u_int16_t flags; /* struct timer_list timer; */ }; /* * PORTFW stuff */ struct ip_portfw_user { u_int16_t protocol; /* Which protocol are we talking? */ u_int32_t laddr, raddr; /* Remote address */ u_int16_t lport, rport; /* Local and remote port */ int pref; /* Preference value */ }; /* * MFW stuff */ struct ip_mfw_user { u_int32_t fwmark; /* Firewalling mark */ u_int32_t raddr; /* remote port */ u_int16_t rport; /* remote port */ u_int16_t dummy; /* Make up to multiple of 4 */ int pref; /* Preference value */ unsigned flags; /* misc flags */ }; #define IP_MASQ_MFW_SCHED 0x01 #define IP_FW_MASQCTL_MAX 256 #define IP_MASQ_TNAME_MAX 32 struct ip_masq_ctl { int m_target; int m_cmd; char m_tname[IP_MASQ_TNAME_MAX]; union { struct ip_portfw_user portfw_user; struct ip_autofw_user autofw_user; struct ip_mfw_user mfw_user; struct ip_masq_user user; unsigned char m_raw[IP_FW_MASQCTL_MAX]; } u; }; #define IP_MASQ_CTL_BSIZE (offsetof (struct ip_masq_ctl,u)) #define IP_MASQ_TARGET_CORE 1 #define IP_MASQ_TARGET_MOD 2 /* masq_mod is selected by "name" */ #define IP_MASQ_TARGET_USER 3 #define IP_MASQ_TARGET_LAST 4 #define IP_MASQ_CMD_NONE 0 /* just peek */ #define IP_MASQ_CMD_INSERT 1 #define IP_MASQ_CMD_ADD 2 #define IP_MASQ_CMD_SET 3 #define IP_MASQ_CMD_DEL 4 #define IP_MASQ_CMD_GET 5 #define IP_MASQ_CMD_FLUSH 6 #define IP_MASQ_CMD_LIST 7 /* actually fake: done via /proc */ #define IP_MASQ_CMD_ENABLE 8 #define IP_MASQ_CMD_DISABLE 9 #endif /* _LINUX_IP_MASQ_H */