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 + -
显示快捷键?