ip_fil.h

来自「eCos操作系统源码」· C头文件 代码 · 共 609 行 · 第 1/2 页

H
609
字号
//==========================================================================////      include/netinet/ip_fil.h////      ////==========================================================================//####BSDCOPYRIGHTBEGIN####//// -------------------------------------------//// Portions of this software may have been derived from OpenBSD or other sources,// and are covered by the appropriate copyright disclaimers included herein.//// -------------------------------------------////####BSDCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    gthomas// Contributors: gthomas// Date:         2000-01-10// Purpose:      // Description:  //              ////####DESCRIPTIONEND####////==========================================================================/* $OpenBSD: ip_fil.h,v 1.13 1999/12/15 05:20:21 kjell Exp $ *//* * Copyright (C) 1993-1998 by Darren Reed. * * Redistribution and use in source and binary forms are permitted * provided that this notice is preserved and due credit is given * to the original author and the contributors. * * @(#)ip_fil.h	1.35 6/5/96 */#ifndef	_NETINET_IP_FIL_H__#define	_NETINET_IP_FIL_H__/* * Pathnames for various IP Filter control devices.  Used by LKM * and userland, so defined here. */#define	IPNAT_NAME	"/dev/ipnat"#define	IPSTATE_NAME	"/dev/ipstate"#define	IPAUTH_NAME	"/dev/ipauth"#ifndef	SOLARIS# define SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4)))#endif#if defined(KERNEL) && !defined(_KERNEL)# define	_KERNEL#endif#ifndef	__P# ifdef	__STDC__#  define	__P(x)	x# else#  define	__P(x)	()# endif#endif#if defined(__STDC__) || defined(__GNUC__)# define	SIOCADAFR	_IOW('r', 60, struct frentry)# define	SIOCRMAFR	_IOW('r', 61, struct frentry)# define	SIOCSETFF	_IOW('r', 62, u_int)# define	SIOCGETFF	_IOR('r', 63, u_int)# define	SIOCGETFS	_IOR('r', 64, struct friostat)# define	SIOCIPFFL	_IOWR('r', 65, int)# define	SIOCIPFFB	_IOR('r', 66, int)# define	SIOCADIFR	_IOW('r', 67, struct frentry)# define	SIOCRMIFR	_IOW('r', 68, struct frentry)# define	SIOCSWAPA	_IOR('r', 69, u_int)# define	SIOCINAFR	_IOW('r', 70, struct frentry)# define	SIOCINIFR	_IOW('r', 71, struct frentry)# define	SIOCFRENB	_IOW('r', 72, u_int)# define	SIOCFRSYN	_IOW('r', 73, u_int)# define	SIOCFRZST	_IOWR('r', 74, struct friostat)# define	SIOCZRLST	_IOWR('r', 75, struct frentry)# define	SIOCAUTHW	_IOWR('r', 76, struct fr_info)# define	SIOCAUTHR	_IOWR('r', 77, struct fr_info)# define	SIOCATHST	_IOWR('r', 78, struct fr_authstat)#else# define	SIOCADAFR	_IOW(r, 60, struct frentry)# define	SIOCRMAFR	_IOW(r, 61, struct frentry)# define	SIOCSETFF	_IOW(r, 62, u_int)# define	SIOCGETFF	_IOR(r, 63, u_int)# define	SIOCGETFS	_IOR(r, 64, struct friostat)# define	SIOCIPFFL	_IOWR(r, 65, int)# define	SIOCIPFFB	_IOR(r, 66, int)# define	SIOCADIFR	_IOW(r, 67, struct frentry)# define	SIOCRMIFR	_IOW(r, 68, struct frentry)# define	SIOCSWAPA	_IOR(r, 69, u_int)# define	SIOCINAFR	_IOW(r, 70, struct frentry)# define	SIOCINIFR	_IOW(r, 71, struct frentry)# define	SIOCFRENB	_IOW(r, 72, u_int)# define	SIOCFRSYN	_IOW(r, 73, u_int)# define	SIOCFRZST	_IOWR(r, 74, struct friostat)# define	SIOCZRLST	_IOWR(r, 75, struct frentry)# define	SIOCAUTHW	_IOWR(r, 76, struct fr_info)# define	SIOCAUTHR	_IOWR(r, 77, struct fr_info)# define	SIOCATHST	_IOWR(r, 78, struct fr_authstat)#endif#define	SIOCADDFR	SIOCADAFR#define	SIOCDELFR	SIOCRMAFR#define	SIOCINSFR	SIOCINAFRtypedef	struct	fr_ip	{	u_char	fi_v:4;		/* IP version */	u_char	fi_fl:4;	/* packet flags */	u_char	fi_tos;		/* IP packet TOS */	u_char	fi_ttl;		/* IP packet TTL */	u_char	fi_p;		/* IP packet protocol */	struct	in_addr	fi_src;	/* source address from packet */	struct	in_addr	fi_dst;	/* destination address from packet */	u_32_t	fi_optmsk;	/* bitmask composed from IP options */	u_short	fi_secmsk;	/* bitmask composed from IP security options */	u_short	fi_auth;	/* authentication code from IP sec. options */} fr_ip_t;#define	FI_OPTIONS	(FF_OPTIONS >> 24)#define	FI_TCPUDP	(FF_TCPUDP >> 24)	/* TCP/UCP implied comparison*/#define	FI_FRAG		(FF_FRAG >> 24)#define	FI_SHORT	(FF_SHORT >> 24)#define	FI_CMP		(FI_OPTIONS|FI_TCPUDP|FI_SHORT)/* * These are both used by the state and NAT code to indicate that one port or * the other should be treated as a wildcard. */#define	FI_W_SPORT	0x00000100#define	FI_W_DPORT	0x00000200#define	FI_WILD		(FI_W_SPORT|FI_W_DPORT)typedef	struct	fr_info	{	void	*fin_ifp;		/* interface packet is `on' */	struct	fr_ip	fin_fi;		/* IP Packet summary */	u_short	fin_data[2];		/* TCP/UDP ports, ICMP code/type */	u_char	fin_out;		/* in or out ? 1 == out, 0 == in */	u_char	fin_rev;		/* state only: 1 = reverse */	u_short	fin_hlen;		/* length of IP header in bytes */	u_char	fin_tcpf;		/* TCP header flags (SYN, ACK, etc) */	/* From here on is packet specific */	u_char	fin_icode;		/* ICMP error to return */	u_short	fin_rule;		/* rule # last matched */	u_short	fin_group;		/* group number, -1 for none */	struct	frentry *fin_fr;	/* last matching rule */	char	*fin_dp;		/* start of data past IP header */	u_short	fin_dlen;		/* length of data portion of packet */	u_short	fin_id;			/* IP packet id field */	void	*fin_mp;		/* pointer to pointer to mbuf */#if SOLARIS && defined(_KERNEL)	void	*fin_qfm;		/* pointer to mblk where pkt starts */	void	*fin_qif;#endif} fr_info_t;/* * Size for compares on fr_info structures */#define	FI_CSIZE	offsetof(fr_info_t, fin_icode)/* * Size for copying cache fr_info structure */#define	FI_COPYSIZE	offsetof(fr_info_t, fin_dp)typedef	struct	frdest	{	void	*fd_ifp;	struct	in_addr	fd_ip;	char	fd_ifname[IFNAMSIZ];} frdest_t;typedef	struct	frentry {	struct	frentry	*fr_next;	u_short	fr_group;	/* group to which this rule belongs */	u_short	fr_grhead;	/* group # which this rule starts */	struct	frentry	*fr_grp;	int	fr_ref;		/* reference count - for grouping */	void	*fr_ifa;#if BSD >= 199306	void	*fr_oifa;#endif	/*	 * These are only incremented when a packet  matches this rule and	 * it is the last match	 */	U_QUAD_T	fr_hits;	U_QUAD_T	fr_bytes;	/*	 * Fields after this may not change whilst in the kernel.	 */	struct	fr_ip	fr_ip;	struct	fr_ip	fr_mip;	/* mask structure */	u_char	fr_tcpfm;	/* tcp flags mask */	u_char	fr_tcpf;	/* tcp flags */	u_short	fr_icmpm;	/* data for ICMP packets (mask) */	u_short	fr_icmp;	u_char	fr_scmp;	/* data for port comparisons */	u_char	fr_dcmp;	u_short	fr_dport;	u_short	fr_sport;	u_short	fr_stop;	/* top port for <> and >< */	u_short	fr_dtop;	/* top port for <> and >< */	u_32_t	fr_flags;	/* per-rule flags && options (see below) */	u_short	fr_skip;	/* # of rules to skip */	u_short	fr_loglevel;	/* syslog log facility + priority */	int	(*fr_func) __P((int, ip_t *, fr_info_t *));	/* call this function */	char	fr_icode;	/* return ICMP code */	char	fr_ifname[IFNAMSIZ];#if BSD >= 199306	char	fr_oifname[IFNAMSIZ];#endif	struct	frdest	fr_tif;	/* "to" interface */	struct	frdest	fr_dif;	/* duplicate packet interfaces */} frentry_t;#define	fr_proto	fr_ip.fi_p#define	fr_ttl		fr_ip.fi_ttl#define	fr_tos		fr_ip.fi_tos#define	fr_dst		fr_ip.fi_dst#define	fr_src		fr_ip.fi_src#define	fr_dmsk		fr_mip.fi_dst#define	fr_smsk		fr_mip.fi_src#ifndef	offsetof#define	offsetof(t,m)	(int)((&((t *)0L)->m))#endif#define	FR_CMPSIZ	(sizeof(struct frentry) - offsetof(frentry_t, fr_ip))/* * fr_flags */#define	FR_BLOCK	0x00001	/* do not allow packet to pass */#define	FR_PASS		0x00002	/* allow packet to pass */#define	FR_OUTQUE	0x00004	/* outgoing packets */#define	FR_INQUE	0x00008	/* ingoing packets */#define	FR_LOG		0x00010	/* Log */#define	FR_LOGB		0x00011	/* Log-fail */#define	FR_LOGP		0x00012	/* Log-pass */#define	FR_LOGBODY	0x00020	/* Log the body */#define	FR_LOGFIRST	0x00040	/* Log the first byte if state held */#define	FR_RETRST	0x00080	/* Return TCP RST packet - reset connection */#define	FR_RETICMP	0x00100	/* Return ICMP unreachable packet */#define	FR_FAKEICMP	0x00180	/* Return ICMP unreachable with fake source */#define	FR_NOMATCH	0x00200	/* no match occured */#define	FR_ACCOUNT	0x00400	/* count packet bytes */#define	FR_KEEPFRAG	0x00800	/* keep fragment information */#define	FR_KEEPSTATE	0x01000	/* keep `connection' state information */#define	FR_INACTIVE	0x02000#define	FR_QUICK	0x04000	/* match & stop processing list */#define	FR_FASTROUTE	0x08000	/* bypass normal routing */#define	FR_CALLNOW	0x10000	/* call another function (fr_func) if matches */#define	FR_DUP		0x20000	/* duplicate packet */#define	FR_LOGORBLOCK	0x40000	/* block the packet if it can't be logged */#define	FR_NOTSRCIP	0x80000	/* not the src IP# */#define	FR_NOTDSTIP	0x100000	/* not the dst IP# */#define	FR_AUTH		0x200000	/* use authentication */#define	FR_PREAUTH	0x400000	/* require preauthentication */#define	FR_DONTCACHE	0x800000	/* don't cache the result */#define	FR_LOGMASK	(FR_LOG|FR_LOGP|FR_LOGB)#define	FR_RETMASK	(FR_RETICMP|FR_RETRST|FR_FAKEICMP)/* * These correspond to #define's for FI_* and are stored in fr_flags */#define	FF_OPTIONS	0x01000000#define	FF_TCPUDP	0x02000000#define	FF_FRAG		0x04000000#define	FF_SHORT	0x08000000/* * recognized flags for SIOCGETFF and SIOCSETFF, and get put in fr_flags */#define	FF_LOGPASS	0x10000000#define	FF_LOGBLOCK	0x20000000#define	FF_LOGNOMATCH	0x40000000#define	FF_LOGGING	(FF_LOGPASS|FF_LOGBLOCK|FF_LOGNOMATCH)#define	FF_BLOCKNONIP	0x80000000	/* Solaris2 Only */#define	FR_NONE 0#define	FR_EQUAL 1#define	FR_NEQUAL 2#define FR_LESST 3#define FR_GREATERT 4#define FR_LESSTE 5#define FR_GREATERTE 6#define	FR_OUTRANGE 7#define	FR_INRANGE 8typedef	struct	filterstats {	u_long	fr_pass;	/* packets allowed */	u_long	fr_block;	/* packets denied */	u_long	fr_nom;		/* packets which don't match any rule */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?